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

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();
     }
   }
}

时间: 2024-11-01 09:28:21

什么是IronRuby?开发者如何在Rails中使用它?的相关文章

请教如何在rails中发送邮件时指定多个收件人

问题描述 class UserMailer < ActionMailer::Base def post_article(users, article) recipients users.map(&:email).join(',') endend 上面这样子不行,不知道为何 解决方案 要用 Array去掉.join(',')

如何在rails开发环境中取得上下文路径

问题描述 如何在rails开发环境中取得上下文路径下面是C#的写法string contextPath = Request.ApplicationPath;求教谢谢!先 解决方案 使用RAILS_ROOT常量解决方案二:查看一下environment.rb就知道了

如何在JSP中处理中文

js|中文 如何在JSP中处理中文 在一个Web应用中经常需要向服务器传递一些参数,一般通过form向服务器发送一个POST请求.在参数中有可能包含中文信息,如用户信息登记.购物定单中的地址信息等等.参数字符串一般用本地字符集进行编码,如中文采用GB2312或GBK字符集,英文或西欧文字采用ISO8859_1字符集,但在Java程序中一律采用Unicode处理字符串,这就需要有一个编码转换的过程.不幸的是,现有的大部分Java应用服务器都是在英语国家开发出来的,由于缺乏大字符集(中文.日文.韩文

利用Rails中Rake管理MySQL数据库

作为一名优秀的程序员,除了编写大量的程序外,创建大量的数据库也是在所难免的.在过去的几年中,笔者曾经创建和管理了大量的MySQL数据库,在这个过程中曾使用各种工具来进行管理,以便使它的过程更简单,例如首选的图形化管理工具PHPMyAdmin,以及基于命令行的MySQL clent,它们都非常好用.但是,在笔者内心身处始终觉得,我们是一名程序员,而不是一名数据库管理员,总感觉编程和数据库管理之间有些跨越.为什么不用与编程相同的方式来管理数据库结构呢?自从开始使用Rails,终于找到了答案.通过Ra

如何在Rails和Grails之间做选择?

自从Rails和Grails进入人们的视野以来,有关Rails和Grails之间的各种比较就没有停止过. 最近Stephan在其博客上给出了Rails和Grails的工作趋势图.从Rails和Grails工作趋势图中可以看出,Rails正处于快速上升期,Grails上升的趋势相对较缓. 但是他并没有对此图作出过多评论,正如他所说:"如果你想对这一趋势加以评论,我看还是免了吧.已经有很多相关讨论了,每个人都各持己见". 从另一个张图--Google趋势图,我们可以看看人们对Rails和G

如何在Ruby中编写微服务?

[编者按]本文作者为 Pierpaolo Frasa,文章通过详细的案例,介绍了在Ruby中编写微服务时所需注意的方方面面.系国内 ITOM 管理平台 OneAPM 编译呈现. 最近,大家都认为应当采用微服务架构.但是,又有多少相关教程呢?我们来看看这篇关于用Ruby编写微服务的文章吧. 人人都在讨论微服务,但我至今也没见过几篇有关用Ruby编写微服务的.像样的教程.这可能是因为许多Ruby开发人员仍然最喜欢Rails架构(这没什么不好,Rails本身也没什么不好,但是Ruby可以做到的事还有很

如何在Linux中列出通过RPM或者DEB包安装的文件

你是否想要了解安装包中各个文件在 Linux 系统中安装(位于)的位置?我们将在本文介绍如何列出文件的来源,或存在于某个特定包或者一组软件包中的文件. 这篇文章可以帮你轻松地找到重要的软件包文件,如配置文件.帮助文档等.我们来看看找出文件在哪个包中或者从哪个包中安装的几个方法: 如何列出 Linux 中全部已安装软件包的文件 你可以使用 repoquery 命令,它是 yum-utils 的一部分,用来列出给定的软件包在 CentOS/RHEL 系统上安装的文件. 要安装并使用 yum-util

如何在React中做到jQuery-free

前言 前些天在订阅的公众号中看到了以前阮一峰老师写过的一篇文章,「如何做到 jQuery-free?」.这篇文章讨论的问题,在今天来看仍不过时,其中的一些点的讨论主要是面向新内核现代浏览器的标准 DOM API,很可惜的是在目前的开发环境下,我们仍然无法完全抛弃 IE,大部分情况下我们至少还要兼容到 IE 8,这一点使我们无法充分践行文章中提到的一些点,而本文也正是首次启发,顺着阮老师文章的思路来讨论如何在 React 中实战 IE8-compatible 的 jQuery-free. 首先我们

如何在IDE中使用Docker

本文讲的是如何在IDE中使用Docker,[编者的话]这是一个新颖的想法,在码农的IDE环境中,若是可以很方便地使用Docker,真是一件很有意思的事:对Dockerfile或者Compose YML文件进行语法高亮.自动补全.语法验证,甚至还可以直接在IDE中启动这个Docker容器来进行更深入的测试或者开发.让懒惰的程序员们可以更高效地利用时间,专注于解决应用本身的问题.有兴趣的小伙伴,可以搜搜有没有更好的可以分享分享,或者帮助社区写另一个优秀的工具出来. 这个博客帖子是关于如何集成Dock