现在, MacRuby 0.3 已经可以用了。
一个较大的变化是方法调度器,它现在完全基于 Objective-C 运行时。MacRuby 现在使用 Objective-C 运行时来实现 Ruby 的类语义,并调度纯 Ruby 方法。这是个非常重要的变化,因为这不仅简化了大量的内核实现,还让两个世界之间的界限更加清晰。
[…]
在纯 Ruby 的方面,修复了很多 bug,我们现在可以运行一些 RubyGems 命令,还可以安装简单的 gem。但不要指望 MacRuby 能运行 Rails!
MacRuby 现在支持用Cocoa来创建GUI—— 实际上创建 GUI 有两种方法。一种是使用和 Apple’s XCode 相配套的 Interface Builder(IB)。用 IB 创建的 GUI 可以通过 action 和 outlet(GUI 元件收发消息用的)来连接到 Ruby 类。MacRuby 提供了一 个用 Ruby 写的工具来创建必要的元数据,用来映射到 Ruby 代码构造器,例如从 accessor 和 method 映射到 action 和 outlet。 rb_nibtool 是用 Ruby 写的,还使用了 Ruby 1.9 的Ripper库。Ripper 使用 Ruby 源,让它能被 Ruby 代码访问——要么作为 Lexer 标记流,要么作为 s 表达式(相当于 ParseTree,不过 Ruby 1.9 里还没有)。rb_nibtool 根据 Ruby 源文件为.nib 文件提供类名;attr_accessor
、attr_writer
和其它一些调用被解释为 outlet,一个标识符跟一个 ib_action 定义为一个 action。最终,这些收集到的信息汇入一个.nib 文件,把 GUI 定义和 Ruby 代码连接起来。
顺便提一句:使用 MacRuby 和 Interface Builder 创建 GUI 是在 OS X 上的 Ruby 的一个选择——而在 Windows 上, Ruby In Steel IDE 能帮助 Visual Studio 创建 GUI ,要通过 Ruby Connector 使用 IronRuby 或 MRI。
另一种创建 GUI 的方法是 ** HotCocoa**,它随 MacRuby 一起提供,可以使用创建器的理念来创建 GUI,类似于一些其它的 Ruby 工具,比如 Ruby Shoes ,以及其它 Ruby GUI 库。大致了解一下HotCocoa 的实现,看看创建方法名是如何映射到Cocoa GUI 控件上的。到现在为止,关于HotCocoa 的文档几乎没有,因此唯一能参考的就是随MacRuby 一起提供的HotCocoa 源码和例程。
和其它Ruby 工具包一样,HotCocoa 附带了一个用来建立程序框架的工具:
hotcocoa classlist
该命令用来创建一个新程序,连同必须的库和设置。
HotCocoa 程序是什么样子的呢?这里有一个简短的示例,用来列出所有加载的类及其父类的表格。这段代码建立了一个 GUI——请把代码复制到 HotCocoa 创建的程序框架中的lib/application.rb
文件中:
def start<br></br> application :name => "Classlist" do |app|<br></br> app.delegate = self<br></br> window :frame => [100, 100, 500, 500], :title => "Classlist" do |win| <br></br> # Add a button to - clicking shows the data in the table<br></br> win << button(:title => "Show classes", :bezel => :regular_square).on_action { <br></br> klasses = [] <br></br> ObjectSpace::each_object(Class){|x|<br></br> klasses << {:klass => x.to_s, :ancestors => x.ancestors.join(',')} <br></br> } <br></br> @table.data = klasses<br></br> }<br></br> # create the table <br></br> @table = table_view(<br></br> :columns => [ <br></br> column(:id => :klass, :text => "Class"),<br></br> column(:id => :ancestors, :text => "Ancestors") <br></br> ] ) <br></br> # put the table inside a scroll view <br></br> win << scroll_view(:layout => {:expand => [:width, :height]}) do |scroll| <br></br> scroll << @table <br></br> end <br></br> win.will_close { exit } <br></br> end <br></br> end<br></br>end
Rake 文件负责程序运行的所有细节——要运行它,执行:
macrake
要了解关于 MacRuby 的更多信息,请关注 InfoQ 对 Laurent Sansonetti 的访谈。 查看原文: MacRuby 0.3 Release Brings Interface Builder Support, HotCocoa for GUI Building
评论