Stéphane Epardaut nous présentera le langage Ceylon :
Ceylon est un nouveau langage de programmation pour la machine virtuelle Java. Nous sommes fans de Java et de son écosysteme, cependant nous pensons que le langage Java et ses libraires conçus il y a 15 ans sont désuets face aux challenges actuels.
Cette introduction à Ceylon vous montrera les fonctionnalités de Ceylon ainsi que les derniers progrès fait sur le compilateur, l’IDE et la communauté autour de Ceylon.
3. 3
À propos de Stéphane Épardaud
• Projets Open-Source
–RESTEasy, Ceylon
–jax-doclets, modules Play!, Stamps.js
• Contributeur Ceylon depuis…
–13 mai 2011 (un mois après Ceylon sur SlashDot)
–compilo, ceylondoc, Herd
• Équipe Riviera JUG
• http://stephane.epardaud.fr
3
4. 4
Origines de Ceylon
• Lancé et dirigé par Gavin King
• Résoudre les frustrations de Java
4
5. 5
Qu´est-ce que Ceylon !
• Ceylon est
–puissant, lisible, prédictible
• Ceylon a
–une plate-forme, modularité, outillage
5
7. 7
Une bête classe
• Ça vous rappelle quelque-chose ?
7
class Rectangle() {
Integer width = 0;
Integer height = 0;
Integer area() {
return width * height;
}
}
8. 8
Une vraie classe Ceylon
• Pas (trop) de surprise
8
shared class Rectangle(width, height) {
shared Integer width;
shared Integer height;
shared Integer area() {
return width * height;
}
}
9. 9
Où est mon constructeur ?
• Dans le corps de la classe
9
shared class Rectangle(width, height) {
shared Integer width;
shared Integer height;
// it is here!
if (width == 0 || height == 0) {
throw;
}
shared Integer area() {
return width * height;
}
}
10. 10
Premières différences
• Règles d´accès plus simple
–Pas de `protected`, `package`, `private`
–`shared` = quasi-public, sinon scope-privé
10
15. 15
Abstractions
• Méthodes, attributs et classes peuvent être
redéfinies
–factory pattern
• On ne peut pas redéfinir sauf si
–`default`: peut être redéfini, avec impl par défaut
–`formal`: doit être redéfini, sans impl par défaut
• `@Override` en Java => `actual` en Ceylon
–Pas optionnel
15
18. 18
La surcharge, ça sert pour
• Les paramètres optionnels
–Ceylon les supporte
–Même le passage par nom
• Pour travailler sur des (sous-)types différents
–Pas solide si un nouveau sous-type est
introduit
–Ceylon supporte les types unions et les
switch par type
18
23. 23
Héritage multiple?! Arg…
23
• Pas d´état (initialisation)
–Pas de problème de
précédence
–Une seule superclasse
• Redéfinir méthode en cas
d'ambigüité
35. 35
Type union
• Pour stoquer une valeur parmi une liste de
types
• `TypeA|TypeB`
• On doit vérifier le vrai type avant de s´en servir
• `Type?` est un alias pour `Type|Nothing`
35
36. 36
Exemple de type union
36
class Apple() {
shared void eat() {}
}
class Garbage() {
shared void throwAway() {}
}
void unions() {
Sequence<Apple|Garbage> boxes = { Apple(), Garbage() };
for (Apple|Garbage box in boxes) {
print(box.string);
if (is Apple box) {
apple.eat();
} else if (is Garbage box) {
box.throwAway();
}
}
}
40. 40
Herd
● Notre dépôt de modules « nouvelle
génération »
● Sur http://modules.ceylon-lang.org
− Déjà dispo, et utilisable par les
outils
● Interface intuitive et jolie à la Github
− Collaboratif
● Logiciel Libre
− Dépôts privés encouragés
41. 41
Des mots…
et démo !
Avec de vrais morceaux d´IDE
*
Peut contenir des traces de Herd
43. 43
Un projet sympa
• Des gens sympas :)
• Les meilleurs outils
–github, ant, Eclipse, HTML5, Awestruct, Java,
JavaScript, OpenShift, Play!
• De nombreux sous-projets
–spec, typechecker, Java compiler, JavaScript
compiler, Eclipse IDE, Web IDE, Herd,
module system, ceylondoc, Ant/Maven
plugins
43
44. 44
Vers l´infini…
• Cinq étapes pour atteindre 1.0
• Quelques fonctionalités attendront 1.1
• M1 (finie)
–Au minimum toutes les fonctionalités de Java
–Tous les outils (y-compris l´IDE)
• M2 (finie)
–Interoperabilité avec Java
–Types énumérés
–Méthodes d´ordre supérieur
44