写点什么

JRuby 编译器完工

2007 年 9 月 29 日

Charles Nutter 已经花了不少时间去开发 JRuby 的Ruby 到 Java 字节码的编译器。现在这项工作已经完成

我刚刚做完了 BEGIN 和 END 块的编译,这样整个编译器就完成了。我还成功地编译了整个标准库,而且我完全靠编译过的脚本成功运行了 IRB 和 RubyGems(即,我删除了全部的.rb 文件)。

这样 JRuby 1.1 计划中提到的部分项目就已经完成了。预计在 11 月初举行的 RubyConf 2007 之前发布的 JRuby 1.1 将会包括这个编译器。

更详细的信息可以在宣布 JRuby 编译器完成的公告中找到

破天荒第一次,我们有了一个完整的、全功能的 Ruby 1.8 编译器。之前已经有其他编译器宣布能够处理所有的 Ruby 语法,甚至能够编译整个标准库。但都还达不到我眼中的真正“完整”:即使扔掉 stdlib 里面所有的.rb 文件,仍然能继续运行比较重大的程序如 IRB 或者 RubyGems。我想这一点成就应该值得我自豪。JRuby 有了第一个完整、全功能、支持 Ruby 1.8 语义的编译器。这是很酷的一件事。

另一种类型的编译器也已经在计划当中。它将会进一步促进 Java 与 Ruby 的集成。

编译器第 2 号大致上是将一个给定文件中的 Ruby 类(或者多个 Ruby 类,如果你想的话),转换成普通的 Java 类型。这个类型将会与其他 Java 类的表现一样:

  • 你可以用 new MyClass(arg1, arg2) 这样的普通 Java 代码来实例化它。
  • 你可以用普通的 Java 方法调用来调用它的全部方法。
  • 你可以用 Java 类来扩展它。

还需要一点加强才能实现在 Java 中使用这些转换出来的类。比如需要用特定的签名来定义方法。因为 Ruby 的方法签名中没有显式的类型信息,所以要使用一些特别的技巧:

我已经想过用独立于实现的方案来指定 Ruby 方法的签名。我所假定的需求是,能运行在 JRuby 里面的代码也要能够不经修改就在其它 Ruby 实现中正常运行;只不过在 JRuby 中,代码还获得了额外的静态类型签名,让它能够被 Java 代码调用。我现在打算的语法是像下面的样子:

复制代码
class MyClass<br></br>
... <br></br>
{String => [Integer, Array]}<br></br>
def mymethod(num, ary); end<br></br>
end

如果你觉得陌生,其实它只不过是基本的字面值哈希语法。返回类型 String 跟方法的两个参数的类型(Integer 和 Array)关联起来。在任何普通的 Ruby 实现中,这一行都会执行并构造出一个哈希值,执行会继续下去,这个哈希值可能很快就会被垃圾回收。不过如果是编译器第 2 号,它就会用这样的行来创建出类似下面的方法签名:

复制代码
public String mymethod(int num, List ary) {<br></br>
...<br></br>
}

查看英文原文: JRuby compiler finished

2007 年 9 月 29 日 15:17602
用户头像

发布了 225 篇内容, 共 49.2 次阅读, 收获喜欢 30 次。

关注

评论

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

农产品区块链溯源平台,区块链追溯系统

135深圳3055源中瑞8032

区块链电子合同平台,区块链电子合同技术方案

135深圳3055源中瑞8032

Postgreshub中文资源网介绍

PostgreSQLChina

数据库 postgresql 开源 软件 开源社区

懂点EXCEL就行!教你利用Python做数据筛选(上)

智分析

Python Excel 数据清洗

给新春一台S,给用户三个S:华为智慧屏的新旅程

脑极体

产品质量战略

俊毅

合肥智慧平安小区建设,平安社区整体解决方案

135深圳3055源中瑞8032

三面百度被吊打,凭借这份阿里大牛整理的资料,终拿下字节offer

Java成神之路

Java 程序员 架构 面试 编程语言

2020出行之变(三):智能交通的星罗棋布

脑极体

精选算法面试-哈希表III

李孟

面试 算法

甲方日常 89

句子

工作 随笔杂谈 日常

连肝7个晚上,总结了计算机网络的知识点!(共66条)

魔王哪吒

程序员 面试 浏览器 计算机网络 HTTP

boltdb源码阅读

行如风

go 数据库 源码剖析

产品思维和意识

让我思考一会儿

Logi-KafkaManager开源之路:一站式Kafka集群指标监控与运维管控平台

张亮

Java 大数据 kafka 开源 消息队列

最新Java精选题大厂之路没有拦路虎:Jvm+并发+Dubbo+微服务+缓存

Java成神之路

Java 程序员 架构 面试 编程语言

阿里巴巴十亿级并发系统设计手册已开源(2021最新版)

比伯

Java 编程 架构 面试 计算机

图解计算机中的数据表示形式

冰河

程序员 计算机 二进制数据

在nodejs中创建child process

程序那些事

多线程 事件驱动 nodejs 并发 程序那些事

Flink 中极其重要的 Time 与 Window 详细解析(深度好文,建议收藏)

五分钟学大数据

大数据 flink

产品经理训练营 - 第二次作业

Jophie

产品经理训练营

Vue.js笔试题解决业务中常见问题

魔王哪吒

程序员 面试 Vue 前端

第二周-总结-胡赵凯

hisun胡

产品经理 产品经理训练营

第二周-作业-胡赵凯

hisun胡

产品经理 产品经理训练营

勤学苦练两个月,读完这篇180页pdf文档的Java进阶资料,终于拿下阿里offer

Java成神之路

Java 程序员 架构 面试 编程语言

2021最新出炉BAT架构实战文档:多线程与高并发+分布式+微服务

Java成神之路

Java 程序员 架构 面试 编程语言

惊呆了!某东Java大咖的MySQL笔记手册流传出来了,胜过看10本书

Java架构之路

Java 程序员 架构 面试 编程语言

产品 0 期 - 第二周作业

vipyinzhiwei

产品经理训练营

范文写作结构分析之“危险的分工”

JiangX

28天写作

产品经理训练营第 0 期 第二次作业

孙行者

第0期 产品经理训练营

定阶阿里P7,搞透这份高级程序员Java面试1000题解析就够了

Java成神之路

Java 程序员 架构 面试 编程语言

JRuby编译器完工-InfoQ