5

我很好奇 .NET 将如何影响 Python 和 Ruby 应用程序。

用 IronPython/IronRuby 编写的应用程序是否会如此特定于 .NET 环境,以至于它们本质上会变成特定于平台的?

如果他们不使用任何 .NET 功能,那么 IronPython/IronRuby 与非 .NET 对应物相比有什么优势?

4

7 回答 7

5

关于 IronRuby,我不能说什么,但大多数 python 实现(如 IronPython、Jython 和 PyPy)都尽可能地忠实于 CPython 实现。IronPython 正在迅速成为这方面最好的之一,Planet Python 上有很多关于它的流量。

鼓励开发人员编写不同于他们在 CPython 中编写的代码的主要因素是缺少像 NumPy 这样的 C 扩展模块(这在 Jython 和 PyPy 中也是一个问题)。

IronClad 是一个值得关注的有趣项目,它可以让您从 IronPython 中调用 C 扩展模块。这最终应该意味着您可以在 CPython 下开发代码,使用您喜欢的任何模块,并且它将在 IronPython 上运行而无需修改。

http://www.resolversystems.com/documentation/index.php/Ironclad

所以回答你的问题:

编写在 CPython 上也可以运行的 IronPython 应用程序应该很容易,但我可能打算反过来:也可以在 IronPython 上运行的 CPython 程序。那样的话,如果它不起作用,那么它更有可能是一个已知的错误,具有已知的解决方法。

IronPython 等现有的优点是它们提供了该语言的替代实现,这有时对于发现 CPython 中的错误很有用。它们还提供了部署 Python 应用程序的替代方法,如果由于某种原因您发现自己处于不适合将 CPython 实现与您的应用程序一起分发的情况(如 silverlight)。

于 2009-01-24T12:23:04.313 回答
2

用 IronPython/IronRuby 编写的应用程序是否会如此特定于 .NET 环境,以至于它们本质上会变成特定于平台的?

IronRuby 目前附带大部分核心 ruby​​ 标准库,并支持 ruby​​ gem。

这意味着它将支持几乎所有不依赖 C 扩展的原生 ruby​​ 应用程序。
另一方面,可以在 IronRuby 中编写不依赖 CLR 的原生 ruby​​ 应用程序,并且这些应用程序可以移植到 MRI。

人们是否选择使用 CLR 为他们的应用程序创建或使用扩展与人们是否为 MRI 创建或使用 C 扩展是同一个问题——一个并不比另一个更便携。

有一个附带问题“因为在 C# 中创建 IronRuby 扩展比在 C 中创建 CRuby 扩展要容易得多,人们会在应该坚持使用原生 ruby​​ 代码的地方创建扩展吗?” ,但这完全是主观的。

但总的来说,我认为任何使创建扩展更容易的东西都是一个巨大的胜利。


如果他们不使用任何 .NET 功能,那么 IronPython/IronRuby 与非 .NET 对应物相比有什么优势?

  1. 性能:IronRuby 在大多数情况下已经比 MRI 1.8 更快,并且与 MRI 1.9 相差不远,而且未来只会有所改善。我认为python在这方面是相似的。

  2. 部署:正如人们所提到的,在 IIS 中运行本机 ruby​​ 跨平台 Rails 应用程序对一些基于 Windows 的开发人员来说是一个有吸引力的提议,因为它可以让他们更好地与现有服务器/管理基础架构/等集成

  3. 稳定性:虽然 MRI 1.9 比 1.8 好得多,但我认为没有人会不同意 CLR 具有比 C ruby​​ 更好的垃圾收集器和基本运行时。

于 2009-08-16T22:16:17.737 回答
1

IronPython/IronRuby 是为在 .net 虚拟机上工作而构建的,因此它们本质上是特定于平台的。

显然,只要您在程序中不使用任何 .net 框架,它们就与 Python 和 Ruby 兼容。

于 2009-01-21T20:51:04.803 回答
1

如果您创建了一个库或框架,人们可以在 .NET 上通过他们的 .NET 代码使用它。这对他们来说很酷,对你来说也很酷!

在开发应用程序时,如果您放弃使用 .NET 的工具,那么您将失去“跨平台性”,这并不总是一个问题。

如果您使用内部 API 包装这些用途,您可以稍后将 .NET 实现替换为纯 Python、包装的 C(对于 CPython)或 Java(对于 Jython)。

于 2009-01-21T21:41:33.377 回答
1

根据 Mono 页面,IronPython 与 Mono 的 .Net 运行时实现兼容,因此可执行文件应该可以在 Windows 和 Linux 上运行。

于 2009-01-21T22:50:17.607 回答
0

你用第二个问题回答你的第一个问题,如果你不使用.Net中的任何东西,只使用语言实现提供的原始库,你可以用另一个实现来解释你的 *.py 或 *.rb 文件,它应该工作。

好处是,如果您的 .Net 商店通常会负责在客户端机器上安装正确的框架等...好吧,如果您想要 python 或 ruby​​ 代码,您现在需要支持另一个“框架”需要分发安装,处理版本问题等......所以有两个优点,在另一种语言中使用.Net框架功能+保持分发/维护尽可能简单。

于 2009-01-21T21:12:41.313 回答
0

在 IIS 下运行 Rails/Django 而不是 Apache/Mongrel 类型的解决方案会很酷

于 2009-01-21T21:21:19.937 回答