12

我确实知道 StackOverflow 已经以某种方式涵盖了这个主题,但我仍然无法找出确切的答案:我可以将 IronPython 视为 C# 的 Pythonic 替代品吗?

我每天都使用 CPython,我喜欢 Zen :) 但我目前的任务是一个仅限 Windows 的应用程序,它具有复杂的 GUI 和一些我想使用 .NET 实现的其他功能。

4

6 回答 6

13

IronPython 不等同于“在 .NET 上运行的其他语言”,因为该语言支持的 CLR 运行时特性要少得多。

IronPython 类不是“真正的”.NET 类,从传统的基于 CLR 的语言调用 IronPython 代码时需要使用DLR API;这意味着,如果您想要真正简单的互操作性,您将不得不编写胶水来“隐藏”DLR。

Boo是针对 CLR 的更完整的受 Python 启发的语言。它的(动态可推断的)静态类型(可以逐个变量地用鸭子类型代替)还允许用 Boo 编写的库在 C# 和其他基于 CLR 的语言中本地使用,而无需为使用的语言。

于 2010-04-11T17:24:06.190 回答
10

这取决于您需要什么关于 C# 的内容,以及需要替换的内容。

如果您使用 C# 的原因是您需要一种相当高性能的静态类型语言,那么不,IronPython 可能不会成为替代品。

如果您使用它的原因仅仅是“我需要在 .NET 上运行并且可以访问 .NET 库的东西”,那么是的,任何在 .NET 上运行的语言都可以用来替换它。

如果您使用 C# 是因为您与一群只了解类 C 语言的程序员一起工作,那么 C# 也可能难以用 IronPython 替代。

这取决于您关心 C# 的哪些特性,并且需要寻找替代品。

于 2010-04-11T12:42:46.497 回答
2

需要考虑的一件事——我不知道 IronPython 在这方面的表现如何——是程序集的公共语言子系统 (CLS)合规性。CLS 合规性保证任何 .Net 语言都可以访问代码的已编译 DLL。这意味着例如在 C# 中,您不能有任何公共或受保护的方法或参数是无符号整数。我不知道在 IronPython 中实现符合 CLS 的代码有多么容易,这是我在 2008 年发现的一个有趣的博客条目。

于 2010-04-11T12:55:33.687 回答
1

问题“我可以将 IronPython 视为 C# 的 Pythonic 替代品吗?” jalf 已经回答得很好。如果问题是“IronPython 是一种 Pythonic .NET 语言吗?” 但是,那么答案绝对是肯定的。禅宗的原则 - 特别是。最不意外 - 绝对适用于 IronPython 与 CLR 的集成。

于 2010-04-11T17:15:35.850 回答
0

我认为如果你这样做,在 .NET 4.0 中会更容易。

我认为您可以使用新发布的 IronPython 2.6.1 for .NET 4.0,

在 IronPython 中使用 C# 已经很容易了。

正如您在此处看到的,您可以通过 .NET 4.0 轻松地反过来(使用来自 C# 的 IronPython)。

我认为这是可能的,但我同意 Boo 是一种更安全的方式。

于 2010-04-13T02:33:55.277 回答
0

“复杂”的 UI 通常不需要“编写”它,而是通过点击在 Visual Studio 中构建它。所有的回调和事件代码都是自己插入的。在 python 方面几乎没有类似的东西。我会说直接选择C#。

不过,有一件烦人的事。如果您是真正的 Pythonista,那么静态类型会非常快速地接触到您,并且您会想要开始向随机的人扔重物。

如果到了这一点,请考虑使用 C# 构建 UI,并将 IronPython 作为脚本引擎嵌入来实现您的业务逻辑。这可能是一个可以容忍的中间立场。

于 2010-06-15T05:05:13.140 回答