硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

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

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

关注

评论

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

基于 APISIX 的服务网格方案 Amesh 积极开发中!

API7.ai 技术团队

Service Mesh Service Mesh 服务网格 服务网格 APISIX

数据的不确定性及可视化方法

搞大屏的小北

南京市等级测评机构有哪些?哪里可以查到?

行云管家

南京 等级测评机构

Python对txt进行读写操作

Geek_7ubdnf

Python

这可能是Feign调用可重试的最佳方案了

JAVA旭阳

Java spring

工业5.0:为何是下一个10年的制造业关键性变革方向?

PreMaint

工业4.0 智能制造

平安健康 Dubbo 3 升级、迁移和验证之路

阿里巴巴中间件

阿里云 云原生 dubbo

数据可视化图表系列解析——漏斗图

Data 探险实验室

数据分析 可视化 数据可视化 图表 可视化数据

云堡垒机优点简单说明-行云管家

行云管家

网络安全 堡垒机 云堡垒机

秒云荣获四川省创新型中小企业认定

MIAOYUN

创新型中小企业 2022创新型中小企业 四川省创新型中小企业 科技型中小企业

Sentinel Go-毫秒级统计数据结构揭秘

阿里巴巴中间件

Go 阿里云 云原生 Sentienl

软件测试/测试开发丨如何从 0 开始学 Python 自动化测试开发(一)

测试人

Python 软件测试 自动化测试 测试开发

Redux与前端表格施展“组合拳”,实现大屏展示应用的交互增强

葡萄城技术团队

新一代云原生日志架构 - Loggie的设计与实践

网易数帆

开源 云原生 日志 Loggie 企业号 1 月 PK 榜

2022年个人云盘行业发展分析和厂商实力洞察

易观分析

用户 私有云盘

4种LED显示屏箱体连接方式

Dylan

LED LED显示屏 户外LED显示屏

软件测试/测试开发 | 一文搞定 Appium 环境配置

测试人

软件测试 自动化测试 测试开发 appium app自动化测试

pip安装'torch'出现PackageNotFoundError报错解决办法

Geek_7ubdnf

Python

啥玩意儿?一个计时模块要做2天?

为自己带盐

dotnetcore

为什么 APISIX Ingress 是比 Ingress NGINX 更好的选择?

API7.ai 技术团队

APISIX Ingress Controller Kubernetes Serverless NGINX Ingress Controller

手把手教您在PyCharm中连接云端资源进行代码调试

华为云开发者联盟

人工智能 华为云 企业号 1 月 PK 榜

SAP系统在企业内部控制方面有哪些独到之处?

SAP虾客

报表 SAP系统 业财一体化 change history

房价危机:疫情后时代席卷全球的新变局|数据报告

前嗅大数据

数据分析 数据采集 爬虫案例 爬虫工具 房价

TiDB 底层存储结构 LSM 树原理介绍

C++后台开发

数据结构 后端开发 LSM树 TiDB

未来软件开发主流模式——低代码开发

力软低代码开发平台

NFTScan 与 Afflux 孵化器达成战略合作伙伴,共同促进 Web3 生态发展!

NFT Research

NFT

AirServer正式版Mac7.2.7屏幕软件下载

茶色酒

AirServer AirServer2023

pip安装更换镜像

Geek_7ubdnf

Python.

分布式系统-CAP理论

非晓为骁

分布式系统 CAP理论 分布式理论

关于局域网中的攻击溯源问题

郑州埃文科技

IP溯源 局域网

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