Eine Kurzanleitung zu den JVM-Sprachen

Eine Kurzanleitung zu den JVM-Sprachen

1. Einführung

Neben Java können auch andere Sprachen wie Scala, Kotlin, Groovy und Clojure auf der Java Virtual Machine ausgeführt werden.

In den folgenden Abschnitten werden die beliebtesten JVM-Sprachen auf hoher Ebene vorgestellt.

Natürlich beginnen wir mit dem Vorläufer der JVM-Sprachen - Java.

2. Java

2.1. Überblick

Java ist eine universelle Programmiersprache, die das objektorientierte Paradigma umfasst.

A core feature of the language is the cross-platform portability, was bedeutet, dass auf einer Plattform geschriebene Programme auf jeder Kombination von Software und Hardware mit angemessener Laufzeitunterstützung ausführbar sind. Dies wird erreicht, indem zuerst Code in Bytecode kompiliert wird, anstatt direkt in plattformspezifischen Maschinencode.

Java-Bytecode-Anweisungen sind analog zum Maschinencode, werden jedoch von einer Java Virtual Machine (JVM) interpretiert, die für die Kombination aus Host-Betriebssystem und Hardware spezifisch ist.

Obwohl Java ursprünglich eine objektorientierte Sprache war, hat es begonnen, Konzepte aus anderen Programmierparadigmen wie der funktionalen Programmierung zu übernehmen.

Lassen Sie uns einen kurzen Blick auf einige der Hauptfunktionen von Java werfen:

  • Objektorientierter

  • Stark statisch getippt

  • Plattformunabhängig

  • Müll gesammelt

  • Multithreaded

2.2. Beispiele

Mal sehen, wie ein einfaches "Hallo Welt!" Beispiel sieht aus wie:

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

In diesem Beispiel haben wir eine Klasse mit dem NamenHelloWorld erstellt und die Hauptmethode definiert, mit der eine Nachricht auf der Konsole gedruckt wird.

Als nächsteswe’ll use the javac command to generate the bytecode, die auf einer JVM ausgeführt werden können:

javac HelloWorld.java

Schließlichthe java command executes the generated bytecode on JVM:

java HelloWorld

Weitere Java-Beispiele finden Sie in unserenlist of tutorials.

3. Scala

3.1. Überblick

Scala steht für "skalierbare Sprache". Scala’s a statically typed language which combines two important programming paradigms, namely object-oriented and functional programming. 

Die Sprache entstand im Jahr 2004, wurde aber in den letzten Jahren immer beliebter.

Scala ist eine reine objektorientierte Sprache alsit doesn’t support primitives. Scala bietet die Möglichkeit, Klassen, Objekte, Methoden sowie Funktionen zur funktionalen Programmierung wie Merkmale, algebraische Datentypen oder Typklassen zu definieren.

Einige wichtige Merkmale von Scala sind:

  • Funktional, objektorientiert

  • Stark statisch getippt

  • Algebraische Datentypen

  • Mustervergleich

  • Verbesserte Unveränderlichkeitsunterstützung

  • Lazy Computation

  • Multithreaded

3.2. Beispiele

Schauen wir uns zunächst dasselbe "Hallo Welt!" An. Beispiel wie zuvor, diesmal in Scala:

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

In diesem Beispiel haben wir ein Singleton-Objekt mit dem NamenHelloWorld und die Methodemain erstellt.

Als nächstes können wirscalac verwenden, um dies zu kompilieren:

scalac HelloWorld.scala

Der Befehlscala führt den generierten Bytecode in JVM aus:

scala HelloWorld

4. Kotlin

4.1. Überblick

Kotlin is a statically typed, general-purpose, open-source language developed by JetBrains team, das die objektorientierten und funktionalen Paradigmen zusammenbringt.

Das Hauptaugenmerk bei der Entwicklung von Kotlin lag auf Java-Interoperabilität, Sicherheit (Ausnahmebehandlung), Prägnanz und besserer Werkzeugunterstützung.

Seit der Veröffentlichung von Android Studio 3.0 ist Kotlin eine vollständig von Google auf der Android-Plattform unterstützte Programmiersprache. Es ist auch im Android Studio IDE-Paket als Alternative zum Standard-Java-Compiler enthalten.

Einige wichtige Kotlin-Merkmale:

  • Objektorientiert + Funktional

  • Stark statisch getippt

  • Prägnant

  • Interoperabel mit Java

Unsereintroduction to Kotlin enthalten auch weitere Einzelheiten zu den Funktionen.

4.2. Beispiele

Sehen wir uns das "Hallo Welt!" Beispiel in Kotlin:

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

Wir können den obigen Code in eine neue Datei namenshelloWorld.kt. schreiben

Dannwe’ll use the kotlinc command to compile this und generiert Bytecode, der auf einer JVM ausgeführt werden kann:

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

Die Option-d wird verwendet, um die Ausgabedatei fürclass Dateien oder einen.jar Dateinamen anzugeben. The -include-runtime option makes the resulting .jar file self-contained and runnable by including the Kotlin runtime library in it.

Dann führt der Befehljava den generierten Bytecode in JVM aus:

java -jar helloWorld.jar

Sehen wir uns auch ein weiteres Beispiel für das Drucken einer Liste von Elementen mit einerfor-Schleife an:

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

5. Groovy

5.1. Überblick

Groovyis an object-oriented, optionally typed, dynamic domain specific language (DSL) mit Unterstützung für statische Typisierung und statische Kompilierung. Ziel ist es, die Entwicklerproduktivität mit leicht zu erlernender Syntax zu verbessern.

Groovy integrates easily with any Java program und fügt sofort leistungsstarke Funktionen wie Skriptfunktionen, Laufzeit- und Kompilierungszeit-Metaprogrammierung sowie funktionale Programmierfunktionen hinzu.

Lassen Sie uns einige wichtige Funktionen hervorheben:

  • Objektorientiert mit Funktionsmerkmalen wie Funktionen höherer Ordnung, Currying, Closures

  • Tippen - Dynamisch, Statisch, Stark, Ente

  • Domänenspezifische Sprache

  • Interoperabilität mit Java

  • Produktivität durch Prägnanz

  • Bedienerüberladung

5.2. Beispiele

Schauen wir uns zuerst unser "Hallo Welt!" Beispiel in Groovy:

println("Hello world")

Wir haben den obigen Code in eine neue Datei namensHelloWorld.groovy geschrieben. Jetztwe can run this code in two ways: by compiling then executing or by just running uncompiled code.

Wir können eine.groovy-Datei mit dem Befehlgroovyc wie folgt kompilieren:

groovyc HelloWorld.groovy

Dann verwenden wir den Befehljava, um den groovigen Code auszuführen:

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

Zum Beispiel könnte der obige Befehl so aussehen:

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

Lassen Sie uns auch sehen, wie wir den Befehlgroovy verwenden können, um die Datei.groovy auszuführen, ohne sie zu kompilieren:

groovy HelloWorld.groovy

Im Folgenden finden Sie ein weiteres Beispiel für das Drucken einer Liste von Elementen mit dem Index:

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

Schauen Sie sich weitere Groovy-Beispiele in unserenintroduction articlean.

6. Clojure

6.1. Überblick

Clojureis a general-purpose functional programming language. Die Sprache läuft sowohl auf JVM als auch auf MicrosoftCommon Language Runtime. Clojure ist immer noch eine kompilierte Sprache, sie bleibt dynamisch, da ihre Funktionen zur Laufzeit unterstützt werden.

Die Clojure-Designer wollten moderneLisp entwerfen, die auf JVM ausgeführt werden können. Deshalb wird es auch als Dialekt der Programmiersprache Lisp bezeichnet. Similar to Lisps, Clojure treats code as data and has a macro system as well.

Einige wichtige Features von Clojure:

  • Funktional

  • Typisierung - Dynamisch, Stark, unterstützt seit kurzemgradual typing

  • Konzipiert für Parallelität

  • Laufzeit-Polymorphismus

6.2. Beispiele

Im Gegensatz zu anderen JVM-Sprachen ist es nicht so einfach, ein einfaches "Hallo Welt!" Programm in Clojure.

Wir verwenden das ToolLeiningen, um unser Beispiel auszuführen.

Zunächst erstellen wir mit dem folgenden Befehl ein einfaches Projekt mit einer Standardvorlage:

lein new hello-world

Das Projekt wird mit folgender Dateistruktur erstellt:

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

Jetzt müssen wir die./project.ctj-Datei mit dem folgenden Inhalt aktualisieren, um die Hauptquelldatei festzulegen:

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

Jetzt werden wir unseren Code aktualisieren, um "Hallo Welt!" in der./src/hello-world/core.clj-Datei:

(ns hello-world.core)

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

Schließlich verwenden wir den Befehllein, um den obigen Code auszuführen, nachdem wir in das Stammverzeichnis des Projekts verschoben haben:

cd hello-world
lein run

7. Andere JVM-Sprachen

7.1. Jython

Jythonis the Java platform implementation of Python, das auf der JVM ausgeführt wird.

Diese Sprache wurde ursprünglich entwickelt, um das Schreiben von Hochleistungsanwendungen ohne Einbußen bei der Interaktivität zu ermöglichen. Jython is object-oriented, multi-threaded and uses Java’s garbage collector for efficiently cleaning up the memory.

Jython enthält die meisten Module, die Teil der Python-Sprache sind. Es können auch beliebige Klassen aus den Java-Bibliotheken importiert und verwendet werden.

Sehen wir uns ein kurzes "Hallo Welt!" Beispiel:

print "Hello, world!"

7.2. JRuby

JRuby ist eine Implementierung der ProgrammierspracheRuby, die auf der Java Virtual Machine ausgeführt werden soll.

Die JRuby-Sprache ist leistungsstark und multi-thread-fähig und bietet eine Vielzahl von Bibliotheken aus Java und Ruby. Außerdem kombiniert es Funktionen aus beiden Sprachen wie objektorientiertes Programmieren und Duck-Typing.

Drucken wir "Hallo Welt!" in JRuby:

require "java"

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

8. Fazit

In diesem Artikel haben wir viele gängige JVM-Sprachen sowie grundlegende Codebeispiele untersucht. Diese Sprachen implementieren verschiedene Programmierparadigmen wie objektorientierte, funktionale, statische und dynamische Typisierung.

Bisher zeigt sich, dass die JVM auch mit ihrer Entstehung im Jahr 1995 eine hochrelevante und überzeugende Plattform für moderne Programmiersprachen darstellt.