Create  Edit  Diff  FrontPage  Index  Search  Changes  Login

RubyDotNet

Ruby.NET

QUTのRuby.NETはQUTからスピンオフして、New BSDライセンスのもとに公開開発体制にはいってます。

Ruby.NET Project Home

ゴール(翻訳)

Ruby.NETのゴールは、Matzと仲間達が開発したRubyとの完全な文法互換性です。われわれは、Rubyを他の.NET言語と協調して. NETコンポーネントを開発する仲間に加えたいと望みます。さらに標準かサードパーティ製かを問わず、他の言語で開発された.NETプラットフォーム上のコンポーネントやリソースへのシームレスなアクセスの提供も考えています。また、Monoを含むCLI実装のサポートも計画しています。

ランタイムライブラリの一部は、オリジナルRubyのCのソースをそのまま利用しています。われわれは、ソースコードをオープンソースコミュニティに対して開いたものとしたMatzと仲間達に、感謝します。われわれもそれにならって、新BSDライセンスのもとにわれわれのソースコードを開いたものとします。

Ruby.NETについて

Visual Studio 2005をお持ちであれば(Express Editionでどうかは不明)ソリューションファイルが、あるいはMonoの開発体制にあればMakefileが、それぞれ付属した完全なソースコードがレポジトリから入手できます。

特殊なツール

QUTの(多分オープンソースではない)PE File Reader/Writerなどのツールが必要ですが、これらも配布物に含まれているため、上記の条件を満たしていれば開発へ参加できます。

Visual Studio 2005の要件

完全な開発を行うには、Visual Studio 2005 SDK v4.0以上のインストールが必要です。これは配布パッケージのビルドの過程でVisual Studio拡張をビルドするからです。したがって、Vistaで実行する場合には、Visual Studio 2005を管理者権限で実行する必要があります。

特徴

  • 現時点では比較的透明なクラス構造、整理されたパッケージ
  • インタプリタ(rbファイルを動的にロードして実行)、コンパイラ(rbファイルからCLR用EXEファイルを生成)の両方を持つ
  • Ruby 1.8.2 互換な文法
  • 言語エンジン、フロントエンド、Visual Studio組み込みウィザード、配布プロジェクト、など、Visual Studio 統合を意識したソリューションパッケージ

ダウンロード

安定版zipファイル

ただし、Subversionが利用できるのであれば、

svn checkout http://rubydotnetcompiler.googlecode.com/svn/trunk/ rubydotnetcompiler

からチェックアウトするほうが良いでしょう。

ビルドの仕方

Mono

ためしたことがないのでうまく動くかわかりませんが、Makefileがルートにあるので、それを見てください。

Visual Studio 2005

srcディレクトリのRuby.NET.slnをVisual Studio 2005に読み込んでフルビルドしてください。もし、Visual Studio SDKがインストールされていないと、配布パッケージのビルドなどが成功しません。この場合、ソリューションの中から、RubyRuntime、 RubyCompiler、Rubyの各プロジェクトを個別ビルドすることで、Ruby.NETを生成して、直接作成されたRuby.NETを利用しても良いでしょう。

実行方法

配布パッケージも生成されますが、ヴァーチャルPC環境などのようにいざとなったら破壊できる環境でない限り、GACに対するインストールも行われるので、単に、binディレクトリにPATHを通したコンソールを利用するほうが良いと思います。

Railsについて

RailsをMonoで実行することをモチベーションにしているメンバーもいるように思う(MLすべてに目を通していないので漠然とした印象)ことと、ToDoリストにRailsのポーティングが乗っているので意識はしています。

IronRubyとの関係

現時点ではオリジナルのパーサの提供という関係だけではないかと思います。したがって、QUTのオリジナルRuby.NETから見て、直系の子供がRuby.NETで、IronRubyは異父弟なんじゃないかな。

現状(0.8.2+)

C:\rubydotnetcompiler>ruby
class String
  def add(s)
    self + s
  end
end
s = 'aaa'.add 'bbb'
puts s
s.instance_eval("def x(s); s + self + '!';end")
puts s.x('hello')
^Z
Warning: String is a Ruby built-in class, interop class not generated
aaabbb
helloaaabbb!

インタープリタで上記のように、動作するスクリプトをa.rbに保存してコンパイルする。

C:\rubydotnetcompiler>rubycompiler a.rb
Warning: String is a Ruby built-in class, interop class not generated
C:\rubydotnetcompiler>cd bin

(GACに登録していない場合、カレントディレクトリに一式揃っている必要がある)

C:\rubydotnetcompiler\bin>copy ..\a.exe .
        1 個のファイルをコピーしました。
C:\rubydotnetcompiler\bin>dir a.exe
 ドライブ C のボリューム ラベルがありません。
  ...
 C:\rubydotnetcompiler\bin のディレクトリ
2007/09/08  12:31            16,384 a.exe
               1 個のファイル              16,384 バイト
  ...
C:\rubydotnetcompiler\bin>a
aaabbb
helloaaabbb!

協力のお願い

現時点での欠落(拡張ライブラリが存在しないことなど)とは別に、文法上の非互換や異常を発見された場合は、Issuesへの登録をお願いいたします。このとき、単純化した再現コードを付けていただけると助かります。

How to contribute to Ruby.NET

Last modified:2007/09/08 19:04:19
Keyword(s):
References: