我可以把IronPython当作C#的Python替代品吗?
我知道这个话题在StackOverflow上已经讨论过,但我还是搞不清楚一个具体的问题:我能把IronPython当作C#的一个Python替代品吗?
我每天都在用CPython,我很喜欢这种编程风格 :) 但是我现在的任务是做一个只在Windows上运行的应用程序,这个程序有一个复杂的图形界面和一些其他功能,我想用.NET来实现这些功能。
6 个回答
有一点需要考虑的事情是,我对IronPython在这方面的表现并不清楚,那就是关于公共语言运行库(CLS)的兼容性。CLS兼容性确保任何.Net语言都可以访问你代码编译后的DLL文件。这意味着,比如在C#中,你不能有任何公共或保护的方法或参数是无符号整数。我不知道在IronPython中实现CLS兼容代码有多简单,我找到的一篇有趣的博客文章是2008年的。
这要看你对C#的需求是什么,以及你想替换的是什么。
如果你使用C#是因为需要一种性能不错的静态类型语言,那么IronPython可能不适合替代它。
如果你使用C#的原因只是因为“我需要一个能在.NET上运行并且可以访问.NET库的东西”,那么任何在.NET上运行的语言都可以替代它。
如果你用C#是因为你和一群只懂C类语言的程序员一起工作,那么用IronPython来替代C#可能会有点困难。
这完全取决于你对C#的哪些特性比较看重,以及你需要找到什么样的替代品。
IronPython 并不等同于“其他在 .NET 上运行的语言”,因为它支持的 CLR 运行时功能要少得多。
IronPython 的类并不是“真正的” .NET 类,当你想从传统的 CLR 语言调用 IronPython 代码时,需要使用 DLR 的 API;这意味着如果你想要真正简单的互操作性,你就得写一些代码来“隐藏” DLR。
Boo 是一种更完整的、受 Python 启发的语言,专门针对 CLR。它的静态类型(可以根据需要用鸭子类型替代)也允许用 Boo 写的库可以直接在 C# 和其他 CLR 语言中使用,而不需要对使用的语言做任何特别的处理。