对于实时图形编程,C++的最佳替代方案是什么?

Bax*_*imo 33 c++ 3d graphics real-time

C++只是通过让我微观管理我自己的记忆来吸引我太多的时间,让我打字太多(你好std::vector<Thingy>::const_iterator it = lotsOfThingys.begin()),并且厌倦了我很长的编译时间.什么是严肃的实时图形编程的唯一最佳选择?垃圾收集是必须的(必要时能够避免使用垃圾),速度必须与C++竞争.访问C libs的合理故事也是必须的.

(完全披露:我对此有自己的答案,但我很有兴趣看到其他人发现什么是实时图形工作的C++的好替代品.)

编辑:感谢大家的深思熟虑的回复.鉴于这个问题确实没有"正确"的答案,我不会选择任何特定的答案.除此之外,我只选择我喜欢的语言作为C++替代品,这不太公平.

sca*_*ble 18

什么d编程语言

评论中要求的一些链接:

Win32 Api

废弃(多媒体库)


Mar*_*ote 18

我不会丢弃C++.事实上,我会考虑将Boost添加到您的C++库中,这使得该语言更加实用.你的例子将成为:

BOOST_FOREACH( Thingy& t, lostOfThingys ) {
    // do something with 't'
}
Run Code Online (Sandbox Code Playgroud)

Boost拥有大量有助于使C++成为更好语言的工具.

  • 每当我试图使用一个非平凡的Boost库时,我总是很失望.Boost shared_ptr是我从Boost尝试过的唯一一件实际做到我想要的东西,做得好,并且不是非常混乱,或者某种方式限制.因人而异. (2认同)
  • Blargh ...讨厌提升,编译时间长,令人困惑,我通常可以在需要时快速编写更多可用的东西(测试用例确保我解决了这些问题).我是一个专业的游戏开发者,喜欢用于编写游戏的c ++(所有那些原始的,低级别的力量!)虽然它不是专业游戏,但我通常只是去C#和XNA. (2认同)
  • 必须第二次格兰特.Boost太过臃肿,总的来说无用.我最终实现了一个小的,理智的Boost和STL子集,并将其用作我团队开发的一组基础库. (2认同)

Dre*_*mer 17

C#是一种很好的语言,符合您的要求,它非常适合于图形,这要归功于微软努力为它提供优秀的工具和库,如Visual Studio和XNA.

  • 感谢Mono,C#非常便携.使用P/Invoke可以轻松访问C libs. (5认同)

Dim*_*ima 15

我不同意你的前提.仔细而恰当地使用C++是一种很好的语言,特别是对于像实时图形这样的领域,速度至关重要.

如果您很好地设计系统,并使用stl容器和智能指针,内存管理就变得简单了.

std::vector::const_iterator it = lotsOfThingys.begin()) 如果你使用会变短

using namespace std;
typedef vector::const_iterator ThingyConstIter;

通过使用预编译头或使用PIMPL惯用法将系统分解为合理的自包含模块,可以显着缩短编译时间.

  • 预编译的头文件也适用于gcc (3认同)

Pie*_*ter 14

实时+垃圾收集不太匹配我害怕.

如果垃圾收集器可以随时启动并花费不确定的处理量,那么制作任何实时响应都会有点困难......

  • 对于现代垃圾收集实现,这不再是真的.虽然仍然是少数,但商业游戏是用C#编写的. (3认同)
  • 用C#编写的商业游戏肯定是可能的.但可能不是实时关键的. (2认同)

Jam*_*kin 13

也许是一种混合方法.Python和C++是一个很好的组合(例如,参见PyGame).

  • 有一个着名的MMORPG走了那条路 - Eve Online?那就是Stackless Python甚至.不是主线.我忘记了这一点,我认为它几乎是一个AAA级冠军.也许不适合yrp的定义. (2认同)

MSa*_*ers 13

我们不要忘记提及新的"自动"用途:

auto it = lotsOfThingys.begin(); // Let the compiler figure it out.
auto it2 = lotsOfFoos.begin();
if (it==it2) // It's still strongly typed; a Thingy iter is not a Foo iter.
Run Code Online (Sandbox Code Playgroud)


Nat*_*han 12

对于这种编程,编译为机器代码的Lisp的一些变体几乎与C++一样快.该顽皮狗团队创建了一个版本的Lisp的叫以赛大会Lisp的,这是他们用来创建了AAA的冠军,包括杰克与达斯特系列.两个主要的障碍在游戏行业一个Lisp的做法是C/C++开发的根深蒂固的性质(包括工具和人力资产都投入巨资在C/C++),以及寻找有才华的工程师谁是明星的难度游戏编程领域和Lisp语言.

不少业内人士的编程团队正在转向一种混合的方法,其中实时代码,尤其是图形和物理代码,是用C或C++,但游戏逻辑是在更高级别的脚本语言,它可以访问到完成,程序员和非程序员都可以编辑.LuaPython都是高级脚本的流行.


小智 8

作为3D VR应用程序的开发人员/研究员/教授已有20年之久,我建议没有其他选择(可能除了C).减少延迟和实现实时交互的唯一方法是优化的编译语言(例如C或C++),可以访问快速可靠的3D图形库,如OpenGL.虽然我同意必须对所有内容进行编码,但这对于性能和优化也是必不可少的.

  • 但是还有其他语言可以编译为本机代码.D编程语言很顺利.有人说OCaml很棒.等等.无论你使用什么语言为你的应用程序,你总是会打电话给低级本机库,如OpenGL,BLAS等,以实现真正繁重的工作.所以我不同意C/C++需要获得所需的性能.但根据项目的不同,可能还需要其他原因. (4认同)

Dev*_*Dog 6

有时候,在人迹罕至的地方寻找你可以找到真正的宝石.你可能想要考虑PureBasic(不要让这个名字误导你).这是一些细节:

PureBasic功能

  • 机器代码(汇编)可执行文件(FASM)
    • 在线装配支持
    • 不需要运行时间(不需要DLL等)1个可执行文件
    • 微小的可执行文件(小于或小于/快于或快于C++ w/out运行时)
    • 你可以编写DLL
    • 多线程支持
    • 完整的OS API支持
  • 多平台支持
    • Windows 95-2003
    • Linux的
    • Mac-OS X.
    • 的Amiga
  • 2D和3D游戏开发
    • 的DirectX
    • OGRE
  • 慷慨的许可
    • 便宜(79欧元或约112美元)
    • 终身许可证(包括所有未来的更新和版本)
    • 所有平台都有一个价格
  • 外部图书馆支持
    • 第三方DLL
    • 用户库
  • 在线支持
    • 由其创建者领导的响应式开发团队
    • 在线论坛
      • 一个答案的地方(不必遍布网络)
      • 大量的示例代码(在使用IEtool的IE中尝试代码)
      • 快速回答问题
  • 奖金学习(替代学习C++)
    • API
    • 结构
    • 接口
    • 指针

访问在线论坛,以更好地了解PureBasic(http://www.purebasic.fr/english/index.php)或主站点:www.purebasic.com


小智 5

我完全赞同提到C#用于图形编程.它有一个轻微的缺点,即作为一种托管语言并且允许垃圾收集器对你的应用程序进行自由统治一段时间之后是帧率自杀,但是在程序生命的早期就有一些相对智能的池分配可以避免任何真正的问题.

有几个人已经提到过XNA,它非常友好且记录良好,我也想回应这个建议.我亲自将它用于我的爱好游戏项目,它对我非常好.

不过,XNA不是唯一的选择.SlimDX也在不断发展,作为以与Managed DirectX类似的方式提供DirectX的精简包装的手段(我相信,微软已经停止使用XNA).两者都值得研究:http://code.google.com/p/slimdx/