写点什么

MacRuby——将 Ruby 1.9 移植到 Objective-C

  • 2008-03-09
  • 本文字数:1826 字

    阅读完需:约 6 分钟

一个苹果公司的新项目着力于提升 MacOS X 上的 Ruby。 MacRuby 项目是Ruby 1.9的一个Objective-C的移植版。

我们访问了 MacRuby 项目的Laurent Sansonetti来了解项目的信息和工作细节。

InfoQ: MacRuby 是一个苹果公司赞助的项目吗?

Laurent Sansonetti: MacRuby 是苹果公司创建的一个自由软件项目。目前项目参与者还都是苹果的雇员,但是我们无疑欢迎外界的贡献,这也是我们决定在 MacOSForge 上开放项目并以公开的方式开发的原因。

InfoQ: 你们开发的 MacRuby 是基于 Ruby 1.9/YARV 的。从 Ruby 1.9 到 MacRuby 有哪些工作要做?是否很多都是关于对象创建的修改的?(从 Ruby 的方法改为使用 Objective-C 对象)。其他还有什么需要修改的?

Laurent Sansonetti: Ruby 对象的数据结构不得不修改以适应 Objective-C 对象的数据结构,因此一个 Ruby 对象可以被转换为一个 C 级别的 Objective-C 对象。接下来,对象分配器也被修改为使用 Objective-C 的对象分配器来代替,这意味着所有的对象(Ruby 和 Objective-C)的分配都来自同一个内存池。

最 后,传统的 Ruby 垃圾回收器被移除,我们使用了 Objective-C 垃圾回收器来代替。这个修改可不简单,因为回收器默认是运行在分代模式 (Generational Mode)下,预期你每次在对象仓库注册一个对象的时候需要适当的设置“写屏障”,因为回收器会根据这些信息来回收新生代对象。

InfoQ: 在创建表示 Ruby 类的 Objective-C 类时发生了什么?它们全部是在运行时动态创建的吗?

Laurent Sansonetti: 在你定义 Ruby 类的时候 Objective-C 类也同时被创建。如果反过来,当你通过 MacRuby 访问一个 Objective-C 对象时,它也会在 YARV 中延迟加载。

InfoQ: 在 Ruby 对象中,Objective-C 方法是可见的吗?

Laurent Sansonetti: 是的,反之也一样,Ruby 方法同样在 Objective-C 环境中可见。

InfoQ: 一个对于 Ruby 空间的争论主题就是 ObjectSpace。JRuby 1.1 默认其失效。你知道 Objective-C 如何能够实现 ObjectSpace 的功能而不损失性能吗?

Laurent Sansonetti: 所有 MacRuby 对象都是从相同的内存池中分配的,更精确的说是同一个 malloc 区域(请看 /usr/include/malloc/malloc.h 来获得更多细节)。因此很容易就可以实现遍历整个区域并迭代其中的所有对象。这个功能是理所当然的。

然后,请注意在 MacRuby 中调用 ObjectSpace#each_object 明显要慢于 Ruby。因为它将返回全部对象,包括你需要框架创建的纯 Objective-C 对象。

$ ruby -ve “p ObjectSpace.each_object {}”
ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0]
310$ /usr/local/bin/ruby -ve “p ObjectSpace.each_object {}”

MacRuby version 0.1 (ruby 1.9.0 2008-02-18 revision 0)
[i686-darwin9.2.0]
8759$ /usr/local/bin/ruby -ve “framework ‘cocoa’; p ObjectSpace.each_object {}”

MacRuby version 0.1 (ruby 1.9.0 2008-02-18 revision 0) [i686-darwin9.2.0]
48425

InfoQ: 目前兼容性如何?我注意到字符串是基于 NSString 的——存在什么兼容性问题吗?原生扩展的兼容性又如何呢?

Laurent Sansonetti: 目前 Ruby 的 String 类继承自 NSString 来达到 String 到 NSString 的快速转换。所以目前没有兼容性问题。然 而,在不久的将来,我们计划通过它们的 CoreFoundation 等价(CFString、CFArray 和 CFDictionary)重新实现 Ruby 原始类(String、Array 和 Hash)以统一功能并使得在两个运行时之间实现无成本转换。因为我们注意到在一个典型应用的内部,大多数跨 运行时的对象都是原始类。

这个修改可能会引入某些兼容性问题,然而我们会尽力保持其兼容 1.9 和 C 扩展。

InfoQ: MacRuby 的未来计划是什么?

Laurent Sansonetti: MacRuby 的主要目标是让开发者可以通过 Ruby 写出非常棒的 Cocoa 应用,而这个通过我们在 Mac OS X Leopard 中引入的 RubyCocoa 技术是做不到的(我们依然继续支持 RubyCocoa)。为了实现这个目标,我们还有工作要做。
我们同时也希望 MacRuby 可以在其它情况下工作良好。无论当前的修改还是我们计划引入的修改都无疑会对它们造成冲击。
我们很快会发布一个里程碑计划,还有第一个发布版!静候佳音吧。

检出 MacRuby 工程或者在MacOsForge 上查看MacRuby 的源代码。关于Laurent 对MacRuby 的声明请看 ruby-core 列表和后续关于诸如有键参数特殊语法特性的讨论。关于 MacRuby 更多的工作细节,请查看 Wiki 页 HowDoesMacRubyWork

查看英文原文: MacRuby - Ruby 1.9 ported to Objective-C

2008-03-09 19:001227
用户头像

发布了 80 篇内容, 共 21.0 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

鼠标自动点击工具 RapidClick for Mac激活最新版

南屿

Mac软件 RapidClick破解版

Bartender 5 for mac自定义隐藏及显示菜单栏

南屿

VJ创作表演:Resolume Arena 6 for Mac中文版 含esolume arena 破解补丁

南屿

AE脚本-一键快速输出GIF动图格式插件 GifGun v2.0.15激活版

南屿

云手机解决tiktok登录不上的问题

Ogcloud

云手机 海外云手机 tiktok云手机 云手机海外版 国外云手机

中国香港正在计划发行第二批代币化绿色债券

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

聚道云软件连接器:打通金蝶云星空与招商银行CBS,提升企业财务和银行业务效率

聚道云软件连接器

案例分享

Mac好用的多窗格文件管理器QSpace Pro v4.0.4中文版

南屿

如何查看电脑性能跑分?Geekbench极客系统跑分工具

南屿

海外云手机开辟企业跨境电商新道路

Ogcloud

云手机 海外云手机 tiktok云手机 云手机海外版

数维图数字孪生:能源电力行业三维可视化系统合集

2D3D前端可视化开发

大数据 物联网 可视化 智慧电力 数字孪生

海外云手机对于亚马逊卖家的作用

Ogcloud

云手机 海外云手机 云手机海外版

谁说后端不能画出美丽的动图?让我来给大家拜个年!

不在线第一只蜗牛

Java JavaScript 后端 动图

区块链游戏解说:什么是 SecondLive

Footprint Analytics

区块链 加密货币 代币 NFT

如何将照片组合在一起?图片照片拼接合成软件合集

南屿

照片编辑 图片拼接 照片合成

Total Video Converter Pro超级转霸 Mac视频转换软件 v5.1.0下载

南屿

UML建模工具Astah Professional,实现逼真模型,让设计更加生动!

南屿

Excel复杂表头按组按行复制

alexgaoyh

Java POI 合并单元格 复杂表头 模板生成

MacRuby——将Ruby 1.9移植到Objective-C_Ruby_Werner Schuster_InfoQ精选文章