OpenGL UI原型的正确语言。放弃Python

时间:2009-02-07 18:40:15

标签: programming-languages prototyping

所以,我得到了这个想法,我试图使用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,原型制作
  • 跨平台
  • 最好是开源,但至少是免费的。

9 个答案:

答案 0 :(得分:7)

您似乎并不是主要遇到Python本身的问题,而是使用IDE。

“错误的API文档”

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

“缺少代码完成(由于动态输入)”

只要你没有做任何魔术,我发现PyDev非常擅长弄清楚这些事情。如果它丢失了,你总是可以通过这样做来输入提示:

assert isinstance(myObj, MyClass)

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

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

安装PyDev Extensions,它可以动态自动导入。或者在单独的模块中收集所有导入并执行:

from mymodulewithallimports import *

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

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

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

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

答案 1 :(得分:2)

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

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

BTW,您可以通过导入模块所在目录的__init__.py文件中的模块,然后导入“父”模块,轻松解决导入问题。这不是推荐的,但仍有可能。

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我使用的文本编辑器(甚至不是IDE)允许您导入API函数定义。代码完成不是语言功能,特别是对于OpenGL。只需输入gl[Ctrl+I]即可获得选项。

答案 5 :(得分:1)

我尝试过使用Java3D和java一次。我意识到Java3D是一个典型的Java API ......许多对象都可以做简单的事情,因为它是Java,它转化为很多代码。然后我转移到Eclipse中的Jython,清理代码,只留下Java3D的复杂性。

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

考虑Boo - 它在使用其他地方的功能时具有许多Python的优点,并且它的编译时类型推断(当变量既未明确赋予特定类型或显式为鸭类型时)也允许类型您正在询问的自动完成支持。

Tao.OpenGL库将OpenGL暴露给.NET应用程序(例如那些Boo编译),并明确支持Mono。

(就个人而言,我主要是一个Python开发人员,不做C或Java,但不关心自动完成...但是,嘿,这是你的问题;而且,每个模块的单一类约定似乎就像一场荒谬的痛苦,你不必要地把自己搞得一团糟。)