Перейти к основному содержимому

Обзор языков JVM

· 7 мин. чтения

1. Введение

Помимо Java, на виртуальной машине Java могут работать и другие языки, такие как Scala, Kotlin, Groovy, Clojure.

В следующих разделах мы подробно рассмотрим наиболее популярные языки JVM.

Начнем, конечно же, с предшественника языков JVM — Java.

2. Ява

2.1. Обзор

Java — это язык программирования общего назначения, основанный на объектно-ориентированной парадигме.

Ключевой особенностью языка является кросс-платформенная переносимость , что означает, что программы, написанные на одной платформе, могут выполняться на любой комбинации программного и аппаратного обеспечения с адекватной поддержкой во время выполнения. Это достигается путем компиляции кода сначала в байт-код, а не непосредственно в машинный код для конкретной платформы.

Инструкции байт-кода Java аналогичны машинному коду, но они интерпретируются виртуальной машиной Java (JVM), специфичной для комбинации операционной системы хоста и оборудования.

Хотя изначально Java был объектно-ориентированным языком, он начал перенимать концепции из других парадигм программирования, таких как функциональное программирование .

Давайте кратко рассмотрим некоторые из основных функций Java:

2.2. Примеры

Давайте посмотрим, как простое «Hello, World!» пример выглядит так:

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

В этом примере мы создали класс с именем HelloWorld и определили основной метод, который выводит сообщение на консоль.

Далее мы будем использовать команду javac для генерации байт-кода , который можно выполнить на JVM:

javac HelloWorld.java

Наконец, команда java выполняет сгенерированный байт-код на JVM:

java HelloWorld

Дополнительные примеры Java см. в нашем списке руководств .

3. Скала

3.1. Обзор

Scala означает «масштабируемый язык». Scala — это язык со статической типизацией, который сочетает в себе две важные парадигмы программирования, а именно объектно-ориентированное и функциональное программирование.

Язык возник в 2004 году, но в последние годы стал более популярным.

Scala — это чистый объектно-ориентированный язык, поскольку он не поддерживает примитивы . Scala предоставляет возможность определять классы, объекты, методы, а также функции функционального программирования, такие как признаки, алгебраические типы данных или классы типов.

Несколько важных особенностей Scala:

  • Функциональный, Объектно-ориентированный
  • Строго статически типизированный
  • Алгебраические типы данных
  • Сопоставление с образцом
  • Расширенная поддержка неизменности
  • Ленивые вычисления
  • Многопоточный

3.2. Примеры

Во-первых, давайте взглянем на ту же «Hello, World!» пример как раньше, на этот раз на Scala:

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

В этом примере мы создали одноэлементный объект с именем HelloWorld и метод main .

Далее, чтобы скомпилировать это, мы можем использовать scalac :

scalac HelloWorld.scala

Команда scala выполняет сгенерированный байт-код на JVM:

scala HelloWorld

4. Котлин

4.1. Обзор

Kotlin — это статически типизированный язык общего назначения с открытым исходным кодом, разработанный командой JetBrains , который объединяет объектно-ориентированную и функциональную парадигмы.

Основное внимание при разработке Kotlin уделялось совместимости с Java, безопасности (обработке исключений), лаконичности и лучшей поддержке инструментов.

С момента выпуска Android Studio 3.0 Kotlin является полностью поддерживаемым Google языком программирования на платформе Android. Он также включен в пакет Android Studio IDE в качестве альтернативы стандартному компилятору Java.

Некоторые важные функции Kotlin:

  • Объектно-ориентированный + функциональный
  • Строго статически типизированный
  • лаконичный
  • Взаимодействие с Java

Наше введение в Kotlin также содержит более подробную информацию о функциях.

4.2. Примеры

Давайте посмотрим «Hello, World!» пример в Котлине:

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

Мы можем записать приведенный выше код в новый файл с именем helloWorld.kt.

Затем мы воспользуемся командой kotlinc , чтобы скомпилировать это и сгенерировать байт-код, который можно выполнить на JVM:

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

Параметр -d используется для указания выходного файла для файлов классов или имени файла .jar . Параметр -include-runtime делает полученный файл .jar автономным и пригодным для выполнения, включив в него библиотеку времени выполнения Kotlin.

Затем команда java выполняет сгенерированный байт-код на JVM:

java -jar helloWorld.jar

Давайте также посмотрим на другой пример печати списка элементов с помощью цикла for :

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

5. Отличный

5.1. Обзор

Groovy — это объектно-ориентированный динамический предметно-ориентированный язык (DSL) с опциональной типизацией, поддерживающий возможности статической типизации и статической компиляции. Он направлен на повышение производительности труда разработчиков благодаря простому для изучения синтаксису.

Groovy легко интегрируется с любой Java-программой и сразу же добавляет мощные функции, такие как возможности сценариев, метапрограммирование во время выполнения и время компиляции, а также функции функционального программирования.

Выделим несколько важных особенностей:

  • Объектно-ориентированный с функциональными функциями, такими как функции высшего порядка, каррирование, замыкания.
  • Набор текста — динамический, статический, сильный, утиный
  • Язык домена
  • Взаимодействие с Java
  • Продуктивность за счет лаконичности
  • Перегрузка оператора

5.2. Примеры

Во-первых, давайте посмотрим на наш «Hello, World!» пример в Groovy:

println("Hello world")

Мы написали приведенный выше код в новом файле с именем HelloWorld.groovy . Теперь мы можем запустить этот код двумя способами: скомпилировав, а затем выполнив или просто запустив нескомпилированный код.

Мы можем скомпилировать файл .groovy с помощью команды groovyc следующим образом:

groovyc HelloWorld.groovy

Затем мы будем использовать команду java для выполнения заводного кода:

java -cp <GROOVY_HOME>\embeddable\groovy-all-<VERSION>.jar;. HelloWorld

Например, приведенная выше команда может выглядеть так:

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

Давайте также посмотрим, как мы можем использовать команду groovy для выполнения файла .groovy без компиляции:

groovy HelloWorld.groovy

Наконец, вот еще один пример печати списка элементов с индексом:

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

Взгляните на другие примеры Groovy в нашей вводной статье .

6. Кложур

6.1. Обзор

Clojure — это универсальный язык функционального программирования. Язык работает на JVM, а также на Common Language Runtime от Microsoft . Clojure по-прежнему является скомпилированным языком, он остается динамическим, поскольку его функции поддерживаются во время выполнения.

Разработчики Clojure хотели разработать современный Lisp , который мог бы работать на JVM. Вот почему он также известен как диалект языка программирования Лисп. Подобно Lisps, Clojure рассматривает код как данные и также имеет систему макросов.

Некоторые важные функции Clojure:

  • Функциональный
  • Набор текста — динамический, надежный, недавно начал поддерживать постепенный набор текста.
  • Разработан для параллелизма
  • Полиморфизм времени выполнения

6.2. Примеры

В отличие от других языков JVM, создать простое «Hello, World!» не так просто. программа на кложуре.

Мы будем использовать инструмент Leiningen для запуска нашего примера.

Сначала мы создадим простой проект с шаблоном по умолчанию, используя следующую команду:

lein new hello-world

Проект будет создан со следующей файловой структурой:

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

Теперь нам нужно обновить файл ./project.ctj со следующим содержимым, чтобы установить основной исходный файл:

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

Теперь мы готовы обновить наш код, чтобы напечатать «Hello, World!» в ./src/hello-world/core. clj-файл:

(ns hello-world.core)

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

Наконец, мы будем использовать команду lein для выполнения приведенного выше кода после перехода в корневой каталог проекта:

cd hello-world
lein run

7. Другие языки JVM

7.1. Джейтон

Jython — это реализация Python на платформе Java, работающая на JVM.

Этот язык изначально был разработан для того, чтобы можно было писать высокопроизводительные приложения без ущерба для интерактивности. Jython является объектно-ориентированным, многопоточным и использует сборщик мусора Java для эффективной очистки памяти.

Jython включает в себя большинство модулей, являющихся частью языка Python. Он также может импортировать и использовать любые классы из библиотек Java.

Давайте посмотрим быстрое «Hello, World!» пример:

print "Hello, world!"

7.2. JRuby

JRuby — это реализация языка программирования Ruby для работы на виртуальной машине Java.

Язык JRuby является высокопроизводительным и многопоточным, с большим разнообразием доступных библиотек Java и Ruby. Кроме того, он сочетает в себе функции обоих языков, такие как объектно-ориентированное программирование и утиная типизация.

Напечатаем «Hello, World!» в JRuby:

require "java"

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

8. Заключение

В этой статье мы изучили многие популярные языки JVM вместе с базовыми примерами кода. Эти языки реализуют различные парадигмы программирования, такие как объектно-ориентированная, функциональная, статическая и динамическая типизация.

На данный момент это показывает, что даже с учетом того, что JVM появилась в 1995 году, она по-прежнему остается очень актуальной и привлекательной платформой для современных языков программирования.