写点什么

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:001090
用户头像

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

关注

评论

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

OneCommander Pro(双窗口文件管理工具)v3.75.1.0 特别版

iMac小白

“小瓦AI答”全新升级

Laval小助手

聚道云软件连接器助力企业实现滴滴出差报销自动化

聚道云软件连接器

案例分享

信创里程碑:Tapdata 同时通过华为云 GaussDB 及鲲鹏兼容互认证,全面支持基础设施自主创新建设

tapdata

华为云 GaussDB 华为云公有云平台(鲲鹏)

架构设计|基于 raft-listener 实现实时同步的主备集群

快乐非自愿限量之名

Java 架构 运维

win版 Navicat Premium 16(数据库管理软件)中文特别版

iMac小白

Navicat Premium 16下载 Navicat Premium 16激活 Navicat Premium 16破解

Adobe Bridge 2024(Br2024) v14.0.4.222 (x64)直装版

iMac小白

TapData 正式上线 MongoDB 生态合作伙伴专栏,提供更专业的企业级实时数据集成解决方案

tapdata

mongodb 合作伙伴 生态伙伴

剪切板复制粘贴管理工具 Paste for mac中文激活版

iMac小白

Paste for Mac paste mac破解版 Paste 下载

FotoJet Designer(图形设计软件)特别版下载

iMac小白

这些Git事故灾难, 你经历过几个?

EquatorCoco

git

HarmonyOS 性能优化

不在线第一只蜗牛

HarmonyOS 鸿蒙系统

Disk Drill for Mac(数据恢复软件) v5.5.1515中文激活版

iMac小白

Disk Drill for Mac Disk Drill下载 Disk Drill mac

火山引擎数据飞轮行业研讨会在京举行 聚焦互联网企业数智化升级

字节跳动数据平台

大数据 数字化转型 云服务 火山引擎 企业号 4 月 PK 榜

低代码与前端开发的未来:走向更高效的创新

EquatorCoco

智能工单,一键报障|云智慧轻帆云打造连锁企业服务管理新体验

云智慧AIOps社区

运维 IT服务管理 工单管理 工单系统 智能工单

Elasticsearch 原理与在直播运营平台的实践

字节跳动云原生计算

搜索 ES

Axure RP 9 for mac激活版 交互式产品原型设计工具

iMac小白

Axure RP 9汉化 Axure RP 9授权码 Axure RP 9破解版

MQTT Broker 白皮书:全面实用的 MQTT Broker 选型指南

EMQ映云科技

mqtt mqtt broker

从源码到实战:探寻App中的等待神秘力量,强制等待 vs 隐式等待对决

测吧(北京)科技有限公司

测试

Icecream Screen Recorder Pro(屏幕录像软件)

iMac小白

权威答案!灵犀医疗引入 Zilliz Cloud,千万级向量数据库赋能医学 AIGC 平台

Zilliz

Zilliz AIGC zillizcloud 灵犀医疗

探索“人工智能+”战略下的企业切入点

不在线第一只蜗牛

跨境电商新篇章:alibaba.item_get API接口助力商家精准营销

技术冰糖葫芦

api 货币化 API 接口 pinduoduo API

win版DxO FilmPack 7(照片模拟胶片效果处理)v7.6.0.515 (x64)特别版

iMac小白

DxO FilmPack 7 DxO FilmPack 7下载 DxO FilmPack 7破解版

FotoJet Designer(图形设计软件)v1.3.3 特别版+便携版

iMac小白

FotoJet Designer下载 FotoJet Designer mac

深入分析C++对象模型之移动构造函数

爱分享

c++ 性能优化 代码优化 C++构造函数 C++移动构造函数

软件开发生产线CodeArts 4月新特性预告,一睹为快!

华为云PaaS服务小智

软件开发 华为云

我用这10招,能减少了80%的BUG

快乐非自愿限量之名

软件开发 bug

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