GMTC北京站优惠购票最后一周!13个热点专题,50+大厂案例,这里一览 了解详情
写点什么

John Lam 如何评价 Ruby.NET 与 IronRuby 差异

  • 2008 年 1 月 10 日
  • 本文字数:1695 字

    阅读完需:约 6 分钟

最近,M. David Peterson 在 O’Reilly Network 发表了一篇名为《Ruby.NET 与 IronRuby:差别在何处》的文章。这篇文章引起了微软 IronRuby 项目的领导者——John Lam 的注意。John 在 David 文章后面跟贴,阐述了他自己对于 IronRuby 的一些观点。

David 在文章中对 Ruby.NET 和 IronRuby 进行了比较。关于 IronRuby,David 说:

* IronRuby 构建于动态语言运行时(DLR)之上。DLR 是 CLR 的一个扩展,致力于支持静态类型语言(如 C#)和动态语言(如 Ruby)之间的差异。

而对于 Ruby.NET 来说

* Ruby.NET 构建于 CLR 之上。考虑到 DLR 是 CLR 的一个扩展(换句话说,DLR 需要 CLR), IronRuby 和 Ruby.NET 在能力方面并没有根本性的差别。

John 解释了 DLR 为那些使用它的语言所带来的好处:

  • 共享的代码生成引擎。使用我们的代码生成 API 比 Reflection.Emit 更加简单,所以这为编译器实现者们节省了时间。这同时也意味着 DLR 在未来的性能提升会惠及那些基于 DLR 的语言。
  • 公共的宿主接口。我们扮演的是宿主与编程语言之间的中间人的角色。如果你编写的宿主程序面向 DLR,那么我们的编程语言(以及那些虽然不是我们编写的,但基于 DLR 的编程语言)不需要任何特别的努力就可以与你的程序协同工作。而我们的团队正在构建 Silverlight 和 ASP.NET 的宿主程序。

另一个随之而来的问题是,如果 CLR 已经赋予编程人员访问任意与 CIL 兼容语言的能力,那为什么还需要面向 DLR 进行工作呢。如果无法回答这个问题,那么很明显应该选择 Ruby.NET 而不是 IronRuby。

对此 David 提出了一个根本性的问题:

对于编程者来说,需要的到底是 CLR 所提供的强大语言互操作能力(这也是 Ruby.NET 的所长之一),还是 DLR 所提供的动态语言性能优势(这则是 IronRuby 的优点)?

John 进行了回复,解释了他的观点:

我不认为使用 DLR 会失去任何与现有基于 CLR 的语言族之间的互操作能力。虽然对于我们来说,到现有基于 CLR 的语言的动态分发机制确实还有很大的改进空间(你应该更愿意用 C#或 VB.NET 调用 Office API 吧?),但现在在 C#中调用 IronRuby library 代码应该没有什么障碍。只要你通过我们的宿主接口(hosting interfaces)进行,互操作就可以很好的工作。我不清楚对于像 Ruby 这样要求上下文环境的语言来说,如何能够在不传递上下文环境的情况下,保证在 C#中可以调用任意 Ruby.Net 代码。

David 同时说:

IronRuby 动态编译的特性使其更适合那些在编译过程中可预测的部分较少的程序,比如客户端应用。反之,对于服务器端这种可预测部分很多的程序来说,Ruby.NET 可能更加适合。

John 回复道:

Ruby.NET 采用了静态编译模型,其优点之一在于减少了冷启动时间。由于 Ruby.NET 的装配必须是 JIT(Just In Time)的,所以 Ruby.NET 仍然需要处理 CLR 的冷启动问题。而 IronRuby 则采用了生成 IL 和 JIT 代码的方法。我想暂时把这一讨论放下而说一点题外话。对于客户端应用来说,冷启动时间至关重要,而这也正是 Ruby.NET 的优势所在。我们曾经在 IronPython 中使用过一个 AOT 编译模型,但已经将其从的 DLR 1.0 的特性列表中去掉了。关于这一问题,我们会在 1.0 之后的版本中重新考虑。

David 这篇文章的原文已经在 John Lam 发表看法后进行了修改,不过文章仍然留下了几个没有回答的问题。关于 Ruby.NET 和 IronRuby,Ruby 开发者现在想知道的一个问题是什么时候 Ruby on Rails 可以在这两个平台上运行。据 Ruby.NET 社区的一名开发者称,在完成 Ruby 实现中的几个关键构件后,才能考虑在 Ruby.NET 上运行 Ruby on Rails。关于 IronRuby 是否会支持 Ruby on Rails 在其上运行,除了 John Lam 在 07 年 RubyConf 的表态外,尚无任何具体信息。而跟据 Seo Sanghyeon 的说法,融合 Ruby 和.NET 的最初工作是 RubyCLR,由 John Lam 所创建的一个项目。

当考虑在 IronRuby、Ruby.NET 和 RubyCLR 中进行选择时,会涉及许多问题。这些项目目前尚处于初期,因此如果你打算在.NET 平台上编写 Ruby 代码,密切关注这些项目是一个明智之举。

关于 IronRuby 的更多信息可以通过 IronRuby 网站和 John Lam 的个人blog 获得。

查**** 看英文原文: John Lam Responds to Ruby.NET vs. IronRuby

2008 年 1 月 10 日 00:34501
用户头像

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

关注

评论

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

LeetCode 781. Rabbits in Forest

liu_liu

LeetCode

一文带你看清HTTP所有概念

cxuan

HTTP

谈谈控制感(5):怎么破控制感损失的局

史方远

职场 心理 成长

不要做软件开发团队中打破窗户的那个人

程序员小岑

程序员 思考 感悟 软件开发 团队

LeetCode 513. Find Bottom Left Tree Value

liu_liu

LeetCode

职涯思考

Kevin Z

职业 思考 工程师思维 硬件 工程师

工作原则:决策要基于数据的支撑

Janenesome

高效工作 思考 原则

面试官:小伙子,听说你看过ThreadLocal源码?(万字图文深度解析ThreadLocal)

一枝花算不算浪漫

源码 并发编程 ThreadLocal

玄铁重剑,我用过最贵重的键盘

池建强

ipad 苹果 键盘

“我XXXX,还能学编程吗?”

三号无名指

编程 程序员 工具 入门

克服恐惧,勇于分享

孙苏勇

程序员 分享 工作

Rust 与区块链四月月刊

Aimee 阿敏

区块链 rust 加密货币 crypto

《零基础学 Java》 FAQ 之 6-Java里Bean这个名字怎么来的

臧萌

Java spring

Web3极客日报#141

谢锐 | Frozen

区块链 独立开发者 技术社区 Rebase Web3 Daily

修改网桥默认地址

奔跑的菜鸟

Docker

回“疫”录(18):536公里的路

小天同学

疫情 回忆录 现实纪录 纪实 返程

Java新技术:封闭类

范学雷

Java 架构 编程语言

Python3.6.1官方文档练习——初入江湖(二)

小匚

Mac 使用笔记

FeiLong

十大经典排序算法总结

淡蓝色

Java 算法 计算机基础 排序

Redis实现热卖商品排行榜

北漂码农有话说

redis

聊聊我对技术一些性质的认识

Tanzv

技术 思考 新人

程序员小白的个人思考

程序员小岑

程序员 职场 思考 感悟

Web3极客日报#129

谢锐 | Frozen

区块链 独立开发者 技术社区 Rebase Web3 Daily

VSCode 集成 Haskell 环境

liu_liu

vscode haskell hie Haskell Language Server

MySQL常用权限说明

一个有志气的DB

MySQL 用户研究

松哥手把手带你入门 Spring Security,别再问密码怎么解密了

江南一点雨

Java spring Spring Boot spring security

《零基础学 Java》 FAQ 之 5-如何在IntelliJ IDEA里配置JDK

臧萌

Java jdk intellij

webpack入门系列之二——插件使用及热更新打包

子铭

Web

要做医生,不要做卖药的

Janenesome

高效工作 思考 沟通

Android | Tangram动态页面之路(二)介绍

哈利迪

android

John Lam如何评价Ruby.NET与IronRuby差异_.NET_Robert Bazinet_InfoQ精选文章