Xtend
Xtend | ||
Date de première version | 2011 | |
---|---|---|
Paradigme | Orientée objet, impératif, fonctionnelle | |
Auteur | Sven Efftinge, Sebastian Zarnekow | |
Développeur | typefox | |
Dernière version | 2.12.0 | |
Typage | Statique, fort, inférence | |
Influencé par | Java, Scala, Groovy, Smalltalk, Xpand | |
Système d'exploitation | Multiplateformes | |
Licence | Eclipse Public License | |
Site web | http://www.xtend-lang.org | |
modifier |
Xtend est un langage de programmation général de haut niveau pour la machine virtuelle Java.
Syntaxiquement et sémantiquement, Xtend a ses racines dans le langage de programmation Java mais se concentre sur une syntaxe plus concise et quelques fonctionnalités supplémentaires telles que l'inférence de types, les méthodes d'extension et la surcharge de l'opérateur. Étant principalement un langage orienté objet, il intègre également des fonctionnalités connues de la programmation fonctionnelle, par exemple des expressions lambda. Xtend est typé statiquement et utilise le système de type Java sans modifications. Il est compilé en code Java et s'intègre ainsi de manière transparente avec toutes les bibliothèques Java existantes.
Le langage Xtend et son EDI est développé en tant que projet sur Eclipse.org et participe au train annuel de publication Eclipse. Le code est open source sous licence Eclipse Public License. Pourtant, le langage peut être compilé et exécuté indépendamment de la plate-forme Eclipse[1].
Historique
[modifier | modifier le code]Xtend provient de Xtext, qui est la technologie utilisée pour définir la langue et l'éditeur. Xtend a été publié pour la première fois dans le cadre de Xtext dans la version Eclipse Indigo[2] en . Depuis la sortie d'Eclipse Juno (, Xtend version 2.3), Xtend est devenu un projet autonome.
Le langage Xtend décrit ici ne doit pas être confondu avec l'ancien langage portant le même nom dans le projet Xpand. Au départ, Xtend a été nommé Xtend2 pour une meilleure distinction. Le '2' a été bientôt abandonné pour des raisons de simplicité. Avec ses expressions de modèle, Xtend se veut un remplacement de toute la technologie Xpand.
Philosophie
[modifier | modifier le code]Java est l'un des langages de programmation les plus populaires de tous les temps, et il a développé un énorme écosystème de bibliothèques et d'outils au fil des ans. Pourtant, sa syntaxe est assez verbeuse, et certains concepts manquent et ne s'ajoutent que très lentement. Xtend essaie d'obtenir le meilleur de Java, mais tue le bruit syntactique et ajoute de nouvelles fonctionnalités essentielles pour permettre une meilleure lisibilité et un code plus puissant.
Pour faciliter l'apprentissage des développeurs Java, la syntaxe de Xtend est proche de celle de Java. Xtend maintient une compatibilité maximale avec Java en compilant le code Java et en utilisant le système de type Java. Le code Java et le code Xtend peuvent être mélangés à l'intérieur d'un même projet à volonté.
En utilisant une combinaison d'expressions lambda et de méthodes d'extension, le langage peut être étendu au moyen de bibliothèques, c'est-à-dire sans changer le langage lui-même. Une petite bibliothèque standard en fait un usage intensif.
Xtend a toujours été conçu avec un bon outillage en tête. L'EDI Xtend basé sur Eclipse offre des choses comme la coloration syntaxique, la complétion de code, le refactoring, la navigation et le débogage. Il s'intègre également étroitement avec le Java Development Toolkit d'Eclipse.
Sémantique
[modifier | modifier le code]Xtend ressemble à Java à bien des égards. Voici un exemple de fichier Xtend :
package sample
import java.util.List
class Greeter {
def greetThem(List<String> names) {
for(name: names) {
println(name.sayHello)
}
}
def sayHello(String name) {
'Hello ' + name + '!'
}
}
Xtend fournit une inférence de type, c'est-à-dire que le type de nom et les types de retour des méthodes peuvent être déduits du contexte. Les classes et les méthodes sont publiques par défaut, les champs privés. Les points-virgules sont facultatifs.
L'exemple montre aussi la méthode sayHello appelée comme méthode d'extension, c'est-à-dire comme une caractéristique de son premier argument. Les méthodes d'extension peuvent également être fournies par d'autres classes ou instances.
Au lieu d'utiliser l'impératif for-loop, on pourrait utiliser une expression lambda de style fonctionnel entre crochets et appeler la fonction d'ordre supérieur forEach in extension syntaxe sur la liste :
def greetThem(List<String> names) {
names.forEach [ println(sayHello) ]
}
Notez que le paramètre lambda, s'il n'est pas spécifié, est appelé lambda, qui peut être sauté comme ceci en Java. Son type est déduit sous forme de chaîne de caractères. Les expressions Lambda sont également automatiquement forcées vers des interfaces de méthode unique, de sorte qu'elles peuvent être passées par exemple sous la forme d'un fichier java.lang.Comparable.
Les expressions de modèle sont des chaînes de caractères à plusieurs lignes à l'intérieur de guillemets triples avec des valeurs interpolées entre guillemets français. Dans l'exemple ci-dessus, on pourrait écrire
def sayHello(String name) '''
Hello «name» !
'''
Xtend offre une gestion intelligente de l'espace blanc - le texte ci-dessus ne sera pas indenté dans la sortie - répondant ainsi aux exigences de la génération de code.
D'autres caractéristiques du langage comprennent des méthodes multiples, une expression de commutation puissante et une surcharge de l'opérateur au moyen de méthodes de bibliothèque.
Notes et références
[modifier | modifier le code]- Sven Efftinge, « Official Xtend Homepage at », Eclipse.org, (lire en ligne)
- « Eclipse Indigo release », Wiki.eclipse.org, (consulté le )
Liens externes
[modifier | modifier le code]
- Site officiel
- Sven Efftinge, Sebastian Zarnekow, Extending Java, Pragmatic Programmer Magazine, .
- Alex Blewitt, Xtend Extends Java, interview avec Sven Efftinge, InfoQ, juin 2012.