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