「IKVM.NET」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
imported>Fallout New Tokyo
 
(3人の利用者による、間の6版が非表示)
1行目: 1行目:
 
'''IKVM.NET'''とは、[[オープンソース]]により開発が行われている[[Mono]]及び[[.NET Framework]]上で実装された[[Java仮想マシン]](Java VM)を含む[[Java]]の実装である。
 
'''IKVM.NET'''とは、[[オープンソース]]により開発が行われている[[Mono]]及び[[.NET Framework]]上で実装された[[Java仮想マシン]](Java VM)を含む[[Java]]の実装である。
  
過去に[[マイクロソフト]]が提供していた[[J Sharp|J#]]のようなJava類似言語ではなく、[[OpenJDK]]をベースとした純粋な[[Java]]の[[仮想マシン]]([[Java VM]])が[[.NET]]の[[仮想マシン]]([[共通言語ランタイム]])上で動作するという。
+
== 概要 ==
 +
IKVM.NETは過去に[[マイクロソフト]]が提供していた[[J Sharp|J#]]のような[[Java]]類似言語ではなく、[[OpenJDK]]をベースとした純粋な[[Java]]の[[仮想マシン]]([[Java VM]])が[[.NET]]の[[仮想マシン]]([[共通言語ランタイム]])上で動作するというものである。
  
また、IKVM.NETには[[Java]][[バイトコード]](classファイルおよびjarファイル)を[[.NET]][[マネージコード]](DLLファイル)に変換する[[コンパイラー]]などのJavaと.NETの相互運用のためのツールも含んでいる。なお[[プログラミング言語]]としてのJavaコンパイラー(javacコマンド)に相当するものは含まれていない。
+
IKVM.NETはあくまで実行環境のみであり、[[プログラミング言語]]としての[[コンパイラ]](javacコマンド)に相当するものは含まれていないため、[[プログラム]]自体の[[開発]]には[[Oracle]]などが提供する各種[[JDK]]を用いて行う必要がある。
  
そのほかに独自のJavaクラスライブラリなども含まれている。
+
なお、IKVM.NETには[[Java]]の[[バイトコード]]([[classファイル]]および[[jarファイル]])を[[.NET]]の[[マネージコード]]([[dllファイル]])に変換するツールは含まれている。そのほかにもIKVM.NET独自のJavaクラスライブラリなども含まれている。
  
 
== メリットとデメリット ==
 
== メリットとデメリット ==
11行目: 12行目:
 
どの程度の差があるかは調査していないので何とも言えない。
 
どの程度の差があるかは調査していないので何とも言えない。
  
一方で、[[C Sharp|C#]]や[[F Sharp|F#]]、[[Phalanger]]などと同様に、[[.NET]]および[[Java]]の[[ライブラリ]]などを[[プログラミング言語レベル]]で一切意識せずに相互利用できる。
+
一方で、[[C Sharp|C#]]や[[F Sharp|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]]の切り替えを考える必要がないという構造になっている。
  
 
== 歴史 ==
 
== 歴史 ==
34行目: 44行目:
  
 
[[Mono]]で用いる場合は[[シェルスクリプト]]による[[ショートカット]]を用意しておくと便利。
 
[[Mono]]で用いる場合は[[シェルスクリプト]]による[[ショートカット]]を用意しておくと便利。
 +
パスを指定している部分は各自の環境にあわせ書き換えること。
 
<source lang="bash">
 
<source lang="bash">
 
$ echo '#!/bin/sh'$'\nexec mono $MONO_OPTIONS "/opt/ikvm-7.0.4335.0/bin/ikvm.exe" "$@"' > /opt/ikvm-7.0.4335.0/bin/ikvm
 
$ echo '#!/bin/sh'$'\nexec mono $MONO_OPTIONS "/opt/ikvm-7.0.4335.0/bin/ikvm.exe" "$@"' > /opt/ikvm-7.0.4335.0/bin/ikvm
42行目: 53行目:
 
* [[Mono]] - IKVM.NETとの統合が進められている。
 
* [[Mono]] - IKVM.NETとの統合が進められている。
 
* [[MonoDevelop]] - IKVM.NET公式の統合開発環境
 
* [[MonoDevelop]] - IKVM.NET公式の統合開発環境
== 参考文献 ==
 
<references />
 
  
 
== 外部リンク ==
 
== 外部リンク ==
 
* http://www.ikvm.net/
 
* http://www.ikvm.net/
 +
 +
== 参考文献 ==
 +
{{reflist}}
 +
 
{{stub}}
 
{{stub}}

2014年2月27日 (木) 03:12時点における最新版

IKVM.NETとは、オープンソースにより開発が行われているMono及び.NET Framework上で実装されたJava仮想マシン(Java VM)を含むJavaの実装である。

概要[編集 | ソースを編集]

IKVM.NETは過去にマイクロソフトが提供していたJ#のようなJava類似言語ではなく、OpenJDKをベースとした純粋なJava仮想マシンJava VM)が.NET仮想マシン共通言語ランタイム)上で動作するというものである。

IKVM.NETはあくまで実行環境のみであり、プログラミング言語としてのコンパイラ(javacコマンド)に相当するものは含まれていないため、プログラム自体の開発にはOracleなどが提供する各種JDKを用いて行う必要がある。

なお、IKVM.NETにはJavaバイトコードclassファイルおよびjarファイル)を.NETマネージコードdllファイル)に変換するツールは含まれている。そのほかにもIKVM.NET独自のJavaクラスライブラリなども含まれている。

メリットとデメリット[編集 | ソースを編集]

.NETJavaの2重の仮想化が行われるため速度面では不利だと言われている。 どの程度の差があるかは調査していないので何とも言えない。

一方で、C#F#Phalangerなどと同様に、.NETおよびJavaライブラリなどをプログラミング言語レベルで一切意識せずに相互利用できる。

主な利用方法[編集 | ソースを編集]

Javaバイトコードを.NETマネージドコードに変換する[編集 | ソースを編集]

IKVM.NETに含まれる「ikvmc」コマンドを用いてJavaバイトコードマネージドコードに変換できる。

Javaバイトコードをネイティブコード化に変換する[編集 | ソースを編集]

IKVM.NET自体の機能ではないが、IKVM.NETを用いてJavaバイトコードマネージドコードに変換したのち、MonoAOTコンパイラを用いてマネージドコードネイティブコードに変換することができる。

なお、MonoAOTコンパイラコンパイルすると、プログラム起動用のマネージドコードexeファイルと、そこから呼ばれるネイティブコードで出来たダイナミックリンクライブラリ(dllファイル)および共有ライブラリ(soファイル)が生成される。プログラムの起動にはMonoを必要とし、そこで実行環境を自動判別することでネイティブコードなのにWindowsLinuxの切り替えを考える必要がないという構造になっている。

歴史[編集 | ソースを編集]

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公式の統合開発環境

外部リンク[編集 | ソースを編集]

参考文献[編集 | ソースを編集]