4

我真的很喜欢 D(2) 语言,并希望将它用于多平台 GUI 应用程序,但我发现它的生态系统还不够发达。从 Linux 迁移到(免费)PC-BSD 后,我看到端口中甚至没有准备好 64 位编译器,并且不确定是否有任何 GUI 库(QtD、gtkD、wxD)已准备好用于严肃的项目,我们希望尽快开始该项目。

Otoh,我之前曾被推荐尝试使用成熟的 Python,它有许多工具、GUI 库等,但速度存在问题——我们必须使用一个 C 库来计算星历并编写几个库来使用该 C-lib .

然而,这对 Cython 来说可能是一个很好的(完美的)工作,所以我的问题是你如何看待在 Python(Qt、EFL)中编写 GUI 部分并将 Cython 用于性能关键的东西(绑定外部 C 库并编写我们自己的库)而不是(等待)D 为严肃的项目做好准备?

4

4 回答 4

7

作为 Cython 核心开发人员,我显然有偏见,但我当然可以推荐它。CPython 和 Cython 的结合提供了在开发速度、平台稳定性、可移植性、低级编码和 FFI 功能以及执行性能方面难以达到的水平,包括从快速简单到高度调整的 C 代码的非常简单的优化路径速度。

我也可以热烈推荐 Qt 作为 GUI 工具包。它与 Python 配合得非常好。

于 2011-04-16T12:51:37.987 回答
6

这对我来说是一个有趣的问题,因为 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 中不能“有效地工作”。

于 2011-04-16T16:31:52.760 回答
2

用动态语言编写 GUI 并用另一种语言编写对性能敏感的代码是编写应用程序的好方法。这可以在 Python 中完成,也可以在 Tcl/Tk 和其他几种脚本语言中非常容易地完成。

于 2011-04-16T15:47:06.240 回答
1

好吧,这是一个典型的用例,只需用 C/C++ 或任何可以链接到 C 模块的语言编写数字运算代码,然后用脚本语言轻松添加非性能关键的东西。Python C 接口可以使用和使用 SWIG,甚至手动编写绑定代码并不太难(除非您谈论线程并且需要处理 CPython 的白痴 GIL ......)。

于 2011-04-16T14:23:37.507 回答