2

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

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

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

Ruby 是否已在任何知名的桌面应用程序中使用过?以前有这样做过吗?

4

3 回答 3

2

这是可能的,尽管我对您概述的方法有点警惕:例如,IronRuby 还不是 1.0。

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

其他特定于平台的东西可能应该被抽象/封装在某种包装器/外观/api/代理后面(选择你的模式)。

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

在这个 SO question中有更多讨论(包括 Python,这是另一种选择)

于 2009-11-19T09:26:48.440 回答
2

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

然后以我的拙见,使用 ruby​​ 和三种风格(jRuby、IronRuby 和 MacRuby)会导致更多的维护问题。您必须了解或至少在所有三个平台上雇用有经验的开发人员,并且您将花费大量时间创建真正抽象的代码,除非您打算使用 ruby​​ 仅用于数据库访问。

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

于 2009-11-18T22:47:21.400 回答
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 相同。

于 2009-12-29T19:35:29.050 回答