Guide rapide des langues de la machine virtuelle Java

Un guide rapide des langues de la machine virtuelle Java

1. introduction

Outre Java, d'autres langages peuvent s'exécuter sur la machine virtuelle Java, tels que Scala, Kotlin, Groovy, Clojure.

Dans les sections suivantes, nous examinerons de manière approfondie les langages JVM les plus populaires.

Bien sûr, nous commencerons par le précurseur des langages JVM - Java.

2. Java

2.1. Vue d'ensemble

Java est un langage de programmation à usage général embrassant le paradigme orienté objet.

A core feature of the language is the cross-platform portability, ce qui signifie que les programmes écrits sur une plate-forme sont exécutables sur n'importe quelle combinaison de logiciel et de matériel avec un support d'exécution adéquat. Ceci est réalisé en compilant d'abord le code en bytecode, plutôt que directement en code machine spécifique à la plate-forme.

Les instructions de bytecode Java sont analogues au code machine, mais elles sont interprétées par une machine virtuelle Java (JVM) spécifique au système d'exploitation hôte et à la combinaison matérielle.

Bien qu'à l'origine un langage orienté objet, Java a commencé à adopter des concepts d'autres paradigmes de programmation comme la programmation fonctionnelle.

Jetons un coup d'œil à certaines des principales fonctionnalités de Java:

  • Orienté objet

  • Fortement typé statiquement

  • Indépendant de la plateforme

  • Ordures collectées

  • Multithread

2.2. Exemples

Voyons comment un simple "Hello, World!" exemple ressemble à:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

Dans cet exemple, nous avons créé une classe nomméeHelloWorld et défini la méthode principale qui imprime un message sur la console.

Ensuite,we’ll use the javac command to generate the bytecode qui peuvent être exécutés sur une JVM:

javac HelloWorld.java

Enfin,the java command executes the generated bytecode on JVM:

java HelloWorld

Pour plus d'exemples Java, consultez noslist of tutorials.

3. Scala

3.1. Vue d'ensemble

Scala signifie «langage évolutif». Scala’s a statically typed language which combines two important programming paradigms, namely object-oriented and functional programming. 

La langue est née en 2004 mais est devenue plus populaire ces dernières années.

Scala est un pur langage orienté objet commeit doesn’t support primitives. Scala offre la possibilité de définir des classes, des objets, des méthodes ainsi que des fonctionnalités de programmation fonctionnelles telles que des traits, des types de données algébriques ou des classes de types.

Quelques caractéristiques importantes de Scala sont:

  • Fonctionnel, orienté objet

  • Fortement typé statiquement

  • Types de données algébriques

  • Correspondance de modèle

  • Prise en charge améliorée de l'immuabilité

  • Calcul paresseux

  • Multithread

3.2. Exemples

Tout d'abord, jetons un coup d'œil au même "Hello, World!" exemple comme avant, cette fois dans Scala:

object HelloWorld {
    def main(args: Array[String]): Unit = println("Hello, world!")
}

Dans cet exemple, nous avons créé un objet singleton nomméHelloWorld et la méthodemain.

Ensuite, pour compiler ceci, nous pouvons utiliserscalac:

scalac HelloWorld.scala

La commandescala exécute le bytecode généré sur JVM:

scala HelloWorld

4. Kotlin

4.1. Vue d'ensemble

Kotlin is a statically typed, general-purpose, open-source language developed by JetBrains team, qui rassemble les paradigmes orienté objet et fonctionnel.

Au cours du développement de Kotlin, l’objectif principal était l’interopérabilité Java, la sécurité (gestion des exceptions), la concision et une meilleure prise en charge de l’outillage.

Depuis la sortie d'Android Studio 3.0, Kotlin est un langage de programmation entièrement pris en charge par Google sur la plate-forme Android. Il est également inclus dans le package IDE d'Android Studio comme alternative au compilateur Java standard.

Quelques caractéristiques importantes de Kotlin:

  • Orienté objet + fonctionnel

  • Fortement typé statiquement

  • Concis

  • Interopérable avec Java

Notreintroduction to Kotlin contient également plus de détails sur les fonctionnalités.

4.2. Exemples

Voyons le "Hello, World!" exemple à Kotlin:

fun main(args: Array) { println("Hello, World!") }

Nous pouvons écrire le code ci-dessus dans un nouveau fichier appeléhelloWorld.kt.

Ensuite,we’ll use the kotlinc command to compile this et génère du bytecode qui peut être exécuté sur une JVM:

kotlinc helloWorld.kt -include-runtime -d helloWorld.jar

L'option-d est utilisée pour indiquer le fichier de sortie des fichiersclass ou un nom de fichier.jar. The -include-runtime option makes the resulting .jar file self-contained and runnable by including the Kotlin runtime library in it.

Ensuite, la commandejava exécute le bytecode généré sur JVM:

java -jar helloWorld.jar

Voyons également un autre exemple d’impression d’une liste d’éléments à l’aide d’une bouclefor:

fun main(args: Array) {
    val items = listOf(1, 2, 3, 4)
    for (i in items) println(i)
}

5. Sensationnel

5.1. Vue d'ensemble

Groovyis an object-oriented, optionally typed, dynamic domain specific language (DSL), avec prise en charge des capacités de typage statique et de compilation statique. Il vise à améliorer la productivité des développeurs, avec une syntaxe facile à apprendre.

Groovy integrates easily with any Java program et ajoute immédiatement des fonctionnalités puissantes, telles que des capacités de script, des fonctionnalités de méta-programmation d'exécution et de compilation et de programmation fonctionnelle.

Mettons en évidence quelques fonctionnalités importantes:

  • Orienté objet avec fonctionnalités telles que fonctions d'ordre supérieur, currying, fermetures

  • Dactylographie - Dynamique, Statique, Fort, Canard

  • Langue spécifique au domaine

  • Interopérabilité avec Java

  • Productivité par concision

  • Surcharge de l'opérateur

5.2. Exemples

Tout d'abord, voyons notre "Hello, World!" exemple dans Groovy:

println("Hello world")

Nous avons écrit le code ci-dessus dans un nouveau fichier appeléHelloWorld.groovy. Maintenantwe can run this code in two ways: by compiling then executing or by just running uncompiled code.

Nous pouvons compiler un fichier.groovy en utilisant la commandegroovyc comme suit:

groovyc HelloWorld.groovy

Ensuite, nous utiliserons la commandejava pour exécuter le code groovy:

java -cp \embeddable\groovy-all-.jar;. HelloWorld

Par exemple, la commande ci-dessus pourrait ressembler à:

java -cp C:\utils\groovy-1.8.1\embeddable\groovy-all-1.8.1.jar;. HelloWorld

Voyons aussi comment nous pouvons utiliser la commandegroovy pour exécuter le fichier.groovy sans compiler:

groovy HelloWorld.groovy

Enfin, voici un autre exemple d’impression d’une liste d’éléments avec l’index:

list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list.eachWithIndex { it, i -> println "$i: $it"}

Jetez un œil à d'autres exemples Groovy dans nosintroduction article.

6. Clojure

6.1. Vue d'ensemble

Clojureis a general-purpose functional programming language. Le langage fonctionne sur JVM ainsi que sur lesCommon Language Runtime de Microsoft. Clojure est encore un langage compilé, il reste dynamique, ses fonctionnalités étant supportées à l'exécution.

Les concepteurs de Clojure voulaient concevoir desLisp modernes qui peuvent fonctionner sur JVM. C’est pourquoi il est également connu sous le nom de dialecte du langage de programmation Lisp. Similar to Lisps, Clojure treats code as data and has a macro system as well.

Quelques caractéristiques importantes de Clojure:

  • Fonctionnel

  • Saisie - Dynamique, Forte, a récemment commencé à prendre en chargegradual typing

  • Conçu pour la concurrence

  • Polymorphisme à l'exécution

6.2. Exemples

Contrairement aux autres langages JVM, il n’est pas si simple de créer un simple "Hello, World!" programme dans Clojure.

Nous utiliserons l'outilLeiningen pour exécuter notre exemple.

Tout d'abord, nous allons créer un projet simple avec un modèle par défaut à l'aide de la commande suivante:

lein new hello-world

Le projet sera créé avec la structure de fichier suivante:

./project.clj
./src
./src/hello-world
./src/hello-world/core.clj

Nous devons maintenant mettre à jour le fichier./project.ctj avec le contenu suivant pour définir le fichier source principal:

(defproject hello-world "0.1.0-SNAPSHOT"
  :main hello-world.core
  :dependencies [[org.clojure/clojure "1.5.1"]])

Nous sommes maintenant prêts à mettre à jour notre code pour imprimer "Hello, World!" dans le fichier./src/hello-world/core.clj:

(ns hello-world.core)

(defn -main [& args]
    (println "Hello, World!"))

Enfin, nous utiliserons la commandelein pour exécuter le code ci-dessus, après avoir été déplacé vers le répertoire racine du projet:

cd hello-world
lein run

7. Autres langues JVM

7.1. Jython

Jythonis the Java platform implementation of Python qui s'exécute sur la JVM.

Ce langage a été initialement conçu pour permettre d’écrire une application hautes performances sans sacrifier l’interactivité. Jython is object-oriented, multi-threaded and uses Java’s garbage collector for efficiently cleaning up the memory.

Jython inclut la plupart des modules faisant partie du langage Python. Il peut également importer et utiliser toutes les classes des bibliothèques Java.

Voyons un rapide "Hello, World!" exemple:

print "Hello, world!"

7.2. JRuby

JRuby est une implémentation du langage de programmationRuby à exécuter sur la machine virtuelle Java.

Le langage JRuby est hautes performances et multi-thread, avec une vaste gamme de bibliothèques disponibles de Java et Ruby. En outre, il combine des fonctionnalités des deux langages, telles que la programmation orientée objet et le dactylographie.

Imprimons "Hello, World!" à JRuby:

require "java"

stringHello= "Hello World"
puts "#{stringHello.to_s}"

8. Conclusion

Dans cet article, nous avons étudié de nombreux langages JVM populaires ainsi que des exemples de code de base. Ces langages implémentent divers paradigmes de programmation tels que le typage orienté objet, fonctionnel, statique ou dynamique.

Jusqu'à présent, cela montre que même avec la JVM datant de 1995, elle reste une plate-forme extrêmement pertinente et convaincante pour les langages de programmation modernes.