JVM言語とは、JVM(Java Virtual Machine、Java仮想マシン、Javaプラットフォーム)上で動作するプログラムを生成する為のプログラミング言語の総称である。超平たくいうと「Java言語グループ」である。
概要
Java仮想マシンは、バイトコードと呼ばれる中間コードに基づいて動作する。バイトコードを生成する言語の代表はJavaであるが、バイトコードそのものはJavaを前提としているものの厳密にJava専用というものではないため、他言語でもバイトコードに変換すればJava仮想マシン上で動作させることができる。
実際にScala, Groovy, Kotlinといった様々な言語でバイトコードに変換するコンパイラが存在する。既存の他言語をJava仮想マシン用に実装したものとしてはLisp方言であるClojureのほか、RubyやPythonのインタプリタとしてそれぞれJRubyやJythonがある。
マイナーなところでは、Haskellの実装としてFregeやEtaといったものも存在する。
Java自身もJava仮想マシン上で実行されるので、JVM言語と呼べる[1]はずだが、JVM言語がJava仮想マシン上で動作するように設計された言語であるのに対し、Javaについては、Java仮想マシンがJavaを効率よく動作させるように設計されるという逆の主従関係となっているため、文脈によっては(Java互換言語といった意味で)JVM言語とひと括りにしたときにJavaがJVM言語に含まれていない[2]こともある。
特性
JVM上で動作する
既存のJavaライブラリが利用可能
コンパイラが生成するバイトコード(拡張子.class)は、Javaインタプリタ(CUIのjavaコマンド)で実行可能
Javaの場合
> java メイン・クラス
Scalaの場合(上: Windows コマンドプロンプト、中: Windows PowerShell、下: Unix Bash)
> for %A in (scalac) do java "--class-path=%~dp$path:A..\lib\scala-library.jar;." メイン・クラス
> java "--class-path=$(Join-Path (Get-Command scalac | Get-Item).DirectoryName ..\lib\scala-library.jar);." メイン・クラス
$ java "--class-path=$(dirname "`which scalac`")/../lib/scala-library.jar:." メイン・クラス
Kotlinの場合(上: Windows コマンドプロンプト、中: Windows PowerShell、下: Unix Bash)
> for %A in (kotlinc) do java "--class-path=%~dp$path:A..\lib\kotlin-runtime.jar;." メイン・クラス
> java "--class-path=$(Join-Path (Get-Command kotlinc | Get-Item).DirectoryName ..\lib\kotlin-runtime.jar);." メイン・クラス
$ java "--class-path=$(dirname "`which kotlinc`")/../lib/kotlin-runtime.jar:." メイン・クラス
実行可能JARファイルが生成可能
Javaの場合
> javac "ソース・ファイル.java"
> jar --create --main-class=メイン・クラス "--file=アーカイブ・ファイル.jar" *.class
Scalaの場合(上: Windows コマンドプロンプト、中: Windows PowerShell、下: Unix Bash)
> scalac -d "アーカイブ・ファイル.jar" "ソース・ファイル.scala"
> for %A in (scalac) do jar --extract "--file=%~dp$path:A..\lib\scala-library.jar" scala
> jar --update "--file=アーカイブ・ファイル.jar" scala
> scalac -d "アーカイブ・ファイル.jar" "ソース・ファイル.scala"
> jar --extract "--file=$(Join-Path (Get-Command scalac | Get-Item).DirectoryName ..\lib\scala-library.jar)" scala
> jar --update "--file=アーカイブ・ファイル.jar" scala
$ scalac -d "アーカイブ・ファイル.jar" "ソース・ファイル.scala"
$ jar --extract "--file=$(dirname "`which scalac`")/../lib/scala-library.jar" scala
$ jar --update "--file=アーカイブ・ファイル.jar" scala
Kotlinの場合
> kotlinc -include-runtime -d "アーカイブ・ファイル.jar" "ソース・ファイル.kt"
実行
> java -jar "アーカイブ・ファイル.jar"
関連動画
関連商品
関連項目
- プログラミング言語
- Java仮想マシン(JVM)
- Java
- Scala
- Kotlin
- Ceylon
- Clojure
- Groovy
- JRuby
- Jython
- .NET Framework
- プログラミング関連用語の一覧
外部リンク
脚注
- *現にJetBrains社(Kotlinの開発元)の統合開発環境「IntelliJ Idea」の公式サイト等では、JavaをJVM言語の一つと位置付けている。
- *明示的にJavaを含まないJVM言語を指す表現として、「Java代替言語」「Better Java」「AltJava」等がある。
- 0
- 0pt