抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

Gardens Point Ruby.NET 团队访谈录

2007 年 6 月 15 日

Gardens Point Ruby.NET 编译器是一个在 CLR 上运行 Ruby 代码的支持平台,最近发布了 0.8 版本。最新的版本使得用 Ruby 访问用其他语言写的代码成为可能,反之亦然。因为对所有针对 CLR 或者 JVM 的 Ruby 运行时而言,互操作性都是一个重要的话题,因此我们就此采访了 Ruby.NET 团队成员 John Gough。

首先,John 与我们分享了一些关于 Ruby.NET 如何处理 Ruby 和.NET 对象的一些实现细节:

互操作性依赖已存在的 Ruby.NET 中对象继承的选择。大多数在 Ruby 中定义的对象都是源自 Ruby.Object 的 CLR 类型。这些对象都有一个指向“类”对象的字段(Field),而“类”对象属于对象类型字典里某种类型。但是,对一些内嵌类的对象,比如 FixNum、True、False 等,是被一个封装有 Raw 值的空 CLR 对象所继承。 方法调度通过把对象作为参数,来调用一个名为“ClassOf”的静态方法予以实现。对于源于 Ruby.Object 的对象,这会返回一个 Ruby 类的类对象引用(Reference),而对于 FixNum,运行时则返回一个 FixNum 类型的已知类描述的引用。

现在,请注意这一点:ClassOf 不期望互操作对象被封装,所以如果有对象不是继承自 Ruby.Object,且不是一个内建类型,它就必须是一个互操作对象。全局缓存中保留着从 CLR 类到 Ruby 类的映射关系,以支持从 CLR 类到封装互操作类上方法调用的 Ruby 类对象。

所以,当一个 CLR 类的对象首次出现时,对象不会被封装,但会创建一个 Ruby 类描述符完成这项工作。已有的方法使用反射按需被发现。还有一些事情,如重载方法,依然有很多未决的问题,尽管对一些小子集的调用,声明类型能处理绑定。

还有一些功能没有得到很好的处理,比如引用参数。John 解释说:

0.8 版本的另一个局限性是无法处理有引用参数的 CLR 方法。这不会让我们的进度停滞(译者注:show-stopper 一般指在 Issue Tracking 中,某个 Issue 过于严重而让项目不得不停滞)。这是 Wayne Kelly 的调用,但是我期望引用参数能通过复制传递而终止。要完成这些工作需要有许多管道代码(Plumbing Code),因为对于 CLR 而言,byref 声明需要有确切的类型……而不是 Ruby 的一个外来概念。

注意:Wayne Kelly 也是 Gardens Point Ruby.NET 团队成员。

兼容性和性能也是将来考虑的一部分。John 说:

正如在发布声明中所说的一样,尽管在遇到严重的性能问题时我们试图避免任何不当的设计,在优化方面我们还没有任何作为。我们已经很接近要达到的目标了,一旦达到我们就可以加快进度。需要提出的是,我们没有做任何方法绑定的调用缓存,要知道它可能是在整个动态语言实现领域唯一最大的性能增强点。

在未来,Ruby.NET 会考虑依靠社区贡献来进行完善。John 解释了未来的发展规划:

我们会继续在这个项目上努力,这一过程至少要持续到年底。然后到 1.0 版本的时候,我们期望能将这个项目向社区公开。这只是我和 Wayne Kelly 所参与的几个项目中的一个而已。我们还负责 Microsoft-QUT eResearch 中心,网址为 https://www.mquter.qut.edu.au ,还为其他一些语言工具努力,请浏览 http://plas.fit.qut.edu.au/projects ,另外还要更新“Compiling for the .NET Common Language Runtime”这本书等。

关于 Gardens Point Ruby.NET 编译器的更多信息,请浏览 Channel 9 最近发布的对 Wayne Kelly 的采访

查看英文原文: Gardens Point Ruby.NET internals interview

2007 年 6 月 15 日 03:23289

评论

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

架构师训练营作业

Hanson

架构师训练营第一周总结

小树林

深入理解JVM垃圾回收机制 - 对象的内存布局

WANDEFOUR

深入理解JVM 内存布局 垃圾回收

位运算

拾贝

Week1-架构是什么&如何做架构

wyzwlj

极客大学架构师训练营

食堂就餐卡系统设计

mh

系统设计

命题作业—第一周

于江水

极客大学架构师训练营

架构师训练营 Week01 学习心得

极客大学架构师训练营

学习总结—第一周

于江水

极客大学架构师训练营

架构师训练营学习总结(week-01)

Justin

数据类型转换

拾贝

重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

小傅哥

设计模式 小傅哥 重构 代码质量 代码坏味道

小师妹学JavaIO之:Buffer和Buff

程序那些事

io nio 小师妹 buffer buff

在IBM Cloud中运行Fabric

程序那些事

vscode blockchain hyperledger fabric ibm

第一周学习总结

战峰

第一周.UML课后作业

西柚

UML

架构师训练营作业(week-01)

Justin

「架构师训练营」Week01 作业+总结

PowerZhang

极客大学架构师训练营

架构设计作业1——食堂就餐卡系统设计

Andy风

if语句

拾贝

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

Season

极客大学架构师训练营

架构师训练营第一周总结

Hanson

食堂就餐卡系统设计

Season

极客大学架构师训练营

架构师训练营第一周

Melo

Week1-Homework

switch 语句

拾贝

使用IBM Blockchain Platform extension开发你的第一个fabric智能合约

程序那些事

区块链 blockchain hyperledger fabric ibm

食堂就餐卡系统设计

Lane

食堂就餐卡系统设计

GalaxyCreater

架构师训练营作业--Week1

吴炳华

游戏夜读 | 毛利率有多少?

game1night

Study Go: From Zero to Hero

Study Go: From Zero to Hero

Gardens Point Ruby.NET团队访谈录-InfoQ