Javaを超えて:JVMでのプログラミング言語

開発者にとって既知で実績のある言語があるとすれば、それはJavaです。エンタープライズ開発者、Web開発者、モバイル開発者、その他多くの人々がJavaをユビキタスにし、Javaを取り巻くサポートの大規模な文化に貢献しています。

さらに、JavaランタイムまたはJava仮想マシン(JVM)は、独自のソフトウェアエコシステムになりました。Javaに加えて、他の非常に多くの言語がJava仮想マシンを活用して、それ自体が強力で価値のあるソフトウェア開発ツールになっています。

JVMをランタイムとして使用すると、いくつかの利点があります。JVMは数十年にわたって改良されており、適切に使用すると高いパフォーマンスを発揮できます。JVMで異なる言語で記述されたアプリケーションは、ライブラリを共有し、同じデータ構造で動作できますが、プログラマーは異なる言語機能を利用します。

以下に、JVM用に作成された最も重要なプログラミング言語のいくつかを紹介します。KotlinとScalaからJythonとJRubyまで、これらの言語はJavaを補完するためのよりシンプルで柔軟な方法、またはJavaを置き換えるように設計された強力な代替手段を提供します。

Kotlin

2010年にJetBrainsによって作成され、2012年にオープンソース化されたKotlinは、Javaよりも簡潔で安全です。Kotlinは「Javaですが、よりシンプル」と考えることができます。その構文はJavaよりも冗長ではなく、Javaコードよりも高速にコンパイルされることがよくあります。Kotlinは、現在Javaで使用できない関数型プログラミングスタイルも許可し、null値を処理するためのより安全でエレガントな方法を備えています。Android開発者は、そのプラットフォームでのアプリ開発にJavaではなくKotlinをますます選択しています。

Kotlinの将来の計画はJVMを超えています。1つのプロジェクトでは、LLVMフレームワークを使用してKotlinをマシンネイティブコードにコンパイルします。

Kotlinの詳細については、MartinHellerによる言語の概要を参照してください。

Scala

Kotlinと同様に、ScalaはJava開発者の生産性を高めるために作成されました。Scalaは、関数型プログラミングとオブジェクト指向プログラミングを同じ言語で組み合わせて、Javaエコシステムユーザーが関数型パラダイムにアクセスして役立つようにします。さらに、Scala構文は、Lispのような構文が初心者の方向を変える可能性がある機能的な代替ClojureよりもJavaに近いものです。機能的パラダイムとオブジェクト指向パラダイムの組み合わせは、Scalaの魅力の大きな部分です。

現在作業中のScalaNativeは、LLVMを介してJVMの外部でベアメタル上で実行されるScalaのバリアントです。しかし、生産に使用するにはまだ時期尚早です。

Clojure

開発者のRichHickeyは、JVM用のLispファミリーで関数型言語を構築したいと考え、そのかゆみを掻くためにClojureを作成しました。Clojureは、Javaが実行されている場所ならどこでも便利な、並行した高性能アプリケーションの作成を容易にすることを目的としていますが、Javaが従来サポートしていたものとは異なるプログラミングスタイルのセットを許可します。注目すべきサクセスストーリーの1つは、RubyからClojureに移行されたPuppetServerです。

Groovy

もともとはPivotalによって開発されましたが、現在はApache Software Foundationの管理下にあり、Groovyは、PythonやRubyなどの動的言語に触発された機能を提供しながら、Javaの既存の経験に強く基づいています。Groovyは、人気のあるJenkins継続的インテグレーションサーバーによって直接サポートされている言語の1つであり、1つの主要なWebフレームワークであるGrailsがそれを使用して構築されています。

Groovyの将来のバージョンでは、Java 8ラムダ構文など、新しいバージョンのJavaおよびJVMの機能が採用される予定です。

JythonとJRuby

JythonとJRubyは、それぞれJVM用のPythonとRubyの実装です。JythonはPythonの2.xブランチと互換性があります。JRubyは比較的最近のRuby2.3と互換性があります。どちらも動的にJavaバイトコードにコンパイルされ、他のJVM言語、特にJavaと自由に相互運用できます。

他のJVM言語

  • Ceylon:Red Hatによって開発されたCeylonは、その冗長性やJVMの基盤となるメカニズムのいくつかとの関係など、Javaの問題のいくつかに対処するために考案されました。Ceylonは、JVM、Dart VM、またはNode.jsで実行するようにコンパイルできます。
  • Frege:JVM用の関数型言語Haskellのバージョン。FregeコードはJavaクラスにコンパイルされ、一般的にJavaと相互運用しますが、Haskellスタイルの不変性と関数型パラダイムを利用できます。
  • Eta:JVMのもう1つのHaskellバリアント。その宣伝されている利点は、HaskellのパッケージリポジトリであるHackageのパッケージを使用して、Haskellエコシステムとの互換性を最大限に高めることができることです。
  • Haxe:Haxeは、Web、モバイルデバイス、ベアメタルなど、考えられる多くのターゲットの1つとしてJVMにコンパイルされます。その構文はJavaを彷彿とさせ、JVM用にコンパイルするときに必要に応じて他のJavaライブラリと相互運用できます。
  • Fantom:JVMと.Net CLRの両方の実装を備えた言語であるFantomは、両方のプラットフォーム間の違いを抽象化するAPIを提供します。FantomはJavaScriptにコンパイルすることもでき、理論的には他の任意の数のターゲットにデプロイできます。