什么是IronRuby?开发者如何在Rails中使用它?

Ruby分子的IronRuby

\

IronRuby是微软的Ruby实现,它以.NET架构良好的互动性闻名于世。Iron这个名字实际上是“Implementation running on .NET”的首字母缩写。.NET的公共语言运行时和Mono(非官方的)均能够支持IronRuby。你可以不必弄清楚某些关于动态语言运行的问题(例如在CLR之上的Ruby),这就是DLR(动态语言运行时)将要帮你解决的。DLR是微软作为在CLR之上提供动态语言支持能力的一种技术手段。

\

作为微软对开源软件做出的承诺中的一部分,IronRubyDLR可以在遵循微软公用许可证(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程序集的方法可以以两种形式在IronRuby中表示:熟悉的ruby小写形式(例如controls.add)和传统的C#驼峰形式(例如ToString)。由于Ruby并没有大多数.NET语言中的属性概念(CLR中是字段),所以在IronRuby中属性是以访问方法和存取方法(例如foo.bar()和foo.bar=(x))的形式存在。假设我们将以下C#命名空间和Person类编译成了一个MyClassLibrary.dll文件:

\
\namespace MyClassLibrary\{\    public class Person\    {\        public string Name { get; set; }\        public string Introduce()\        {\            return String.Format(\"Hi, I'm {0}\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值