写点什么

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

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

关注

评论

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

工厂管理没有头绪?那是你还没有可视化操控设备

一只数据鲸鱼

数据可视化 工业互联网 工业4.0 智慧工厂

浪潮云说丨数据工场助力行业数据发挥生产要素新价值

云计算

ONES CTO 冯斌 | 高效研发团队的技术管理之道

万事ONES

管理 研发管理 技术管理 ONES

动态规划最长公共子序列(LCS)问题(Java实现)

若尘

动态规划 java编程 6月日更

WebRTC 用例和性能

anyRTC开发者

音视频 WebRTC RTC sdk

PHP ppa 不再支持过时的 Ubuntu 16.04,请立即升级 20.04

大龄程序员老羊

php ubuntu 架构 DevOps

我的编辑器能玩贪吃蛇,一起玩不?

华为云开发者联盟

大前端 编辑器 贪吃蛇 Blot Quill

6月18日华为云携手中科院上海药物所,深度解读AI药物研发技术

华为云开发者联盟

AI 华为云 药物 TechWave EIHealth

网络攻防学习笔记 Day40

穿过生命散发芬芳

网络攻防 6月日更

并发王者课-青铜9:防患未然-如何处理线程中的异常

MetaThoughts

Java 多线程 并发

读深入ES6记[三]

蛋先生DX

ES6 6月日更

教你在Kubernetes中快速部署ES集群

华为云开发者联盟

Kubernetes 监控 中间件 集群 ES集群

深圳站 | 鹏城再聚,赋能未来,金沙古酒百城巡展第39站完美收官!

科技热闻

【LeetCode】零钱兑换 IIJava题解

Albert

算法 LeetCode 6月日更

融合创新与头雁领路:通过北京人工智能产业联盟能读懂什么?

脑极体

一文回顾 Java 入门知识(下)

逆锋起笔

Java 面向对象 JAVA开发 java基础 javase

Scrum为何倡导固定迭代周期?

万事ONES

项目管理 Scrum 敏捷开发 Agile ONES

Hi,HarmonyOS!融云全系产品已成功适配鸿蒙 OS 2.0

融云 RongCloud

springboot启动流程之createApplicationContext

梦倚栏杆

【Flutter 专题】108 图解 PageView 滑动页面预览小尝试

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

分布式系统中的ID是如何生成的

卢卡多多

电商 分布式ID 6月日更 签约计划第二季

情感分析 | AI没有“心”,却能“读心”

澳鹏Appen

人工智能 自然语言处理 机器学习 nlp 训练数据

液体测量技术:从水到血液

不脱发的程序猿

物联网 液体测量技术 测量技术 ADI

手撸Spring框架,设计与实现资源加载器,从Spring.xml解析和注册Bean对象

小傅哥

spring 小傅哥 资源加载器 解析xml 注册Bean对象

如何用Python快速的搜索邮件

IT蜗壳-Tango

6月日更

CloudQuery 的数据安全技术运用

BinTools图尔兹

Java 数据库 sql 数据安全

并发王者课-青铜10:千锤百炼-如何解决生产者与消费者经典问题

MetaThoughts

Java 多线程 并发

想听世界上最懂 JavaScript 的人和你讲JavaScript 吗?

博文视点Broadview

Java 并发编程—— ThreadPoolExecutor 分析应用

Antway

6月日更

聊聊Go的包管理

架构精进之路

包管理工具 Go 语言 6月日更

ONES CTO 冯斌 | 项目管理是软件研发的刚需

万事ONES

项目管理 研发管理 ONES

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