SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Mono 2.0がDebian GNU/Linuxのために提供するもの

DebianでのMono言語コンパイラ

 いくつかの重要なオプションからMonoランタイムの特殊性が見えてきます。留意すべき点を1つ挙げると、MonoランタイムはデフォルトではJust-In-Time(JIT)コンパイラのように動作します。つまり、CILバイトコードを解釈する一方で、同じコードをネイティブにコンパイルして、マシン言語でキャッシュします。パフォーマンス上の強みは明らかです。-aotオプションを使用すると、MonoランタイムはAhead-Of-Time(AOT)コンパイルも実装します。つまり、実行に先立ってシステムに依存するバイナリコードを生成するのです。最初に少し余分なコストをかけることでパフォーマンスが最大化されるわけです。

gmcs: Mono C#コンパイラ

 マネージコード開発環境では、通常は使用できるすべてのコンパイラで仮想マシン用の実行可能ファイルが生成されます。そういうわけで、どの.NETコンパイラもCIL実行可能ファイルを生成します。コンパイラの出力は.EXEまたは.DLLファイルになります。前者はプロセスアセンブリと呼ばれ、後者はライブラリアセンブリと呼ばれます。

 /usr/bin/monoがVisual Studio .NETでコンパイルしたCILプログラムを実行する場合には、Mono自体でCILプログラムを生成することができます。Monoフレームワークには多数のCILコンパイラが用意されています。その中で最も重要なのがC#コンパイラです。なぜなら、C#コンパイラは.NETのリファレンスコンパイラであり、CLRと同様、ECMA標準(ECMA-334)になっているからです。

 3つのDebianパッケージは、それぞれのコマンドラインコンパイラを持ち、デフォルトでさまざまなバージョンのCLIとC#に対応しています(表1を参照)。

表1 さまざまなバージョンのCLIとC#に対応するDebianパッケージ
コマンド Debianパッケージ C#バージョン CLIバージョン
mcs mono-mcs 1.0、2.0(部分的) 1.X
gmcs mono-gmcs 2.0 2.0
smcs mono-smcs 3.0 2.1(2.0のサブセット+拡張機能)

 smcsに関しては、Moonlight用のアプリケーションをコンパイルするランタイム2.1用のコンパイラをインストールする必要があります。MoonlightはSilverlightのオープンソースクローンであり、すべてのSilverlight実行可能ファイルを(ブラウザの外部でも)実行できるようにします。

 Monoプラットフォームでプログラミングできる言語はその他にも数多くあります。Monoで利用できる言語はすべて.NETでも利用できますし、その逆の関係も成り立ちます(少なくとも、どこでもソースコードをコンパイルでき、生成されるCILコードは他のプラットフォームで「実行可能」であるとは言えます)。既に述べたように、MonoにはMonoまたは.NETランタイムで実行できるCIL実行可能ファイルを生成する一群の言語コンパイラがあります。しかし現時点では、Microsoft Managed C++コンパイラなど一部の.NETコンパイラで生成されるコードはMonoプラットフォームで動作しません。なぜなら、それらのコンパイラは純粋なCILへのコンパイルを行わないからです。

 Debianにインストールできる主要なMonoコンパイラを表2に示します。また、異なる言語で書かれたアセンブリ同士の相互作用と再利用(たとえば、C#で書かれたクラスライブラリをIronPythonで書かれたプログラムで使用するなど)を可能にする仕組みを図1に示します。

表2 DebianにインストールできるMonoコンパイラ
言語 コマンド Debianパッケージ
Visual Basic 2005 vbnc mono-vbnc
    libmono-microsoft-visualbasic8.0-cil
Boo booc boo
Nemerle ncc nemerle
IronPython ipy ironpython
図1 さまざまな言語で書かれたアセンブリがMonoと.NETで相互作用する仕組み
図1 さまざまな言語で書かれたアセンブリがMonoと.NETで相互作用する仕組み

次のページ
ライブラリアセンブリのMonoコレクション

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Roberto Giorgetti(Roberto Giorgetti)

イタリアに拠点を置くITマネージャ、テクニカルライター。主にビジネス分野と工業分野でオープンソースの開発に従事。核工学の学位を持つ。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3586 2009/03/11 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー