大幅な変更はメソッドディスパッチャーである。今では完全にObjective-Cランタイムに基づいている。MacRubyはObjective-Cランタイムを使用しており、Rubyクラスセマンティクスを実装し、またRubyメソッドをディスパッチする。これは重要な変更である。その理由は、コア実装を大きく簡略化し、また両世界間のあいまいさを取り除くからである。 .. Rubyについては、多くのバグが修正され、RubyGemsのコマンドを実行することができる。単純なgemsをインストールすれば、機能する。ただし、MacRubyがRailsを実行することを期待してはいけない。MacRubyは、CocoaでGUIを作成することをサポートしている。実際にはGUIの構築方法は2通りある。1つ目は、AppleのXCodeに同梱されているInterface Builder (IB)を使用することである。IBで作成されたGUIは、アクションやアウトレット(GUIコンポーネントへの参照を保持)経由でRubyクラスに接続 可能である。MacRubyはRubyで記述されたツールをシップし、アクセサーやメソッドのようなRubyコードの構造からアクションやアウトレットへマップする際に必要なメタデータを作成する。
rb_nibtool(リンク)はRubyで記述され、Ruby 1.9's Ripperライブラリを使用する。RipperはRubyソースを受け取り、LexerトークンのストリームとしてRubyコードへアクセス可能にする(Ruby 1.91では利用不可なParseTree(参考記事リンク)と類似)。rb_nibtoolはRubyソースファイルを取り、.nibファイルのクラス名を解明する。attr_accessor、 attr_writerおよびその他の呼び出しがアウトレット定義として解釈され、IDに続くib_actionがアクションを定義する。最後に、集めら れたすべてのデータは.nibファイルになり、GUI定義をRubyコードにひも付けする。
MacRubyやInterface BuilderでGUIを作成することはRuby on OS Xのオプションである。Windowsでは、Ruby In Steel IDEがGUI building with Visual StudioVisual StudioをIronRubyやRuby Connectorを使用しているMRIで提供している(リンク)。
GUIを作成するもう1つの方法は、HotCocoa(リンク)であり、MacRubyに同梱されている。 Ruby Shoes(リンク)やRuby GUIライブラリなどのその他のRubyツールと似た、ビルダースタイルノーテーションを使用して、GUIの作成を可能にする。HotCocoaの実装を見てみると(リンク)、ビルドメソッド名がCocoa GUIコントロールへマップされる様子を確認できる(リンク)。さしあたり、HotCocoaに関するドキュメンテーションはほとんどないので、Ruby Connectorに同梱されるHotCocoaソースや例が、その使用方法を知る唯一の手段である。
他のRubyツールキットのようにHotCocoaはスケルトンアプリケーションを設定するツールに同梱されている。
hotcocoa classlist必要なすべてのライブラリおよび設定を備えた新たなアプリケーションを作成する。HotCocoaプログラムがどのようなものであるかを知るには、ロードされたすべてのクラスおよび上位クラスをリストした、簡単なデモがある。このコードはGUIをビルドし、スニペットを生成されたHotCocoaスケルトンアプリケーションのlib/application.rbファイルにコピーする)。
def start
application :name => "Classlist" do |app|
app.delegate = self
window :frame => [100, 100, 500, 500], :title => "Classlist" do |win|
# Add a button to - clicking shows the data in the table
win << button(:title => "Show classes", :bezel => :regular_square).on_action {
klasses = []
ObjectSpace::each_object(Class){|x|
klasses << {:klass => x.to_s, :ancestors => x.ancestors.join(',')}
}
@table.data = klasses
}
# create the table
@table = table_view(
:columns => [
column(:id => :klass, :text => "Class"),
column(:id => :ancestors, :text => "Ancestors")
] )
# put the table inside a scroll view
win << scroll_view(:layout => {:expand => [:width, :height]}) do |scroll|
scroll << @table
end
win.will_close { exit }
end
end
end
アプリケーションレイアウトは、アプリケーションを実行するための詳細を取り扱うRakeファイルに同梱されている。
macrake
MacRubyについて詳しくは、Laurent Sansonetti氏のInfoQによるインタビューを参照のこと(参考記事)。
原文はこちらです:http://www.infoq.com/news/2008/09/macruby-03-ib-hotcocoa