C(P)ython或D中的跨平台GUI应用
我非常喜欢D(2)语言,想用它来开发跨平台的图形用户界面应用程序,但我发现它的生态系统还不够成熟。在我从Linux转到(Free)PC-BSD之后,我发现连64位的编译器在软件库里都没有,而且不确定像QtD、gtkD、wxD这些图形库是否适合用在严肃的项目上,我们希望尽快开始这个项目。
另一方面,之前有人建议我试试Python,因为它已经很成熟,有很多工具和图形库等等,但有人提到速度的问题——我们需要用一个C语言库来计算天文历,并且还要写几个库来使用这个C语言库。
不过,这可能是用Cython的好机会,所以我想问问你们的看法:是否可以在Python中写图形界面部分(用Qt或EFL),然后用Cython来处理性能要求高的部分(绑定外部C语言库和编写我们自己的库),而不是等D语言成熟到可以用在严肃项目上?
4 个回答
用一种动态语言来编写图形用户界面(GUI),然后用另一种语言来写对性能要求高的代码,这是一种很好的应用程序开发方式。比如,你可以用Python来实现这个方法,也可以很简单地用Tcl/Tk和其他一些脚本语言来做到。
这个问题对我来说很有趣,因为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中并不能“轻松高效”地工作。
作为Cython的核心开发者,我可能有点偏见,但我真的很推荐它。Cython和CPython的结合让你能达到一种很难实现的开发速度、平台稳定性、可移植性、底层编码能力和外部函数接口(FFI)功能,同时执行性能也很不错。你可以很轻松地从简单的代码优化到接近C语言速度的高效代码。
我还非常推荐Qt作为图形用户界面(GUI)工具包。它和Python配合得非常好。