gou*_*our 3 python user-interface d cpython cython
我非常喜欢D(2)语言,并希望将它用于多平台GUI应用程序,但我发现它的生态系统还没有完全发展.从Linux迁移到(Free)PC-BSD之后,我发现在端口中甚至没有准备好64位编译器,并且不确定是否有任何GUI库(QtD,gtkD,wxD)已准备好用于严肃的项目,我们希望尽快开始项目.
Otoh,我之前被推荐尝试使用Python,这是成熟的,有很多工具,GUI库等等但是有关于速度的问题 - 我们必须使用一个C lib来计算Ephemeris并编写几个可以使用该C-lib的库.
然而,对于Cython来说这可能是一个很好的(完美的)工作,所以我的问题是你如何考虑在Python(Qt,EFL)中编写GUI部分并使用Cython来处理性能关键的东西(绑定外部C lib并编写我们自己的图书馆)而不是(等待)D为严肃的项目做好准备?
这对我来说是一个有趣的问题,因为D是我最喜欢的编程语言,Python是我的第二喜爱.现在,就像我喜欢D一样,我不得不承认生态系统有点不成熟.
GtkD已经为相当严肃的项目做好了准备,但是并不完全符合其他语言的GUI工具包的标准,特别是在文档方面.我用它作为绘图库并且它工作得很好,但有一些小的打嗝.DWT最近刚刚增加了对D2的支持.AFAIK WxD只是一个绑定,而不是D-ified包装器.QtD仍然有一些杂项问题,比如要求修补编译器用于某些功能.通常,您现在可以在D2中执行GUI项目,但它不会完全顺利.
虽然Cython是一个很好的尝试来缓解纯Python的缓慢,但它有一些重要的弱点,当我需要性能或能力做低级工作时,我更喜欢D:
如果您期望从中获得类似C的性能,则它需要显式类型声明.如果您尝试编写通用代码,则会显着降低性能.使用D,您可以使用模板轻松编写高效的通用代码.
Cython没有/没有正确实现使Python变得有趣的一些很酷的功能.例如,它最近才获得对闭包的支持.我不知道这种情况有多快改善或者还有其他限制.
如果涉及线程,您仍然拥有Python的全局解释器锁.
必须使用Cython和常规的CPython解释器并将Cython代码保存在与常规Python代码不同的模块中,这感觉有点笨拙.语言之间的界面通常存在摩擦,特别是如果您关心效率.例如,Numpy类型在Cython中不能"正常工作".
小智 5
我显然对Cython核心开发人员有偏见,但我当然可以推荐它.CPython和Cython的结合提供了难以达到的开发速度,平台稳定性,可移植性,低级编码和FFI功能以及执行性能,包括从C语言快速简单到高度调优的代码的非常简单的优化路径速度.
我也可以热烈推荐Qt作为GUI工具包.它与Python的效果非常好.