我非常喜欢D(2)语言,并希望将其用于多平台GUI应用程序,但我看到它的生态系统还不太发达。在从Linux迁移到(免费)PC-BSD之后,我看到甚至没有64位编译器在端口中准备好,人们不确定是否有任何GUI库(QtD, gtkD, wxD)准备好进行严肃的项目,我们希望尽快开始项目。
Otoh,之前有人建议我尝试使用成熟的Python,它有很多工具,GUI库等,但速度有问题——我们必须使用一个C库来计算星历,并编写几个库来使用该C库。
然而,这对Cython来说可能是很好的(完美的)工作,所以我的问题是,你认为用Python (Qt,EFL)编写gui部分并使用Cython进行性能关键的工作(绑定外部C库和编写我们自己的库),而不是(等待)D为严肃的项目做好准备?
作为Cython核心开发人员,我显然有偏见,但我当然可以推荐它。CPython和Cython的结合提供了难以达到的开发速度,平台稳定性,可移植性,低级编码和FFI功能以及执行性能,包括一个非常容易的优化路径,从快速和简单到高度调优的C速度代码。
我也可以热情地推荐Qt作为GUI工具包。
这对我来说是一个有趣的问题,因为D语言是我最喜欢的编程语言,Python是我第二喜欢的。现在,尽管我很喜欢D,但我不得不承认这个生态系统有些不成熟。
GtkD已经为相当严肃的项目做好了准备,但还没有完全达到其他语言的GUI工具包的标准,特别是在文档方面。我用它作为一个绘图库,它工作得很好,但有一些小问题。DWT最近刚刚增加了对D2的支持。我想WxD只是一个绑定,而不是一个d化的包装器。QtD仍然有一些杂项问题,比如某些功能需要打补丁的编译器。一般来说,你现在可以在D2中做一个GUI项目,但它不会完全一帆风顺。
虽然Cython是一个很好的尝试来缓解纯Python的缓慢,但它有一些明显的弱点,当我需要性能或做低级工作的能力时,我更喜欢D:
-
如果你希望得到类似c语言的性能,它需要显式的类型声明。如果您尝试编写泛型代码,您将付出很大的性能损失。使用D,您可以通过使用模板非常容易地编写高效的泛型代码。
-
Cython没有/没有正确实现一些使Python有趣的很酷的特性。例如,它最近才获得对闭包的支持。我不知道这种情况改善的速度有多快,也不知道还有什么其他限制。
-
如果涉及到线程,你仍然有Python的全局解释器锁。
-
必须同时使用Cython和常规CPython解释器,并将Cython代码与常规Python代码分开放在不同的模块中,感觉有点笨拙。这两种语言之间的界面通常存在摩擦,尤其是在您关心效率的情况下。例如,Numpy类型在Cython中并不"仅仅工作"。
用动态语言编写GUI,用另一种语言编写性能敏感的代码是编写应用程序的好方法。这可以在Python中完成,也可以在Tcl/Tk和其他一些脚本语言中轻松完成。
嗯,这是一个典型的用例,只是用C/c++或任何可以链接到C模块的语言编写数字处理代码,然后用脚本语言轻松添加非性能关键的东西。Python C接口可以使用SWIG,甚至手动编写绑定代码也不是太难(除非你谈论线程并需要处理cpython愚蠢的GIL…)。