速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

MacRuby 0.6:GCD,线程性能改进,更快的调试器,AOT

  • 2010-05-17
  • 本文字数:1428 字

    阅读完需:约 5 分钟

MacRuby 0.6 已经发布(MacRuby 0.6下载链接)。

MacRuby 0.6 升级日志中指出,MacRuby 0.6 现在可以说是非常适合 Cocoa 开发,完善的 XCode 和预编译(AOT)支持将编译 Ruby 源代码以及运行二进制文件变为可能。

之前披露的一样,0.6 版实验性地加入了调试支持。MacRuby 的调试是在编译的代码中加入特殊指令以触发断点,而不是像其他 Ruby 编译器那样使用追踪或者 Ruby VM Hook。

关于此调试器,升级日志中描述说:

此调试器最有意思的特性是它被抽象为一个简单的 Objective-C API,而且将 macrubyd 作为一个客户端来使用。在未来我们可能会看到更多这样的结构。

Java 和 Ruby 的库之间的比较可以在 Debug-Commons 项目中找到。

MacRuby 0.5 移除了 GIL 之后,线程能够并行地运行(而不是像 Ruby 1.9 那样一次只能运行一个 Ruby 线程)。0.6 对多线程模式做了一些新的改进,例如(根据升级日志):

最后要说的是,在这个版本中,我们完全重写了 Regexp 类。它现在是基于 ICU 架构而不是 Oniguruma 的正则表达式编译和模式匹配架构。因为 ICU 是线程安全的。在 MacRuby 0.6 中,多线程可以高效地使用正则表达式。

MacRuby 0.5 已经开始支持Grand Central Dispatch(GCD),Apple 在 Mac OS X 雪豹和 Phone OS 4.0 上的系统级线程池以及任务系统。MacRuby 0.6 还在‘dispatch’库中加入了一些新的特性和抽象概念。

Job 提供了和 Thread 类似的接口,可以用于异步执行代码。它可以在同步或者异步的情况下使用。如下的代码就是一个例子。Job 类做一些工作,然后等待其结束(这段代码取自文档):

@result = job.value
puts @result.to_int.to_s.size # => 51

异步方式需要传递一个回调函数,一旦 Job 完成工作便调用此函数;在 Ruby 中,这个当然是使用代码段来完成。

job.value {|v| p v.to_int.to_s.size } # => 51 (eventually)

MacRuby Dispatch 库引入的另一个工具便是 Proxy,这个工具能够帮助将调用对象的方法序列化。

其他的新特性有迭代并行化,例如迭代器的并行实现,包括 Enumerable#p_each, Enumerable#p_map, Enumerable#p_find 和 其他类似的方法。

GCD 另一个激动人心的特性是事件源,这个特性能够允许用户在特定的事件中注册处理器,然后在 GCD 的队列中监视事件。事件源可以是计时器,进程的信号,I/O 的输入描述符等。事件源的确是一个非常有用的工具,它能够帮助开发者利用 OS 级的线程池,运行在队列中的事件处理器,当事件到来的时候,处理器从线程池中取出线程,然后运行完毕之后将线程放置回线程池中。

可以阅读 dispatch 库源码的 README 获取更多关于 MacRuby 0.6 中 GCD 特性的信息。

MacRuby 0.6 发布之后,用户发现了一个问题,在运行某代码段的时候,从后台线程切换到主线程会导致程序崩溃。因此,一旦发现这样古怪的线程问题,请细心留意;不过,MacRuby 的 trunk 代码库中很快就会增加 bug 报告功能。

每一个 Ruby 版本中最大的问题不用说,当然是兼容性问题;MacRuby 0.6 是如何处理这个问题的呢(根据升级日志):

MacRuby 0.6 支持为官方 Ruby 编写的 C 插件。我们也能够成功支持 Nokogiri,SQLite3 以及 PostGreSQL 的 MacRuby 旧版本插件。 这个发布版能够通过 85% 的 RubySpecs 测试,可以更好地支持修改过的 Rails 3 和 Ruby 1.9 编码。

最后要说的是,Matt Aimonetti 正在为 O’Reilly 写一本书,书名是 MacRuby: The Definite Guide,开头数个章节已经可以在线阅读了

查看英文原文: MacRuby 0.6 With GCD and Threading Improvements, Fast Debugger, AOT

2010-05-17 20:381249
用户头像

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

关注

评论

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

干货 | 一文搞定 Docker 容器技术与常用命令

霍格沃兹测试开发学社

让泛型的思维扎根在脑海——深刻理解泛型时间

Java-fenn

Java

同事多线程使用不当导致OOM,被我怒怼了

Java-fenn

Java

Java 进阶 (八)Java 加密技术之对称加密、非对称加密、不可逆加密算法

Java-fenn

Java

用了Fabric.js后突然想到了...

为自己带盐

实时音视频 Fabric.js 9月月更

【9.2-9.9】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

干货 | 一改测试步骤代码就全写?为什么不试试用 Yaml实现数据驱动?

霍格沃兹测试开发学社

干货 | 仅需4步,即可用 Docker搭建测试用例平台 TestLink

霍格沃兹测试开发学社

透过Redis源码探究Hash表的实现,你学废了吗?

Java快了!

一文带你弄懂Kubernetes应用配置管理时间

Java-fenn

java;

干货 | REST-assured 获取日志到文件并结合 Allure 报告进行展示

霍格沃兹测试开发学社

VS Code加码Java生产力,IDEA危险了

Java-fenn

Java

C++ STL deque 容器底层实现原理(深度剖析)

C++后台开发

容器 后端开发 C++后台开发 C++开发 C++ STL

内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档

Java-fenn

Java

干货 | Web自动化测试中显式等待与隐式等待该怎么用?

霍格沃兹测试开发学社

干货 | 初窥 Pytest 测试框架,基础薄弱也能轻松 hold 住

霍格沃兹测试开发学社

这份数据安全自查checklist请拿好,帮你补齐安全短板的妙招全在里面!

Java-fenn

java;

干货 | JavaScript脚本注入,完成Selenium 无法做到的那些事

霍格沃兹测试开发学社

Docker常用命令原理与实战

Java-fenn

java;

干货 | web自动化总卡在文件上传和弹框处理上?

霍格沃兹测试开发学社

详谈 MySQL 8.0 原子 DDL 原理

Java-fenn

Java

从负载均衡到路由,微服务应用现场一键到位

Java-fenn

Java

openGauss内核分析:SQL by pass & 经典执行器

Java-fenn

Java

干货 | H5性能分析实战来啦~

霍格沃兹测试开发学社

python 基于aiohttp的异步爬虫实战时间

Java-fenn

Java

云对象 - 重新定义前后端交互

Java-fenn

Java

干货 | 一文搞定 uiautomator2 自动化测试工具使用

霍格沃兹测试开发学社

Go 语言创始人:复制亿点点代码比用别人轮子好!

Java-fenn

java;

2022年哪些工具适合设计企业产品手册?

Baklib

产品 产品手册

龙蜥开发者说:海纳百川,有容乃大,我在龙蜥社区的升级之旅 | 第 11 期

OpenAnolis小助手

开源 Linux内核 sig 龙蜥开发者说 epbf

设备健康管理平台如何为企业打造五大核心设备管理体系?

PreMaint

企业设备管理 预测性维护 设备健康管理

MacRuby 0.6:GCD,线程性能改进,更快的调试器,AOT_Ruby_Werner Schuster_InfoQ精选文章