我可以将IronPython视为C#的Pythonic替代品吗?

时间:2010-04-11 12:38:26

标签: python .net ironpython cpython python.net

我确实理解这个主题已在StackOverflow中以某种方式涵盖,但我仍然无法弄清楚确切的答案:我可以将IronPython视为C#的Pythonic替代品吗? / p>

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

6 个答案:

答案 0 :(得分:13)

IronPython并不等同于“在.NET上运行的其他语言”,因为该语言支持更少的CLR运行时功能。

IronPython类不是“真正的”.NET类,并且在从传统的基于CLR的语言调用IronPython代码时需要使用DLR API;这意味着,如果你想要真正简单的互操作性,你就会被粘贴在“隐藏”DLR上。

Boo是一种更加完整的以Python为灵感的语言,面向CLR。它的(动态可推断的)静态类型(可以逐个变量地替换为duck)也允许用Boo编写的库本地使用来自C#和其他基于CLR的语言,而不需要为正在使用的语言。

答案 1 :(得分:10)

这取决于您需要哪些C#,哪些需要更换。

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

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

如果您使用C#是因为您正在与只懂C语言的程序员团队合作,那么C#可能也难以替换为IronPython。

这取决于你关心的C#的特性,并且需要找到替代品。

答案 2 :(得分:2)

要考虑的一件事 - 我不知道IronPython在这方面的表现如何 - 对于程序集是Common Language Subsystem (CLS)合规性。 CLS合规性保证任何.Net语言都可以访问代码的已编译DLL。这意味着例如在C#中,您不能拥有任何无符号整数的公共或受保护方法或参数。我不知道在IronPython中实现符合CLS的代码是多么容易,我在2008年找到了interesting blog entry

答案 3 :(得分:1)

问题“我可以将IronPython视为C#的Pythonic替代品吗?” jalf已经很好地回答了问题。如果问题是“IronPython是否是Pythonic .NET语言?”但是,答案肯定是肯定的。禅宗的原则 - 尤其是最少惊喜 - 绝对适用于IronPython与CLR的集成。

答案 4 :(得分:0)

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

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

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

正如您所看到的here,您可以轻松地使用.NET 4.0(使用C#中的IronPython)来实现。

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

答案 5 :(得分:0)

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

但有一件令人讨厌的事情。如果你是真正的Pythonista,那么静态输入会很快得到你,你会想要开始向随机的人扔重物。

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