C++只是通过让我微观管理我自己的记忆来吸引我太多的时间,让我打字太多(你好std::vector
),并且厌倦了我很长的编译时间.什么是严肃的实时图形编程的唯一最佳选择?垃圾收集是必须的(必要时能够避免使用垃圾),速度必须与C++竞争.访问C libs的合理故事也是必须的.
(完全披露:我对此有自己的答案,但我很有兴趣看到其他人发现什么是实时图形工作的C++的好替代品.)
编辑:感谢大家的深思熟虑的回复.鉴于这个问题确实没有"正确"的答案,我不会选择任何特定的答案.除此之外,我只选择我喜欢的语言作为C++替代品,这不太公平.
什么d编程语言?
评论中要求的一些链接:
Win32 Api
废弃(多媒体库)
我不会丢弃C++.事实上,我会考虑将Boost添加到您的C++库中,这使得该语言更加实用.你的例子将成为:
BOOST_FOREACH( Thingy& t, lostOfThingys ) { // do something with 't' }
Boost拥有大量有助于使C++成为更好语言的工具.
C#是一种很好的语言,符合您的要求,它非常适合于图形,这要归功于微软努力为它提供优秀的工具和库,如Visual Studio和XNA.
我不同意你的前提.仔细而恰当地使用C++是一种很好的语言,特别是对于像实时图形这样的领域,速度至关重要.
如果您很好地设计系统,并使用stl容器和智能指针,内存管理就变得简单了.
std::vector::const_iterator it = lotsOfThingys.begin())
如果你使用会变短
using namespace std;
typedef vector::const_iterator ThingyConstIter;
通过使用预编译头或使用PIMPL惯用法将系统分解为合理的自包含模块,可以显着缩短编译时间.
实时+垃圾收集不太匹配我害怕.
如果垃圾收集器可以随时启动并花费不确定的处理量,那么制作任何实时响应都会有点困难......
也许是一种混合方法.Python和C++是一个很好的组合(例如,参见PyGame).
我们不要忘记提及新的"自动"用途:
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.
对于这种编程,编译为机器代码的Lisp的一些变体几乎与C++一样快.该顽皮狗团队创建了一个版本的Lisp的叫以赛大会Lisp的,这是他们用来创建了AAA的冠军,包括杰克与达斯特系列.两个主要的障碍在游戏行业一个Lisp的做法是C/C++开发的根深蒂固的性质(包括工具和人力资产都投入巨资在C/C++),以及寻找有才华的工程师谁是明星的难度游戏编程领域和Lisp语言.
不少业内人士的编程团队正在转向一种混合的方法,其中实时代码,尤其是图形和物理代码,是用C或C++,但游戏逻辑是在更高级别的脚本语言,它可以访问到完成,程序员和非程序员都可以编辑.Lua和Python都是高级脚本的流行.
作为3D VR应用程序的开发人员/研究员/教授已有20年之久,我建议没有其他选择(可能除了C).减少延迟和实现实时交互的唯一方法是优化的编译语言(例如C或C++),可以访问快速可靠的3D图形库,如OpenGL.虽然我同意必须对所有内容进行编码,但这对于性能和优化也是必不可少的.
有时候,在人迹罕至的地方寻找你可以找到真正的宝石.你可能想要考虑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
我完全赞同提到C#用于图形编程.它有一个轻微的缺点,即作为一种托管语言并且允许垃圾收集器对你的应用程序进行自由统治一段时间之后是帧率自杀,但是在程序生命的早期就有一些相对智能的池分配可以避免任何真正的问题.
有几个人已经提到过XNA,它非常友好且记录良好,我也想回应这个建议.我亲自将它用于我的爱好游戏项目,它对我非常好.
不过,XNA不是唯一的选择.SlimDX也在不断发展,作为以与Managed DirectX类似的方式提供DirectX的精简包装的手段(我相信,微软已经停止使用XNA).两者都值得研究:http://code.google.com/p/slimdx/