写点什么

RubyConf'08 视频:Ruby 虚拟机 YARV、Rubinius 和 MagLev

  • 2008-12-21
  • 本文字数:1777 字

    阅读完需:约 6 分钟

RubyConf’08 特别关注了各种 Ruby VM。从纵深的技术实现细节,到实际演示和一般的 Ruby 性能,都进行了讨论。

Koichi Sasada :“Ruby VM 的未来” 。Koichi Sasada 认为Ruby 的C 实现是近期实用的Ruby VM 解决方案,尽管其存在一些问题,比如保守的GC。

他接着谈到了一些为1.9 实现的优化,但1.9 已经发布了,所以要在1.9.2 中实现了。这些优化包括尾部调用(tail call)优化、堆栈缓存、高效方法缓存,以及一种更高效的Fiber 实现。

在视频第20 分钟左右,他还谈到了一些他感兴趣的研究。其中包括 Ricsin,这是一种可以在 Ruby 中嵌入 C代码的技术。演示幻灯片中的一小段实例代码可以解释得更清楚些。

复制代码
def open_fd(path)
fd = _C_(%q[
/* C code */
return INT2FIX(open(RSTRING_PTR(path), O_RDONLY));
])
raise 'open error' if fd == -1
yield fd
ensure
raise 'close error' if -1 == _C_(%q[
/* C Code */
return INT2FIX(close(FIX2INT(fd)));
])
end

RubyInline 不同的是,它允许在 Ruby 方法内部嵌入 C 代码。最新的版本获得了 YARV 的特别支持。 Ricsin 的 SVN 库也已经开放了。

下一步计划是做一个从Ruby 到 C的编译器(在视频的 28 分 40 秒前后),接下来是Atomic-Ruby,其通过剥离一些部件来轻量化 Ruby。

在第 41 分钟,Koichi Sasada 还介绍了 Ruby MVM 项目的现状(InfoQ 曾做过关于Ruby MVM 的报道)。

Evan Phoenix 关于 Rubinius 的讨论介绍了Rubinius项目及其 C++ VM 的近况。

他解释了重写C VM 为C++ VM原因,这包括类型安全和 C++ 有助于简化代码,减少许多手工检查。

在 18 分 4 秒,他还谈到了 primitive 当前的实现情况(如何用 C 来写 primitive)。在 26 分 30 秒,介绍了方法分发(method dispatch)和加快运行速度的策略。在 35 分钟的时候,他还提到了MethodContext****(“堆栈框架”)分配的 现状。在 Runinius 的旧版本中,用的是堆分配,而新版本打算在栈上分配(在一个专用的内存区域),从而减少分配开销。不论怎 样,MethodContext 能在方法的生命周期之外继续保持(例如闭包)。这些对象会被保持着,但由于专用内存区域大小有限,有时会撑满,这时就会触 发一个 GC 来清理不再被引用的 MethodContext。

在 38 分 40 秒,他谈到了 Rubinius 对Ruby 扩展的支持,这对于运行 C 扩展包非常重要,比如如 hpricot、mongrel、mysql 和 sqlite 驱动。他还解释了 Rubinius 是如何处理扩展问题的(例如分代 GC、C 代码段错误问题)。

Glenn Vanderburg 的“Ruby 能有多快”也讨论了这个话题。他虽然不是一个 VM 实现者,但也谈到了 Ruby 比较慢的原因。第 7 分钟他对垃圾收集的讲解大致说明了分代 GC 的理论,接下来,19 分 35 秒时还有关于方法分发的性能优化的介绍。

Bob Walker 和 Allan Ottis 在“MagLev 中 Ruby 的持久性”中介绍了 MagLev 的现状。Bob Walker介绍了 Gemstone 的持久性模型(persistence model的一些基本优势,它可以通过简单地保持对象图,而不把它们映射到关系模型上,从而规避了 ORM 库和工具的很多问题。

在 14 分 30 秒,Allan Ottis 从对象持久性实现开始,详细说明了 MagLev 的内部工作方式 **。在 18 分 50 秒,他谈到 Smalltalk 和 Ruby 的相似点和区别,以及它们在 Smalltalk 上实现 Ruby 时遇到的问题。在 22 分 29 秒,他还讲解了编译过程,以及现在的解析方案(用一个 Ruby 服务来解释 Ruby 代码,使用ParseTree包来返回一个格式化为解析树 s-exprs 的 AST)。**

在第 25 分钟,Allan Ottis 讲解了执行模式,包括解释本地代码产生。在 30 分 30 秒,他还演示了 Context 分配(“堆栈框架”)的实现,以及对象内存(堆)的细节和垃圾收集器。

提问从 44 分 20 秒开始,问题包括关于分布式缓存、未来的解析策略(使用 ruby_parser),以及事务是如何工作在分布式对象存储上的。

关于 Ruby VM 讨论的更多演示见:

视频最后以 Brian Ford 谈 RubySpec 圆满结束,他介绍了 RubySpec 项目,现在有成千上万个测试,定义了 Ruby 行为——这对于各种 Ruby 实现版本都是个重要的工具。

查看英文原文: RubyConf’08 Videos: Ruby VMs: Internals of YARV, Rubinius, MagLev

2008-12-21 02:51602
用户头像

发布了 33 篇内容, 共 41044 次阅读, 收获喜欢 0 次。

关注

评论

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

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

Gosling

极客大学架构师训练营

架构师训练营 - week1 - 个人学习心得总结

谭明华

架构1期-第二周作业一

道长

极客大学架构师训练营

框架设计-第二周作业

睁眼看世界

极客大学架构师训练营 软件设计原则

极客时间架构师培训 1 期 - 第 2 周作业

Kaven

第二周学习总结

饭桶

小白也能看懂的REDIS教学基础篇——REDIS基础数据结构

Java 数据库 redis

C语言/C++基本语句编程风格

C语言与CPP编程

程序员 编程语言 C语言

第二周作业

华美而火锅

数据结构与算法:递归

Java架构师迁哥

Java 编程 程序员 算法

腾讯某Java程序员为了肝出《300页图解网络知识》+《计算机底层操作系统》超全教程差点猝死!

Java架构之路

Java 程序员 面试 编程语言 操作系统

2020年高频Java面试题集锦(含答案),让你的面试之路畅通无阻!

Java架构之路

Java 程序员 面试 编程语言

听说有人不了解柔性数组

C语言与CPP编程

程序员 数组 编程语言 C语言

架构师第二周作业

悠哉

极客大学架构师训练营

架构师训练营 - week2 - 个人学习心得总结

谭明华

极客大学架构师训练营

架构师训练营 1 期 -- 第二周

小河

极客大学架构师训练营

区块链+跨境贸易:让跨境数据高效共享可信

CECBC

区块链 跨境贸易 跨境电子商务

linux虚拟摄像头vivid配置

良知犹存

Linux 虚拟摄像

食堂就餐卡系统设计

谭明华

极客大学架构师训练营

架构师第二周总结

悠哉

最新整理国内知名大厂7篇Java岗面试真题,奥利给!

Java架构师迁哥

UML练习2

何毅曦

第二周作业二-学习总结

道长

极客大学架构师训练营

const关键字应用总结

C语言与CPP编程

程序员 编程语言 C语言

原来我写的软件里面都是臭味 - 架构师训练营第 1 期 - 第二周总结

Todd-Lee

极客大学架构师训练营

第二周作业

饭桶

开放的是金融服务 必须确保持牌经营

CECBC

金融 银行

超全算法笔试模拟题精解合集,这份《程序员面试宝典》简直太牛了

Java架构之路

Java 数据结构 面试 算法 编程语言

第二周 作业一【未陌】

a d e

设计模式 架构设计原则 基本原则

周总结二

何毅曦

第二周 作业二:框架设计学习总结【未陌】

a d e

设计模式 架构设计

RubyConf'08视频:Ruby虚拟机YARV、Rubinius和MagLev_Ruby_Werner Schuster_InfoQ精选文章