ScottGu's blog translated by Chica @ Wankuma

最初のIronRuby

  

これまで数年間に渡って、.NETやCLRを動的言語に対して適した環境にしようと頑張ってきました。約14か月前に、私のチーム内に専属グループを形成しました。グループは動的言語のよりリッチなCLRランタイムサポートを追加すること、そして人気の動的言語の一流の.NET実装をお届けすることにフォーカスしてきました。

DLRの背景

今春に"動的言語ランタイム(Dynamic Language Runtime、略:DLR)"と呼ばれる新しい.NETライブラリの第1プレビューリリースを出荷しました。動的言語シナリオに対して明示的に設計されたCLR上の機能一式を提供します。これには、共有動的タイプシステム、言語ホスティングモデル、早い動的コードの生成を可能にするサポートなどが含まれています。これらの機能により、.NET上で高品質な動的言語の実装のビルドが非常に簡単になります。これらの実装は.NET Frameworkの全てのAPIにアクセス、使用することができ、また簡単に他の.NET言語(例えば、C#クラスを呼び出し使用する(もしくはPythonクラスを呼び出す)Rubyクラスを書くことができます。)で書かれたコードと相互運用することができます。

MIX07カンファレンスで今春、マイクロソフトは.NETに対してマイクロソフトの4つの動的言語の実装を出荷すると発表しました。

  • IronPython
  • IronRuby (新)
  • Javascript
  • ダイナミックVB (新)

IronPython実装のソースコード(そしてDLRライブラリの裏にあるソースコード)は4月にCodePlexで公開されました。両方ともIronPython コードプレックスのサイトからダウンロードすることができます。ソースは全てMSPL許諾ライセンス(商用および非商用修正権利の全てが提供されています。)の下で利用可能です。

IronRuby プレアルファリリース

本日、IronRuby実装の第1弾を公開しました。John Lamのブログの投稿(ここ)で、ソースのダウンロード、ビルド、試用の方法についての詳細をご確認頂けます。

本日のIronRubyの公開はまだ非常に早いバージョンで、いくつかの言語機能およびほとんどのライブラリがまだ実装されていません。(そのため、これを"プレアルファ"リリースと呼んでいます。)しかし、コアの言語サポートのほんとどが実装されていて、標準の.NETタイプとAPIが使用可能です。

IronRubyは"ダイナミックサイト(実装をキャッシュする高速適応コールサイトメソッドを提供しています。)"と呼んでいる新しいDLR機能が活用できるように構築されています。またCLRの軽量コード(ライトウエイトコード)生成機能も使用しています。軽量コードの生成により、動的言語の実装がインメモリIL(中間言語)を作成し、それが(ディスクに一度も保存することなく)ランタイムでネイティブコードにJIT(ジャストインタイム)します。これは翻訳コードに比べ非常に早いランタイムパフォーマンスを生むことができ、そして軽量コード生成機能によりJITコードが一度終了するとリークを防ぐためにガーベッジコレクトを呼ぶこともできます。

今回の公開は主にIronRubyのソースコードをまず見て、それがどのように実装されているかを習得したい言語実装に興味を持った開発者向けにリリースしています。Ruby for .NETの早期バージョンで遊んでみたい開発者もダウンロードして使用してみることができます。

IronRubyプロジェクト計画

来月IronRubyのソースコードの置き場所をRubyForge上に移動させます。この移動により、マイクロソフト以外の開発者にプロジェクトでご協力頂き、ソースコードに貢献して頂ける様にプロジェクトの公開も行います。その後、その上で起動させるために移植するライブラリやソースがまだあるので、残りの機能の実装に取り掛かり、現在見つかっている互換性の問題点の修正を行います。

最終的には、互換性があり、高速で、柔軟性のあるRubyの.NET上での実装を行い、誰もが無料で使用できるようにする予定です。

IronRuby の "Hello World" コンソールサンプル

IronRubyのソースコードをダウンロードしビルドした人は、恐らく"まずどうやって使うの?"と思われると思います。

一番簡単に始める方法は、\bin\releaseディレクトリにあるデフォルトでビルドされている"rbx.exe"という対話型コンソールアプリケーションを起動してください。

このコンソールシェルではRubyコードを対話式で書くことができます。各行の後、シェルがそれをインタラクティブに実行します。

例えば、puts "Hello World"とタイプするとHello Worldが出力されます。

これを10回続けて出力する場合は、以下のようにタイプします。

IronRubyでWindowsフォームの機能を使うには、System.Windows.Formsアセンブリを参照するのに必要な文をタイプし、MessageBox.Showメソッドをモダルダイアログでメッセージを表示するために使用します。

IronRuby "Hello World" WPF のサンプル

.NET上で言語を実装する利点の1つは、開発者が.NET Frameworkで提供されているリッチなフレームワークライブラリへのフルアクセスを取得するためにその言語を使用することができることです。

この動作の簡単な例として、"HelloWPF.rb"というテキストファイルを作って、以下のRubyコードをタイプします。

上記コードではWPFのUIフレームワークを使用して、初期ではボタンだけが含まれいるStackPanelレイアウトマネージャをホストするウィンドウを作成します。ボタンが押された時、新しいラベルコントロールが作成され、StackPanel(自動的にウィンドウにフローされるようにして)へ追加されます。

そして、rbx.exeに引数として"HelloWPF.rb"というテキストファイルを渡し、IronRubyを使用して上記アプリケーションを起動させることができます。

起動すると、WPFボタン(上記のコードにあるいい感じのDropShadowBitmapEffectが追加されていることに注意してください。)がのったウィンドウが表示されます。

ボタンを押す度に新しいラベルがウィンドウに追加されます。

全ての.NETのAPIを使用できることで多くのパワーを提供することができるのですが、それだけではなく、コードを見て頂ければお分かりの様に、自然に.NET APIを他の言語シンタックスに統合することができます。

上記のコードスニペットではRubyのブロック言語機能(C#3.0およびVB9にあるラムダ式に似た)を使用して、WPFボタン上で"Click"イベントハンドラを実装しています。.NET APIにアクセスする場合にブロック内でどのように標準のRubyの名前付けパターンを使用することができるかを確認してください。例えば、WPFラベル上で"FontSize"プロパティを使用する代わりにプロパティのアクセッサ名として"font_size"を使用してアクセスしています。IronRubyは自動的に名前の変換を処理し、選択された言語に関わらず一貫した名前付けパターンで開発者がプログラミングできるようにします。

まとめ

IronRubyのこの初回早期バージョンの試用に興味があれば、ここからソースをダウンロードしてビルドすることができます。

その後上記の私のWPFサンプルをここからダウンロードして起動してみてください。(注意:.NET3.0または3.5がインストールしておいてください。これらにはWPFのAPIが使用されているためです。)WPFの詳細については、Adam Nathanの素晴らしいWPFアンリーシュという本をお勧めします。(理由はAmazonのレビューコメントを読んでご確認ください。)

Hope this helps,

Scott

ScottGu's blog translated by Chica @ Wankuma 

※本翻訳に関しまして、Scottさんにはご了承頂いております。