0

所以,我有了这个想法,我会尝试使用 OpenGL 和一些物理特性来制作一个实验性用户界面的原型。我对这两个主题都知之甚少,但对 C++、Java 和 C# 等编程语言非常有经验。经过一些初步研究,我决定使用 Python(使用 Eclipse/PyDev)和 Qt,这两个对我来说都是新的,现在有四个不同的主题可以或多或少地同时学习。

我已经在 OpenGL 和 Python 方面取得了相当大的进展,但是虽然 Python 及其生态系统最初似乎非常适合这项任务,但我现在发现了一些严重的缺点。糟糕的 API 文档和缺乏代码完成(由于动态类型),当每个模块有一个类时,必须导入我在每个其他模块中使用的每个模块变得乏味,必须选择正确的模块来运行程序,并且必须等待 30在收到许多明显的拼写错误和其他错误的通知之前,程序启动并隐藏 IDE 的秒数。它变得非常烦人非常快。坦率地说,我不明白所有的绒毛是关于什么的。Lambda 函数、列表推导等都很好,但当然还有更重要的事情。

因此,除非任何人都可以至少解决其中的一些烦恼,否则 Python 就出局了。出于显而易见的原因,C++ 也被淘汰了,而 C# 也被淘汰了,主要是因为缺乏可移植性。这使得 Java 和 JOGL 成为一个有吸引力的选择,但我也对 Ruby 和 Groovy 感到好奇。不过,我想听听您对这些和其他人的看法,以防止我再次犯同样的错误。

要求是:

  • 让地狱远离我。
  • 良好的代码完成。完整的方法签名,包括数据类型和参数名称。
  • 良好的 OpenGL 支持。
  • Qt 支持更可取。
  • 面向对象
  • 适用于 RAD、原型设计
  • 跨平台
  • 最好是开源的,但至少是免费的。
4

9 回答 9

7

看来您主要不是 Python 本身的问题,而是 IDE 的问题。

“错误的 API 文档”

到什么API?Python 本身、Qt 或您正在使用的其他库?

“缺少代码完成(由于动态类型)”

只要您不做任何魔术,我发现 PyDev 非常擅长解决这些问题。如果它丢失了,您总是可以通过以下方式输入提示:

assert isinstance(myObj, MyClass)

然后,即使 myObj 来自动态上下文,PyDev 也会为您提供代码完成。

“当每个模块有一个类时,必须导入我在每个其他模块中使用的每个模块会变得乏味”

安装 PyDev Extensions,它具有动态自动导入功能。或者在一个单独的模块中收集所有导入并执行以下操作:

from mymodulewithallimports import *

“必须选择正确的模块来运行程序”

在 Eclipse 中,您可以设置一个默认的启动文件,或者只选中“使用上次运行配置”。然后你永远不必再次选择它。

“在被告知许多明显的拼写错误和其他错误之前”

安装 PyDev Extensions,它有更高级的语法检查,并且会很高兴地通知您未使用的导入/变量、未初始化的变量等。

于 2009-02-07T21:17:18.703 回答
2

只看你的清单,我会推荐 C++;特别是因为代码完成对您来说非常重要。

关于 Python:虽然我很少使用 Python 进行 OpenGL 编程(使用 C++),但 Python 社区为 OpenGL 开发提供了许多有趣的模块:pyopenglpyglewpygpu;仅举几个。

顺便说一句,您的导入问题可以通过导入模块所在__init__.py目录的文件中的模块轻松解决​​,然后只需导入“父”模块。不建议这样做,但仍然可以。

于 2009-02-07T19:07:21.773 回答
2

我不明白为什么没有人听说过 D 编程语言?

这是完美的解决方案!!!!

于 2009-06-15T19:03:34.847 回答
1

Consider Boo -- it has many of Python's advantages while adopting features from elsewhere as well, and its compile-time type inference (when variables are neither explicitly given a specific type or explicitly duck typed) allows the kind of autocompletion support you're asking about.

The Tao.OpenGL library exposes OpenGL to .NET apps (such as those Boo compiles), with explicit support for Mono.

(Personally, I'm mostly a Python developer when not doing C or Java, but couldn't care less about autocompletion... but hey, it's your question; also, the one-class-per-module convention seems like a ridiculous amount of pain you're putting yourself through needlessly).

于 2009-02-07T21:46:10.720 回答
1

我开始使用 GL4Java 进行 OpenGL 编程,它已迁移到 JOGL,您绝对应该尝试一下 (JOGL)。Java 提供了您需要的大部分功能(加上 Eclipse 为您提供代码完成功能),特别是对于 JOGL,有很多教程可以帮助您入门。

于 2009-02-07T21:17:54.553 回答
1

如果你想要所有这些东西,唯一真正的选择是使用 Java,但老实说,你对特性有点挑剔。代码完成真的那么重要吗?您列出的其他所有内容在传统上都非常受 Python 好评,所以我没有看到这个问题。

于 2009-02-07T19:00:28.573 回答
1

我使用的文本编辑器(甚至不是 IDE)允许您导入 API 函数定义。代码完成不是一种语言特性,尤其是对于 OpenGL。只需键入gl[Ctrl+I],您就会得到选项。

于 2009-02-07T20:10:53.767 回答
1

我曾经尝试过使用 Java3D 和 java。我意识到 Java3D 是一个典型的 Java API……有很多对象可以做简单的事情,而且因为它是 Java,所以可以转换成很多代码。然后我转移到 Eclipse 中的 Jython,它清理了代码,只剩下 Java3D 的复杂性。

所以最后,我朝相反的方向走。与纯 python 相比,它的一个优点是我可以将 Java 与 Eclipse 的所有优点(如自动完成)一起使用,并在 Java 中的部件变得笨拙时将其移至 python。

于 2009-02-07T20:24:00.900 回答
1

Pydev似乎可以在 Eclipse 中为您提供代码完成功能。

于 2009-02-07T20:25:54.843 回答