【问题标题】:How will Python and Ruby applications be affected by .NET?.NET 将如何影响 Python 和 Ruby 应用程序?
【发布时间】:2009-01-21 20:43:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net python ruby ironpython ironruby


    【解决方案1】:

    我不能说 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)。

    【讨论】:

      【解决方案2】:

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

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

      这意味着它将支持几乎所有不依赖 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​​ 更好的垃圾收集器和基本运行时。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 根据 IronPython 常见问题解答 (codeplex.com/IronPython/Wiki/…),您可以访问 CPython 库,这让我想知道 IronPython 应用程序将使用哪种库。
        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

              • 负载平衡 apache + 多个 mongrels 有点笨拙。能够在 JSP 和 ASP 等真正的应用服务器中运行 rails 非常引人注目
              猜你喜欢
              • 2021-06-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-07-26
              • 2011-04-08
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多