JavaとJava仮想マシン(JVM)
Javaは、1995年に初めて公開された汎用プログラミング言語です。
オブジェクト指向のプログラミング言語であるJavaは、広く用いられていて、StackOverflowの2020年開発者向け調査では、言語使用ランキングでPythonに次ぐ5位です。
そんな広く使われているJavaにはJava仮想マシンという仕組みがあります。
Java仮想マシンは、プロセス仮想マシンの一種です。
プロセス仮想マシンというのは、
プログラムを、色々な環境、例えば異なるOSやデバイス上で実行できるようにするための仕組みです。
Java仮想マシンは、中間コードを実行するソフトウェアです。中間コードというのは簡単に言えば、人間が書くコードと、コンピュータが読み取れるコードの中間に位置するものです。Java仮想マシンの中間コードは、Javaバイトコードと呼ばれます。
Java仮想マシンは、Javaバイトコードを読み取って、コンピュータが実行できるコードに変えます。
Java仮想マシンの導入により、開発を効率よく進めれ、異なる環境(OSや端末)で動作するプログラムを作成できる、というメリットが得られるようになりました。
今日は、このJava仮想マシン(Java Virtual Machine; JVM)上で動作するプログラミング言語、JVM言語についてです。
JVM言語
JVMを介したプログラムの実行では、
ソースコードの作成 → Javaバイトコードに変換 → JVMによりバイトコードがネイティブコード(機械語)に翻訳される
という一連の流れがあります。
- 開発者がプログラムを書き、ソースコードを作成
- そのソースファイルをコンパイルしてJavaバイトコードを作成
- JavaバイトコードがJVMによって各種コンピュータが読み取れる形のネイティブコードに翻訳される
ということです。
この、ソースコード作成 → コンパイルしてJavaバイトコードを作成、の過程で使用されるプログラミング言語はJavaだけではありません。
この過程で使用できるJava以外のプログラミング言語や、その他Java仮想マシンで動作する言語はJVM言語と呼ばれています。
JVM言語は、大きく2つに分けることができます。
- 既存プログラミング言語のJVM上で動作するバージョン
- 新しいプログラミング言語
です。
JVM言語の例
JVM上で動作するプログラミング言語は、Javaだけではありません。
今回は、既存プログラミング言語のJVM上で動作するバージョンの例として
- JRuby
- Jython
を、JVMで動作するための新しいプログラミング言語の例として
- Clojure
- Groovy
- Kotlin
- Scala
を紹介します。
JVM上で動作する既存プログラミング言語の別バージョン
既存プログラミング言語のJVM上で動作する版の言語があります。
これらは、JVM上で動くRuby、Pythonです。
JRubyやJythonには、
- Javaの安定した環境で開発、構築を進められる
- Javaのライブラリの使用に加え、RubyのRailsに代用されるような、それぞれのプログラミング言語のエコシスエム(ライブラリやフレームワークなど)も活用できる
といったメリットがあるとされています。
Clojure
Clojureは、2007年に初めて公開されたプログラミング言語で、Java仮想マシン上で動作します。
Clojureは、
- Javaプラットフォームとの相性の良さ
- 関数型言語の始祖とされるLispの流れを汲むプログラミング言語
- 並行(concurrent)コンピューティングに向いている
などの特徴があります。
Clojureは、関数型言語であり、S式でプログラムコードを記述できます。
S式というのは、Lisp言語で導入された記述方式であり、命令内容はカッコを使った方法で書かれます。
手続き型プログラミングに慣れた人には、S式で書かれたプログラムコードは、新鮮に映ると思います。
Clojureは、並行(concurrent)処理が得意とされています。
同様の特徴を持つプログラミング言語としては、Go言語があります。
Groovy
Groovyは、2003年に初めて公開されたJVM言語です。
Groovyには、
などの特徴があります。
Groovyは、Rubyから影響を受けているとされ、実際にオブジェクト指向であり、Rubyと構文も似ています。
スクリプト言語であり、学習コストはそれほど高くないとされています。
Ruby on Railsに相当する、GrailsというWebアプリケーションフレームワークを持っており、Web開発の効率化が進められてきました。
Kotlin
Kotlinは、2011年にJetBrains社から初めて公開されたプログラミング言語です。
Kotlinは、
- Javaとの相互運用
- Androidアプリ開発言語として期待されている
- オブジェクト指向
などの特徴があるとされています。
Googleの掲げる、 Kotlin ファーストに代表されるように、Androidアプリ開発でKotlinは非常に期待されています。
StackOverflowの2020年開発者向け調査では、開発が好む言語ランキングでPythonに次ぐ4位です。
2021年で初公開から10年になった比較的新しいKotlinは、今では、開発現場で広く知られ、活用されるようになってきており、さらに今後の使用拡大が予想されます。
Scala
Scalaは、2000年代初頭に初めて公開された比較的歴史のあるプログラミング言語です。
Scalaは、
- Javaのライブラリ活用など、Javaの豊富な資産を活用可能
- オブジェクト指向、関数型プログラミングを組み合わせることが可能
- 大規模プロジェクトに用いられている
- 学習コストは高めと言われている
などの特徴があるとされています。
Scalaでは、
- オブジェクト指向プログラミング
- 関数型プログラミング
をうまく組み合わせて、プログラミングコードを記述することが可能とされています。
このような特徴を持つプログラミング言語はマルチパラダイム言語とも呼ばれます。
また、一説にはスケールできる(scalable)言語、という意味もScalaという名前に込められているということです。
小規模から大規模までスケールできるプログラミング言語として、現在では大規模プロジェクトでも使用されています。
これらの特徴のため、オブジェクト指向、関数型プログラミングそれぞれの概念、Javaのライブラリなど応用可能なものは多く、その分学習コストは高めとされています。
JavaとJVM言語のエコシステム
ここまで見てきたJVM言語は、Java仮想マシンの利用を始めとしてJavaの資産をうまく活用できるように発展してきています。
広く見れば、今日紹介したプログラミング言語は、Javaと共にJava仮想マシンを共有する巨大なエコシスエムを作り上げていると言えます。
Javaは長らく様々な場面で広く使われてきました。
そのJavaのエコシステムにあるJVM言語を使うことは、蓄積されてきたJavaの多くのツールを活用できるということです。
気になった人は、
- JRuby
- Jython
- Clojure
- Groovy
- Kotlin
- Scala
など、JVM言語を試してみるのもいいのではないでしょうか。
コメント