Au-delà de Java: langages de programmation sur la JVM

S'il existe un langage connu et éprouvé pour les développeurs, c'est bien Java. Les développeurs d'entreprise, les développeurs Web, les développeurs mobiles et bien d'autres ont rendu Java omniprésent et ont contribué à la culture massive du support autour de Java.

De plus, le runtime Java, ou Java Virtual Machine (JVM), est devenu un écosystème logiciel à part entière. En plus de Java, de nombreux autres langages ont exploité la machine virtuelle Java pour devenir des outils de développement logiciel puissants et précieux à part entière.

L'utilisation de la JVM en tant que runtime présente plusieurs avantages. La JVM a été affinée sur plusieurs décennies et peut offrir des performances élevées lorsqu'elle est bien utilisée. Les applications écrites dans différents langages sur la JVM peuvent partager des bibliothèques et fonctionner sur les mêmes structures de données, tandis que les programmeurs tirent parti des différentes fonctionnalités du langage.

Ci-dessous, nous présentons plusieurs des langages de programmation les plus importants créés pour la JVM. De Kotlin et Scala à Jython et JRuby, ces langages offrent des moyens plus simples et flexibles de compléter Java, ou des alternatives puissantes conçues pour le remplacer.

Kotlin

Créé par JetBrains en 2010 et open source en 2012, Kotlin est à la fois plus concis et plus sûr que Java. Vous pouvez considérer Kotlin comme «Java, mais plus simple». Sa syntaxe est moins verbeuse que celle de Java et se compile souvent plus rapidement que le code Java. Kotlin permet également des styles de programmation fonctionnels qui ne sont actuellement pas disponibles en Java, et dispose de moyens plus sûrs et plus élégants pour gérer les valeurs nulles. Les développeurs Android choisissent de plus en plus Kotlin plutôt que Java pour le développement d'applications sur cette plate-forme.

Les projets futurs pour Kotlin vont au-delà de la JVM. Un projet consiste à compiler Kotlin en code machine-native via le framework LLVM.

Pour en savoir plus sur Kotlin, consultez l'aperçu de Martin Heller sur la langue.

Scala

Comme Kotlin, Scala a été créé pour rendre les développeurs Java plus productifs. Scala combine la programmation fonctionnelle et orientée objet dans le même langage, rendant le paradigme fonctionnel accessible et utile aux utilisateurs de l'écosystème Java. De plus, la syntaxe Scala est plus proche de Java que l'alternative fonctionnelle Clojure, dont la syntaxe de type Lisp peut désorienter les non-initiés. Le mélange de paradigmes fonctionnels et orientés objet est une grande partie de l'attrait de Scala.

Actuellement dans les travaux est Scala Native, une variante de Scala qui s'exécute en dehors de la JVM sur bare metal, via LLVM. Mais il est encore trop tôt pour être utilisé pour la production.

Clojure

Le développeur Rich Hickey voulait créer un langage fonctionnel dans la famille Lisp pour la JVM, et il a créé Clojure pour gratter cette démangeaison. Clojure est destiné à faciliter l'écriture d'applications simultanées hautes performances, utiles partout où Java s'exécute, mais permettant un ensemble de styles de programmation différent de celui que Java prend en charge traditionnellement. Une réussite remarquable est Puppet Server, qui a été migré de Ruby vers Clojure.

Sensationnel

Développé à l'origine par Pivotal, mais maintenant sous la direction de l'Apache Software Foundation, Groovy s'appuie fortement sur l'expérience existante avec Java tout en offrant des fonctionnalités inspirées des langages dynamiques comme Python et Ruby. Groovy est l'un des langages directement pris en charge par le populaire serveur d'intégration continue Jenkins, et un framework Web clé, Grails, est construit avec.

Les futures versions de Groovy intégreront les fonctionnalités des nouvelles versions de Java et de la JVM, comme la syntaxe lambda de Java 8.

Jython et JRuby

Jython et JRuby sont des implémentations de Python et Ruby, respectivement, pour la JVM. Jython est compatible avec la branche 2.x de Python. JRuby est compatible avec le relativement récent Ruby 2.3. Les deux compilent dynamiquement en bytecode Java et peuvent interagir librement avec d'autres langages JVM, Java en particulier.

Autres langages JVM

  • Ceylon : Développé par Red Hat, Ceylon a été conçu pour résoudre certains problèmes de Java, tels que sa verbosité et ses liens avec certains des mécanismes sous-jacents de la JVM. Ceylon peut être compilé pour s'exécuter sur la JVM, sur la VM Dart ou sur Node.js.
  • Frege : une version du langage fonctionnel Haskell pour la JVM. Le code Frege se compile dans une classe Java et interagit avec Java en général, mais peut tirer parti de l'immuabilité et des paradigmes fonctionnels de style Haskell.
  • Eta : Une autre variante Haskell pour la JVM. Son avantage vanté est qu'il peut utiliser des packages du référentiel de packages de Haskell, Hackage, pour une compatibilité maximale avec l'écosystème Haskell.
  • Haxe : Haxe se compile vers la JVM comme l'une des nombreuses cibles possibles, y compris le Web, les appareils mobiles et le bare metal. Sa syntaxe rappelle Java, et il peut interagir avec d'autres bibliothèques Java si nécessaire lors de sa compilation pour la JVM.
  • Fantom : un langage avec des implémentations pour la JVM et le .Net CLR, Fantom fournit des API qui résument les différences entre les deux plates-formes. Fantom peut également être compilé en JavaScript et, en théorie, il peut être déployé sur n'importe quel nombre d'autres cibles.