Краткое руководство по языкам JVM
1. Вступление
Помимо Java, на виртуальной машине Java могут работать другие языки, такие как Scala, Kotlin, Groovy, Clojure.
В следующих разделах мы подробно рассмотрим наиболее популярные языки JVM.
Конечно, мы начнем с предшественника языков JVM - Java.
2. Java
2.1. обзор
Java - это язык программирования общего назначения, использующий объектно-ориентированную парадигму.
A core feature of the language is the cross-platform portability, что означает, что программы, написанные на одной платформе, могут выполняться на любой комбинации программного и аппаратного обеспечения с адекватной поддержкой времени выполнения. Это достигается путем компиляции кода сначала в байт-код, а не непосредственно в машинный код для конкретной платформы.
Инструкции байт-кода Java аналогичны машинному коду, но они интерпретируются виртуальной машиной Java (JVM), специфичной для операционной системы хоста и комбинации оборудования.
Хотя изначально Java был объектно-ориентированным языком, он начал перенимать концепции из других парадигм программирования, таких как функциональное программирование.
Давайте кратко рассмотрим некоторые из основных функций Java:
-
Объектно-ориентированный
-
Сильно статически типизированный
-
Независимая платформа
-
Сборщиком мусора
-
Многопоточный
2.2. Примеры
Давайте посмотрим, как простое "Hello, World!" пример выглядит так:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
В этом примере мы создали класс с именемHelloWorld и определили основной метод, который выводит сообщение на консоль.
Затемwe’ll use the javac command to generate the bytecode, который может быть выполнен на JVM:
javac HelloWorld.java
Наконец,the java command executes the generated bytecode on JVM:
java HelloWorld
Дополнительные примеры Java можно найти в нашемlist of tutorials.
3. Scala
3.1. обзор
Scala означает «масштабируемый язык». Scala’s a statically typed language which combines two important programming paradigms, namely object-oriented and functional programming.
Язык возник в 2004 году, но стал более популярным в последние годы.
Scala - это чистый объектно-ориентированный язык какit doesn’t support primitives. 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. Kotlinс
4.1. обзор
Kotlin is a statically typed, general-purpose, open-source language developed by JetBrains team, который объединяет объектно-ориентированную и функциональную парадигмы.
При разработке Kotlin основное внимание уделялось совместимости Java, безопасности (обработке исключений), краткости и лучшей поддержке инструментов.
С момента выпуска Android Studio 3.0 Kotlin является полностью поддерживаемым языком программирования Google на платформе Android. Он также включен в пакет Android Studio IDE в качестве альтернативы стандартному компилятору Java.
Некоторые важные особенности Kotlin:
-
Объектно-ориентированный + Функциональный
-
Сильно статически типизированный
-
краткий
-
Совместимость с Java
Нашintroduction to Kotlin также содержит более подробную информацию о функциях.
4.2. Примеры
Давайте посмотрим "Hello, World!" пример в Котлине:
fun main(args: Array) { println("Hello, World!") }
Мы можем написать приведенный выше код в новом файле с именемhelloWorld.kt.
Затемwe’ll use the kotlinc command to compile this генерирует байт-код, который может быть выполнен на JVM:
kotlinc helloWorld.kt -include-runtime -d helloWorld.jar
Параметр-d используется для указания выходного файла для файловclass или имени файла.jar. The -include-runtime option makes the resulting .jar file self-contained and runnable by including the Kotlin runtime library in it.
Затем командаjava выполняет сгенерированный байт-код на JVM:
java -jar helloWorld.jar
Давайте также посмотрим еще один пример печати списка элементов с использованием циклаfor:
fun main(args: Array) {
val items = listOf(1, 2, 3, 4)
for (i in items) println(i)
}
5. Groovy
5.1. обзор
Groovyis an object-oriented, optionally typed, dynamic domain specific language (DSL), с поддержкой статической типизации и статической компиляции. Он нацелен на повышение продуктивности разработчиков за счет простого в освоении синтаксиса.
Groovy integrates easily with any Java program и сразу же добавляет мощные функции, такие как возможности создания сценариев, метапрограммирование во время выполнения и времени компиляции, а также функции функционального программирования.
Выделим несколько важных функций:
-
Объектно-ориентированный с функциональными функциями, такими как функции высшего порядка, карри, замыкания
-
Набор текста - динамический, статический, сильный, утка
-
Домен-специфический язык
-
Совместимость с Java
-
Производительность по краткости
-
Перегрузка оператора
5.2. Примеры
Во-первых, давайте посмотрим на наш "Hello, World!" пример в Groovy:
println("Hello world")
Мы написали приведенный выше код в новом файле под названиемHelloWorld.groovy. Сейчасwe can run this code in two ways: by compiling then executing or by just running uncompiled code.
Мы можем скомпилировать файл.groovy с помощью командыgroovyc следующим образом:
groovyc HelloWorld.groovy
Затем мы воспользуемся командойjava для выполнения отличного кода:
java -cp \embeddable\groovy-all-.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 в нашемintroduction article.
6. Clojure
6.1. обзор
Clojureis a general-purpose functional programming language. Язык работает как на JVM, так и наCommon Language Runtime от Microsoft. Clojure по-прежнему является скомпилированным языком, он остается динамичным, поскольку его функции поддерживаются во время выполнения.
Разработчики Clojure хотели разработать современныеLisp, которые могут работать на JVM. Вот почему он также известен как диалект языка программирования Lisp. Similar to Lisps, Clojure treats code as data and has a macro system as well.
Некоторые важные особенности Clojure:
-
функциональная
-
Набор текста - динамичный, сильный, недавно начал поддерживатьgradual typing
-
Предназначен для параллелизма
-
Время выполнения полиморфизм
6.2. Примеры
В отличие от других языков JVM, создать простое «Hello, World!» Не так-то просто. программа на Clojure.
Мы будем использовать инструмент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
Этот язык был изначально разработан, чтобы позволить писать высокопроизводительные приложения без ущерба для интерактивности. Jython is object-oriented, multi-threaded and uses Java’s garbage collector for efficiently cleaning up the memory.с
Jython включает в себя большинство модулей, которые являются частью языка Python. Он также может импортировать и использовать любые классы из библиотек Java.
Давайте посмотрим: "Hello, World!" пример:
print "Hello, world!"
7.2. JRuby
Язык JRuby является высокопроизводительным и многопоточным, с широким выбором доступных библиотек из Java и Ruby. Кроме того, он сочетает в себе функции обоих языков, такие как объектно-ориентированное программирование и типизирование с использованием утили
Напечатаем "Hello, World!" в JRuby:
require "java"
stringHello= "Hello World"
puts "#{stringHello.to_s}"
8. Заключение
В этой статье мы изучили многие популярные языки JVM вместе с базовыми примерами кода. Эти языки реализуют различные парадигмы программирования, такие как объектно-ориентированная, функциональная, статическая типизация, динамическая типизация.
До сих пор это показывает, что даже с JVM, начавшейся в 1995 году, она все еще остается очень актуальной и привлекательной платформой для современных языков программирования.