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 году, она по-прежнему остается очень актуальной и привлекательной платформой для современных языков программирования.