作者 Werner
Schuster
 ,译者 贾晓楠 发布于
2008年9月24日 |

现在,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_accessorattr_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
 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的更多信息,请关注InfoQ对Laurent
Sansonetti的访谈
。 



查看原文:MacRuby
0.3 Release Brings Interface Builder Support, HotCocoa for GUI Building

MacRuby 0.3发布,支持Interface Builder,和创建GUI用的HotCocoa的更多相关文章

  1. [转]使用 Xcode 5 和 Interface Builder创建 Hello World App

    转载地址:http://www.ithome.me/archives/581.html 使用 Xcode 5 和 Interface Builder创建 Hello World App 发表回复 当x ...

  2. iOS杂谈-我为什么不用Interface builder

    在互联网上关于Interface Builder的争吵每天都在发生,用和不用大家都有一大堆的理由.最近看了这篇文章,很多地方和作者有共鸣,结合自己的一些经历,就有了你现在所看到的东西,你可以把它当成前 ...

  3. Kube-OVN1.5.0新版本发布,支持鲲鹏云平台网络平面部署

    近日,Kube-OVN发布了最新的1.5.0版本.自2019年4月开源以来,Kube-OVN经历了15次重要版本迭代,以及社区成立,建设者贡献代码,稳定性测试,国内外用户开始在生产环境中投入使用,企业 ...

  4. Spring.Net.FrameworkV3.0 版本发布了,感谢大家的支持

    Spring.Net.FrameworkV3.0 版本发布了,感谢大家的支持. Spring.Net.Framework,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开 ...

  5. [转帖]银河麒麟Kydroid 2.0全新发布:原生支持海量安卓APP

    银河麒麟Kydroid 2.0全新发布:原生支持海量安卓APP https://news.cnblogs.com/n/652299/将手机操作系统 转移到 桌面 跟chromebook 类似的策略吧 ...

  6. 支持边云协同终身学习特性,KubeEdge子项目Sedna 0.3.0版本发布!

    摘要:随着边缘设备数量指数级增长以及设备性能的提升,边云协同机器学习应运而生,以期打通机器学习的最后一公里. 本文分享自华为云社区<支持边云协同终身学习特性,KubeEdge子项目Sedna 0 ...

  7. iOS开发-Interface Builder的前世今生

    Interface Builder,是用于苹果公司Mac OS X操作系统的软件开发程序,Xcode套件的一部分,于1988年创立.它的创造者Jean-Marie Hullot自称是“一个热爱旅行.充 ...

  8. CoreWCF 1.0 正式发布,支持 .NET Core 和 .NET 5+ 的 WCF

    CoreWCF 1.0 正式发布,支持 .NET Core 和 .NET 5+ 的 WCF https://devblogs.microsoft.com/dotnet/corewcf-v1-relea ...

  9. 苹果开发工具:Xcode和Interface Builder

    摘要:在Mac OS X上开发,首选Xcode继承开发环境.本文对开发工具套件中最重要的Xcode和Interface Builder两个工具做了简要介绍,并提供<苹果开发工具概述>PDF ...

随机推荐

  1. 带你深入理解STL之List容器

    上一篇博客中介绍的vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,很好的支持了随机存取,但由于是连续空间,所以在中间进行插入.删除等操作时都造成了内存块的拷贝和移动,另外在内存空间 ...

  2. Android开发学习之路--百度地图之初体验

    手机都有gps和网络,通过gps或者网络可以定位到自己,然后通过百度,腾讯啊之类的地图可以显示我们的地理位置.这里学习下百度地图的使用.首先就是要申请开发者了,这个详细就不多讲了.http://dev ...

  3. JQuery实战--可以编辑的表格

    廊坊下雪了,15年的第二场雪,比14的来的稍晚一些,停靠在11教门前的自行车,成了廊坊师范学院最美丽的风景线.还记得以前学习css的时候,就曾经接触过如何编写设计一些表格和表单的样式,例如如何设计表格 ...

  4. 【一天一道LeetCode】#206. Reverse Linked List

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Reverse ...

  5. 01-Git简介和仓库创建

    Git简介 Linus的第二个伟大作品.2005年由于BitKeeper软件公司对Linux社区停止了免费使用权.Linus迫不得己自己开发了一个分布式版本控制工具,从而Git诞生了. 目前使用Git ...

  6. Beanstalkd 一个高性能分布式内存队列系统

    需要一个分布式内存队列,能支持这些特性:任务不重不漏的分发给消费者(最基础的).分布式多点部署.任务持久化.批量处理.错误重试..... 转载:http://rdc.taobao.com/blog/c ...

  7. 在golang中使用leveldb

    leveldb是一个很强悍的kv数据库,自然,我也希望能在go中使用. 如果有官方的go leveldb实现,那我会优先考虑,譬如这个,但是该库文档完全没有,并且在网上没发现有人用于实战环境,对其能否 ...

  8. Java进阶(五)Junit测试

    我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应该确保每一个函数 ...

  9. 【一天一道LeetCode】#91. Decode Ways

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 A messa ...

  10. Java对象引用处理机制

    翻译人员: 铁锚 翻译时间: 2013年11月13日 原文链接: How does Java handle aliasing? 什么是Java的引用别名机制 Java的引用别名机制(原文为Aliasi ...