「IKVM.NET」の版間の差分
imported>Administrator (→使い方) |
imported>GamerBook |
||
1行目: | 1行目: | ||
'''IKVM.NET'''とは、[[オープンソース]]により開発が行われている[[Mono]]及び[[.NET Framework]]上で実装された[[Java仮想マシン]](Java VM)を含む[[Java]]の実装である。 | '''IKVM.NET'''とは、[[オープンソース]]により開発が行われている[[Mono]]及び[[.NET Framework]]上で実装された[[Java仮想マシン]](Java VM)を含む[[Java]]の実装である。 | ||
− | + | == 概要 == | |
+ | IKVM.NETは過去に[[マイクロソフト]]が提供していた[[J Sharp|J#]]のような[[Java]]類似言語ではなく、[[OpenJDK]]をベースとした純粋な[[Java]]の[[仮想マシン]]([[Java VM]])が[[.NET]]の[[仮想マシン]]([[共通言語ランタイム]])上で動作するというものである。 | ||
− | + | IKVM.NETはあくまで実行環境のみであり、[[プログラミング言語]]としてのJavaコンパイラー(javacコマンド)に相当するものは含まれていないため、[[プログラム]]自体の[[開発]]にはOracleなどが提供する各種[[JDK]]を用いて行う必要がある。 | |
− | + | なお、IKVM.NETには[[Java]]の[[バイトコード]]([[classファイル]]および[[jarファイル]])を[[.NET]]の[[マネージコード]]([[dllファイル]])に変換するツールは含まれている。そのほかにもIKVM.NET独自のJavaクラスライブラリなども含まれている。 | |
== メリットとデメリット == | == メリットとデメリット == | ||
18行目: | 19行目: | ||
== Javaバイトコードをネイティブコード化に変換する == | == Javaバイトコードをネイティブコード化に変換する == | ||
− | IKVM.NET自体の機能ではないが、IKVM. | + | IKVM.NET自体の機能ではないが、IKVM.NETを用いて[[Javaバイトコード]]を[[マネージドコード]]に変換したのち、[[Mono]]の[[AOTコンパイラ]]を用いて[[マネージドコード]]を[[ネイティブコード]]に変換することができる。 |
− | なお、[[Mono]]の[[AOTコンパイラ]]で[[コンパイル]]すると、[[プログラム]]起動用の[[マネージドコード]] | + | なお、[[Mono]]の[[AOTコンパイラ]]で[[コンパイル]]すると、[[プログラム]]起動用の[[マネージドコード]]な[[exeファイル]]と、そこから呼ばれる[[ネイティブコード]]で出来た[[ダイナミックリンクライブラリ]](dllファイル)および[[共有ライブラリ]](soファイル)が生成される。[[プログラム]]の起動には[[Mono]]を必要とし、そこで実行環境を自動判別することでネイティブコードなのに[[Windows]]と[[Linux]]の切り替えを考える必要がないという構造になっている。 |
== 歴史 == | == 歴史 == |
2012年12月12日 (水) 04:35時点における版
IKVM.NETとは、オープンソースにより開発が行われているMono及び.NET Framework上で実装されたJava仮想マシン(Java VM)を含むJavaの実装である。
目次
概要
IKVM.NETは過去にマイクロソフトが提供していたJ#のようなJava類似言語ではなく、OpenJDKをベースとした純粋なJavaの仮想マシン(Java VM)が.NETの仮想マシン(共通言語ランタイム)上で動作するというものである。
IKVM.NETはあくまで実行環境のみであり、プログラミング言語としてのJavaコンパイラー(javacコマンド)に相当するものは含まれていないため、プログラム自体の開発にはOracleなどが提供する各種JDKを用いて行う必要がある。
なお、IKVM.NETにはJavaのバイトコード(classファイルおよびjarファイル)を.NETのマネージコード(dllファイル)に変換するツールは含まれている。そのほかにもIKVM.NET独自のJavaクラスライブラリなども含まれている。
メリットとデメリット
.NETとJavaの2重の仮想化が行われるため速度面では不利だと言われている。 どの程度の差があるかは調査していないので何とも言えない。
一方で、C#やF#、Phalangerなどと同様に、.NETおよびJavaのライブラリなどをプログラミング言語レベルで一切意識せずに相互利用できる。
主な利用方法
Javaバイトコードを.NETマネージドコードに変換する
IKVM.NETに含まれる「ikvmc」コマンドを用いてJavaバイトコードをマネージドコードに変換できる。
Javaバイトコードをネイティブコード化に変換する
IKVM.NET自体の機能ではないが、IKVM.NETを用いてJavaバイトコードをマネージドコードに変換したのち、MonoのAOTコンパイラを用いてマネージドコードをネイティブコードに変換することができる。
なお、MonoのAOTコンパイラでコンパイルすると、プログラム起動用のマネージドコードなexeファイルと、そこから呼ばれるネイティブコードで出来たダイナミックリンクライブラリ(dllファイル)および共有ライブラリ(soファイル)が生成される。プログラムの起動にはMonoを必要とし、そこで実行環境を自動判別することでネイティブコードなのにWindowsとLinuxの切り替えを考える必要がないという構造になっている。
歴史
IKVM.NET 7.0
OpenJDK 7 b147 ベース。
インストール
下記からzipファイルをダウンロードして展開する。
使い方
単純なJava実装として使う場合は、IKVMを展開したディレクトリ内のbinディレクトリにJavaのjavaコマンドに相当するikvm.exeコマンドがいるのでこれを叩くだけである。
$ cd bin
$ mono ikvm.exe
usage: ikvm [-options] <class> [args...]
(to execute a class)
or ikvm -jar [-options] <jarfile> [args...]
(to execute a jar file)
(以下略)
Monoで用いる場合はシェルスクリプトによるショートカットを用意しておくと便利。 パスを指定している部分は各自の環境にあわせ書き換えること。
$ echo '#!/bin/sh'$'\nexec mono $MONO_OPTIONS "/opt/ikvm-7.0.4335.0/bin/ikvm.exe" "$@"' > /opt/ikvm-7.0.4335.0/bin/ikvm
$ chmod 755 /opt/ikvm-7.0.4335.0/bin/ikvm
関連項目
- Mono - IKVM.NETとの統合が進められている。
- MonoDevelop - IKVM.NET公式の統合開発環境
参考文献