Boo与IronPython的比较

26
在查看这两个项目后,它们似乎非常相似。它们都在CLI上运行,都有Python风格的语法,并且都使用.NET而不是标准的Python库。
那么,它们之间有哪些区别和各自的优势呢?
7个回答

25

我认为两者的主要区别在于,Boo是静态类型的,意味着变量的类型会在其首次赋值时被推断并固定下来,而IronPython具有正常Python代码的“真正”动态行为。

IronPython现在已经由Microsoft正式维护,并针对版本2.0中的新动态语言运行时。 我猜因为Boo是静态类型的,所以它可能会更快。 不过我没有太多“真正”的经验...

IronPython还重新实现了许多Python标准库,因此您可以在IronPython上运行许多Python软件而无需进行更改(例如Django)。


11
历史修正:如果有人在比较Boo和IronPython时误以为IronPython和IronRuby仍是微软的官方项目但错过了相关新闻,那么需要说明的是,从2010年8月左右起,IronPython和IronRuby已经不再是微软的官方项目。Jim Hugunin在2010年10月离开了微软。 - Andy Dent

14

Boo是静态类型语言,但也支持可选的鸭子类型(在我的经验中表现相当不错)。同时,Boo还特别设计为“手腕友好型”--换句话说,最大限度地减少了使用Shift键组合的需要。它在SharpDevelop中具有良好的IDE支持。

很明显,Boo从Python中获得了很多灵感,但也旨在充分利用.NET功能。

在性能方面,Boo感觉比IronPython稍微快一些,特别是没有IronPython明显的启动延迟。

Boo仍然是一种不成熟的语言,并且缺乏Python社区的支持。个人而言,我会对将其用于生产环境持谨慎态度。此外,我不同意它从Python中抛弃了显示self类属性等一些特性。


1
我从来不喜欢Python中的显式self...它有什么优点吗?(我真的很好奇) - mpen
1
显式的 self -- 主要体现在没有魔法和意外。它还让你做一些稍微邪恶但很酷的事情,比如 SomeClass.some_method(arbitrary_object_instead_of_self) - Ryan Ginstrom

11

我还没有使用过IronPython,但是关于Boo,这是我所知道的...

  • Boo受Python启发,有许多语法上的类似之处。有关差异,请参见http://boo.codehaus.org/Gotchas+for+Python+Users
  • Boo是专为CLR编写的。
  • 它是静态类型的,这有几个好处:
    • 它可以编译成DLL,并由VB和C#项目引用。
    • 你可以在IDE中使用代码完成功能。
  • 语言本身是可扩展的。你可以编写“语法宏”并向语言中添加新元素。这使得它成为编写DSL的良好选择。
  • 它尚未达到1.0版本,而IronPython已经发布了1.0版本。这门语言仍在经历成长的痛苦,但仍然非常实用。

我曾经使用Boo进行以下事情:

  • 脚本化计划任务。如果要访问.NET API,它是VBScript、BAT文件的极佳替代品。自那时以来,我大多数时间都已经转移到Powershell,但它只适用于特定操作系统,而且语法更重,因此我仍然使用Boo来完成一些任务。
  • 编写单元测试
  • 嵌入式脚本语言

你也可以在C#程序中调用IronPython函数等:http://blogs.msdn.com/b/charlie/archive/2009/10/25/hosting-ironpython-in-a-c-4-0-program.aspx - mpen


4

我曾经使用过Boo和IronPython编写应用程序。对我来说,IronPython是更加稳健的选择,我在CPython中编写的许多内容都可以直接移植而不需要进行修改。如果针对.Net Framework,所有最近的项目都是纯IronPython。

自从Jim“叛变”到Microsoft以后,IronPython已经成为一种顶级语言。甚至还有专门为其开发的Visual Studio。


1

我同意VolkA的观点。能够运行Django是很重要的。它是一个如此惊人的框架,Boo将很难重新制作它。今天,更多的是关于语言提供的框架,而不是它提供的结构。而Boo在支持的结构方面并没有比Python提供更多的改进。


除了它可以在 .NET 上运行外,还有一点很重要就是它可以在 .NET 上运行。作为主要使用 C# 的用户,这对我来说已经非常重要了。虽然我尝试过 Python 并且也喜欢它作为一门语言,但是重新学习它的库结构并不是我的乐趣所在。 - Matthew Scharley
你也可以在.NET上使用IronPython。 - Anders Rune Jensen

0

在我看来,主要的区别是IronPython是成熟语言的实现 - 而Boo则较年轻且知名度较低。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接