生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

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

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

关注

评论

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

架构师训练营-第一周-食堂就餐卡UML

王权富贵

极客大学架构师训练营 UML

食堂就餐卡系统设计

Jeannette

架构 0 期-week1-命题作业

陈俊

极客大学架构师训练营

Flink 源码分析之一文搞懂Flink 消息全流程

shengjk1

flink flink源码

Wireshark的使用与数据分析(二)

姬翔

架构视图学习总结

uangguan

架构师训练营0期第一周

Blink

架构师训练营-第1周命题作业

红了哟

Week01 总结

一黑到底

第一周总结

changtai

极客大学架构师训练营

第 1 周作业 - 食堂就餐卡系统设计

Geek_af3d01

UML

Jeannette

架构师训练营-第一周-食堂就餐卡系统架构设计

坂田吴奇隆

极客大学架构师训练营

第1周【架构方法:架构师如何做架构】总结

陆不得

食堂就餐卡系统架构设计文档

changtai

极客大学架构师训练营

第一周作业--架构设计文档

CP

作业一:食堂就餐卡系统设计

Coder

极客大学架构师训练营

软件架构学习记录

八两

食堂就餐卡系统设计

孙强

第一周作业-食堂就餐卡架构设计

molly

极客大学架构师训练营

第 1 周食堂就餐卡系统设计

陆不得

第一周学习总结

架构视图

uangguan

架构师训练营第一周学习总结

独孤魂

极客大学架构师训练营

食堂就餐卡系统设计

一黑到底

第0周学习总结

徐培

「架构师训练营」20200606作业一:食堂就餐卡系统设计

极客

极客大学架构师训练营 食堂就餐卡系统设计

什么时候使用volatile关键字?

泰伦卢

c++

架构培训-01学习总结 如何成为架构师

刘敏

本周学习总结

孙强

架构训练营0期总结--第一周

互金从业者X

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