JSweet-Paris-TypeScript

publicité
JSweet -- www.jsweet.org
Transpiler Java vers JavaScript en passant par TypeScript
1
JSweet: pourquoi et comment?
2
Utiliser des librairies JavaScript… en Java!
Serveurs Java
Clients JavaScript
Java data objects
3
Approche générale: émuler Java
guava
java.lang
Programme Java
java.util
sdk
java….
wrappers
TRANSFORMATEUR
runtime js
Programme JavaScript
librairies JS
4
L’approche JSweet
jQuery
Core JS
Programme Java
DOM JS
Angular
underscore
Autres libs JS
TRANSFORMATEUR
Programme JavaScript
librairies JS
5
DefinitelyTyped
●
●
●
●
> 1500 librairies JavaScript bien typées
6500 pull requests
1680 contributeurs
Vers un HTML5 bien typé et des outils plus professionnels
6
Comment ca marche?
DefinitelyTyped
TS
defs
JSweet repository
Traducteur d’API
Jars
Java
Java 2 TS
TS
TS 2 JS
(tsc)
TS
defs
JS
Transpiler
7
Les intérêts de passer par TypeScript
● Un transpiler très léger avec du code propre et lisible (comme TypeScript)
○
Rien à voir avec GWT par exemple...
● Une intégration facile vers TypeScript (génération des définitions)
● Un design robuste (double vérification du programme et des APIs), avec une
garantie de compatibilité TypeScript (réversibilité)
● Un support facile des différentes options de génération TypeScript
○
○
Modules (AMD, UMD, commonjs, …)
Versions (ES3 => ES6)
● Au niveau du langage, le mapping de Java vers TypeScript permet de réutiliser
les concepts TypeScript, en particulier pour le typage
8
JSweet: mapping TypeScript
9
Principes
● Une API Java minimale pour les types de base (java.lang)
○
○
Object, String, Boolean, Integer, Number, Throwable, arrays, …
java.util.function (partiellement)
● Une API JavaScript (jsweet.lang)
● Passage de l’une à l’autre via: jsweet.util.Globals
○
○
○
○
○
○
○
●
object (jsweet.lang.Object ⇔ java.lang.Object)
boolean (jsweet.lang.Boolean ⇔ java.lang.Boolean|boolean)
string (jsweet.lang.String ⇔ java.lang.String)
number ( jsweet.lang.Number ⇔ java.lang.Integer|java.lang.Double|int|...)
array (jsweet.lang.Array<T> ⇔ T[])
function (jsweet.lang.Function ⇔ java.util.function.*)
...
Types auxiliaires effacés (@Erased) ou transformés vers TypeScript
10
Structures mappées (extrait)
●
●
●
●
●
Modules/namespaces (packages Java)
Classes, Interfaces (@Interface), Enums
Fonctions et variables globales (Globals), fonctions main
Champs, fonctions, constructeurs, initialiseurs
Valeurs optionnelles
○
○
●
●
●
●
champs d’interfaces (@Optional)
paramètres de fonctions (overloading)
Déclarations (@Ambient)
Lambdas Java 8 et pointeurs de fonctions: p-> { … } ⇔ p => { … }
Objets: new MyObject {{ b=true; }} ⇔ {b:true}
Accès indexés: o.$get(“key”) ⇔ o[“key”]
11
Types mappés (résumé)
●
●
●
●
●
●
●
●
Types de bases: object, string, boolean, number
Tableaux
Types objets
Types fonctionnels (lambdas Java 8)
Types strings (@StringType et jsweet.util.StringTypes)
Types tuples (jsweet.util.tuple.Tuple*)
Types unions (jsweet.util.union.Union)
Types intersections (comme les unions)
12
Exemples en live
http://www.jsweet.org/jsweet-live-sandbox/
13
Limitations et avantages
● Limitations
○
○
○
○
Pas encore de support des annotations
Intersections et unions pas aussi complets
Pas de support des APIs Java (système de plugin à venir)
Emulation de l’héritage multiple d’interfaces
● Avantages
○
○
○
Structure plus contraignante
■ appels de fonctions
■ variables globales
■ any
Support possible de ASM.js (int/float vs number)
Tooling
14
Demos
15
Contributions
● Angular + Node.js + Socket.io:
https://github.com/lgrignon/jsweet-node-example
● Babylon.js: http://ssatguru.appspot.com/babylonjs/Vishva/webapp/index.html
16
En savoir plus: http://www.jsweet.org
17
Téléchargement