写点什么

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

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

关注

评论

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

2022-12-17:订单最多的客户。以下数据,结果输出3。请问sql语句如何写? DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `

福大大架构师每日一题

数据库 福大大

OpenTelemetry系列 (三)| 神秘的采集器 - Opentelemetry Collector

骑牛上青山

Java Go 调用链 微服务调用链

ABBYY FineReader PDF2023最新版下载

茶色酒

abbyy

架构实战 2 - 微信朋友圈高性能复杂度分析

架构实战营 「架构实战营」

中台之建模篇

涛哥 数字产品和业务架构

中台 建模

跨平台应用开发进阶(十九) :position:fixed 虚拟按键触发后无法生效问题分析及解决方案探究

No Silver Bullet

uni-app 跨平台 自定义组件 12月月更 虚拟按键

跨平台应用开发进阶(二十一) :uni-app 路由传参参数丢失问题解决方案探究

No Silver Bullet

uni-app 跨平台应用 参数传递 12月月更 参数丢失

CleanMyMac2023版本要不要更新下载?

茶色酒

CleanMyMac X CleanMyMac X2023

Python 为什么如此设计?

Python猫

Python

ceph的组件及数据写入流程

好吃不贵

跨平台应用开发进阶(二十三) :一文走近 testflight 上架

No Silver Bullet

uni-app testflight 12月月更 应用上架

在 Windows 搭建 SVN 服务

eng八戒

svn DevOps 服务器 版本管理工具

在局域网搭建一个带 web 操作页面的 git 版本服务器 - Gitlab

eng八戒

git DevOps gitlab 版本管理

架构误区系列8:需求===架构设计

agnostic

工赋开发者社区 | 工业4.0时代,制造业企业发展智慧工厂之策略解析

工赋开发者社区

架构实战模块二

GeekMLS

#架构实战营

架构实战营模块2作业

程序员小张

「架构实战营」

架构实战营第 10 期-模块二作业:微信朋友圈高性能复杂度分析

kaizen

「架构实战营」

《绩效领导力:使用OKR成就超出期望的未来组织》读后感

Bruce Talk

OKR 敏捷

架构实战营10期-作业2

炮仗

模块三作业

Ryan

构架

什么是MySQL插入意向锁?

江南一点雨

MySQL

【审计思路】如何快速定位SQLMS注入漏洞?

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

数据预处理

穿过生命散发芬芳

数据处理 12月月更

房产|11月全国70城房价出炉!你关心的城市房价有何变化

前嗅大数据

这里聊聊扫地机的 IOT 开发

eng八戒

IoT ROS 移动机器人 阿里云生活物联网平台 涂鸦

数据库原理及MySQL应用 | 视图

TiAmo

MySQL 数据库· 12月月更

Verilog的多分支语句

芯动大师

Verilog Verilog语法 Verilog多分支语句

SpringBoot 整合 Redis,再也不用求别人了

@下一站

redis 程序设计 12月日更 12月月更 springboot整合redis

房产|1-11月份全国房地产开发投资下降9.8%

前嗅大数据

架构训练营学习总结

Geek_b35d92

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