使用Native工具包进行跨平台开发的Ruby的可行性?

时间:2009-11-18 22:26:38

标签: .net ruby cross-platform ironruby macruby

假设我正在编写一个封闭的商业软件,该软件将在以下情况下部署:基于.Net构建的Windows桌面应用程序,ActiveX控件,Windows Netscape插件,基于Cocoa构建的Mac桌面应用程序,Mac Netscape插件,在浏览器中托管的Java applet。在共享Ruby源文件中编写我的模型和控制器类并使用MacRuby,IronRuby和JRuby集成到各种运行时中,在代码共享方面是否可行?我的视图类可能会被编写为在Windows上使用WPF,在Mac上使用Cocoa以及在Java上使用什么(SWT?)。

从我的观点来看,这里最重要的是代码库的长期维护,看起来Ruby似乎已经成为我必须针对的三个平台上的第一类语言:.Net,Cocoa和Java一样,任何语言。我错了吗?

第二重要的是避免对我们的代码提出任何病毒许可要求。我看到JRuby在各种许可证下发布的地方;我是否可以假设我可以分发二进制文件,并且许可证不适用于我为自己的应用程序编写的任何Ruby文件(而不是对其框架的修改。)

Ruby是否已用于任何知名的桌面应用程序?这是在以前完成的吗?

3 个答案:

答案 0 :(得分:2)

嗯....如果问题是“如何使用Ruby创建可维护的产品并使其可用于所有这些端点(基于Web,桌面和基于Java的移动设备)?”

然后以我的拙见,使用ruby和三种口味(jRuby,IronRuby和MacRuby)会导致更多的维护问题。您必须了解或至少聘请所有三个平台上经验丰富的开发人员,并且您将花费大量时间创建真正抽象的代码,除非您计划仅使用ruby进行数据库访问。

你可能最好不要使用其中一个平台(Java和jRuby可能是最便携的选项)并使用其各种打包选项来分发产品。

答案 1 :(得分:2)

虽然我对你所概述的方法有点警惕,但这是可能的:例如,IronRuby还不是1.0。

您是否期望在UI之外进行大量特定于操作系统的工作?如果没有,那么我首先看一下WxRuby,它是跨平台WxWidgets库的(相当薄的)包装器。不要太努力寻找Ruby包装器的良好文档,顺便说一下 - 痛苦的经历教会我看一下示例代码,这实际上非常全面。

其他平台特定的东西应该被抽象/封装在某种包装器/ facade / api / proxy之后(选择你的模式)。

你说“闭源” - 你是否在Ruby环境中有策略?虽然至少有一些我见过的工具(ruby2exe和RubyScript2exe),但我不知道你的Ruby代码实际上是多么隐藏。它是否需要是一个独立的,部署的可执行文件,还是基于浏览器?这样可以解决所有跨平台问题(尽管您可能会先面向跨浏览器运行)。

this SO question

中还有一些讨论(包括Python,这是另一种选择)

答案 2 :(得分:2)

  

在代码方面是否可行   分享写我的模型和   共享Ruby中的控制器类   源文件并使用MacRuby,IronRuby   和JRuby融入   各种运行时间?

您可以在三种不同的实现之间共享Ruby代码;它们都是非常兼容的Ruby实现。请记住,JRuby和IronRuby的目标是Ruby 1.8.6,JRuby也开始使用1.9功能,而MacRuby仅支持1.9。

您需要三个实现之间不共享的特定于平台的部分,因为只有JRuby才能与SWT,IronRuby和WPF等进行通信。

  似乎Ruby就像接近一样   作为一流的语言   我必须针对的三个平台:   .Net,Cocoa和Java,就像任何语言一样

三个Ruby实施已经建立,得到了不断增长的社区的支持,并得到了成熟公司的支持。虽然Ruby不是任何平台上的主要推动语言,但是没有一个实现具有使得使用Ruby变得不可能的主要限制,尽管你可能需要使用少量的C#/ Java / Objective-C来处理某些事情。

  我是正确的,我认为我可以分发   二进制文件和许可证不适用   我为自己编写的任何Ruby文件   申请(相对于   修改他们的框架。)

嗯,您需要自己阅读许可证才能做出决定,或者询问您认识的律师。话虽这么说,只要没有任何许可证是“病毒式”的,就像GPL一样,你应该可以随意分发你的应用程序,并使用Ruby实现的二进制文件和许可证,并决定你的应用程序将使用的任何许可证,如以及你是否收钱。但同样,如果你担心合法性,请问律师。

  

Ruby是否已被广泛使用   桌面应用?这是这样吗?   以前做过吗?

我不知道任何使用Ruby的广泛使用的桌面应用程序,但我知道有几个在Windows上使用IronPython的应用程序,例如BlazeResolver One;他们的部署方法与IronRuby相同。