什么是 IronRuby?开发者如何在 Rails 中使用它? 作者 Edd Morgan 译者 杨晨 发布于 2010 年 7 月 16 日 领域 语言 &; 开发 主题 .NET , 动态语言 , 语言 , Ruby 标签 Azure , DLR , SQLite , RubySpec , RubyGems , Mono , Windows Azure , IronRuby , CLR , Rails , IIS 分享 Share | Ruby 分子的 IronRuby IronRuby 是微软的 Ruby 实现,它以.NET 架构良好的互动性闻名于世。Iron 这个名字实际 上是 “Implementation running on .NET” 的首字母缩写。 .NET 的公共语言运行时和 Mono (非 官方的)均能够支持 IronRuby。你可以不必弄清楚某些关于动态语言运行的问题(例如在 CLR 之上的 Ruby) ,这就是 DLR(动态语言运行时)将要帮你解决的。DLR 是微软作为在 CLR 之上提供动态语言支持能力的一种技术手段。 相关厂商内容 ActionScript 3 基本原理:函数 Pycon 2011 China12 月 3-4 日上海 ActionScript 3 基本原理:数值和数学 Flash Builder 4.5 高级版试用版
免费高速下载 ActionScript 3 基本原理:软件包 相关赞助商
阿里云 100 万重金招募开发者。 作为微软对开源
软件做出的承诺中的一部分,IronRuby 和 DLR 可以在遵循微软公用许可证 (Microsoft Public License)的前提下分别从 GitHub 和 CodePlex 中获得。从设计之初, IronRuby 的目标就是成为 Windows 平台上 Ruby 实现的首选, 而它自然也提供了良好的兼容 性和优异的性能。在撰写本文的时候,IronRuby 在 RubySpec 的通过率已经能够达到 86%。 反过来让我们看看 MRI,它的通过率是 98%。虽然通过率尚有不足,但是从测试上来看, IronRuby 的性能要比 MRI 1.8 优异许多 (高出四倍以上) 这个测试结果是 Antonia Cangiano , 运行他的 Ruby 测试套件之后给出的。 不仅仅拥有良好的兼容性和优异的性能, IronRuby 的杀手锏是它和.NET 标准库以及.NET 程 序集(assembly)之间良好的互动能力。仅仅只需一条‘require’语句,你就可以在 Ruby 代码中使用.NET 架构和类。这个重要的功能就这样“自动”地在 Ruby 标准库的基础上被 引入到 IronRuby 代码中。require 后面可以跟任何.NET 程序集的名字。让我们在 Ruby 中创 建一个 Windows Form,来看看 Ruby 和.NET 是如何无缝集成的: require 'System.Windows.Forms' System::Windows::Forms::Form.new.show 运行 ir(IronRuby 解释器) ,你将会在屏幕上看到一个标准的 Windows Form!虽然只是一个 空的 Form, 但是仅仅两行代码你又能期望多少呢?这里的代码之美就在于它需要比 C#或者 VB 用更少的代码完成相同的事情。可以想象得到,你还能够程式化地向这个新的 Form 中 加入一些控制逻辑: require 'System.Windows.Forms' form = System::Windows::Forms::Form.new lbl = System::Windows::Forms::Label.new lbl.text = "foo" form.controls.add(lbl) form.show 比较静
态语言和动态语言的代码是非常困难的事情,但是,我们可以先看看上面的代码在 C#中应该是什么样子的: using System; using System.Windows.Forms; namespace MyWinFormsApplication { static class Program { static void Main() { Form form = new Form();
Label lbl = new Label(); lbl.Text = "foo"; form.Controls.Add(lbl); form.Show(); } } } 有一些.NET 框架经验的开发者将会意识到,C#或者
VB 程序中的对象一旦编译之后就是作 为 CLR 对象存在。也就是说,任何能够和.NET CLI(公共语言基础架构)良好互动的程序 都可以访问这些对象。这个特点允许开发者能够应付在 VB、C++或者甚至是 PowerShell 中 的 C#类和方法(反之亦然) 。.NET 代码不会被编译成本地代码,而是转换成为一种可以称 为 CIL(公共中间语言)中间语言。不幸的是,CIL 是静态类型语言,不过,正如我之前在 介绍中提及的那样,这就是 DLR 如何能够提供 CLR 和例如 Ruby 这样动态语言交互能力的 关键所在。 .
NET 程序