游戏开发的D语言
最近我一直在困扰,因为我到了一个C ++(甚至0x)感觉非常有限的点,所以我开始寻找替代品。
忘记Java,C#,Python或Ruby。 我仍然喜欢C ++的低级特性,我不喜欢虚拟机。 而且,我是一名游戏引擎开发人员,所以我必须开发核心例程,这个例程必须非常快速,最近我一直渴望代码performance力。 C ++对我来说几乎是一种语言,但是如何使用模板有很多例外,而且GCC并没有像我希望的那样优化内容。
所以我正在考虑开始学习D.
你认为这足以满足游戏开发者的需求吗? 我很警惕,因为我从来没有听说过D被用于这个。
谢谢!
我最近学到了很多D,尽pipe还有更多。 从我到目前为止所了解到的情况来看,我会说,尽pipe语言对于任何事情都很好,但现在编译器和图书馆并不是最好的,所以你永远不能确定编译器是无bug的(不是)。 对于游戏编程,你需要确保垃圾收集正确地发生,例如,编译器没有错误地优化掉重要的代码…这样的事情可能想让你重新思考使用语言。 然而,我自己认为语言本身是最好的(这是完全主观的),我认为使用它的唯一障碍是缺乏完美的实现,而不是语言本身。
我使用D 1.x做游戏和演示,其中一些是公共领域的开源( A , B , C , D , E )。
如果你愿意付出与所有人争论的高昂代价,D可以给你在C ++土地上闻所未闻的生产力。
如果你走这条路线,我build议你selectD 2.x,废弃和Visual D(提示未来的读者:这是2011年)。
至于游戏开发:
-
D GC不是一个真正的问题。 这是如果你在一个框架中分配太多,但是这是关于它。 合并,重用等经典方法…工作。
-
你可以在Linux,Mac和Windows上编写x86程序集。 也是静态的,如果允许非常有趣的模板裸集合函数。
-
在模块边界上内联工作没有“链接时间优化”开关
-
我发现维护debugging和发行版本更容易(与C ++相比)
-
避免新的function,保守地select编译器…就像在C ++中一样
Kenta Cho使用D和简单DirectMedia层(SDL)来开发他的Windows游戏 。 他们很有趣。 看一下灵感和来源:
- Titanion
- 托罗斯骑兵
- Gunroar
那么,这不是如果你使用D,你必须从头开始build立一切。 例如,您可以使用:
- GLFW用于input/输出
- Horde3D作为渲染引擎
- OpenAL声音
- 子弹为物理
- Lua的脚本
- lzo快速减压
- 也许橙色序列化
虽然我不确定覆盖。 这是一个非常坚实的基础,希望能为我工作:)
祝你好运!
在D proramming他们是:
- 抛弃那些支持opengl 3和opengl 4的人
最常见的编程语言是opengl 3和4,不支持
- yage免费的3D游戏引擎,欢迎您的帮助
一点点如何: http : //blog.fedora-fr.org/bioinfornatics/post/D-programming-OpenGL-and-MVC-Pattern
对于在D中使用RAII,它们是关键字范围,它是非常强大的
D是video游戏的绝佳语言,它具有快速开发高性能可执行文件的所有function:
- 它快速编译本地代码,运行速度很快。
- 开箱即用的unit testing,分析和代码覆盖。
- 垃圾收集是默认的,但是你可以使用你自己的内存分配器。
- 与C兼容的ABI,没有编组成本来支付调用本地库。
- 线程安全在types系统中:共享的,纯粹的和不可改变的限定符。
- 内存安全在types系统中:@safe,@trusted,@system。
- 编译时function评估,代码生成等等。
您不需要单独的脚本语言,也不需要额外的编译步骤来生成代码,在低级别系统的性能问题上,您不仅限于虚拟机的内存模型,还可以获得脚本的所有生产力和安全性。为您的游戏逻辑pipe理语言。 您甚至可以自由地select程序,面向对象,function,通用或元编程范例来解决手头的问题。
欢迎来到2014!
截至撰写本文时,D的最新版本是2.067。 D在auto
方面稍微不稳定,但除此之外,我不明白为什么不使用D.编译器是什么都有了很大的改进。
D在我看来比C ++更容易阅读,而且更容易学习。 它包含一个到C的接口和一个到C ++的部分接口。 它甚至允许内联汇编,可以与你的variables进行交互。 D标准库叫做Phobos。
我强烈build议D. D是为了提高效率。 根据亚当D. Ruppe,“[C is]同样快”。 C是最快的语言之一。 所以如果你想用C的速度和C ++的高级function来构build一个游戏,那么D就坐在那里。 如果您有任何问题,请随时joinirc.freenode.net #d。
总而言之,D基本上是C ++的安全版本。 虽然语言是多范式的,包括面向对象的,但是很多重点放在了FP范式上,使用pure
function和不变性。 所有的对象都有一个init
属性,所以如果你声明了'int foo;',它会被初始化为int.init
。 是的,还有指针。 D中的指针称为左值,值称为右值。 一个左值总是指向一个右值。
欲了解更多信息,请访问官方D站点http://www.dlang.org/ 。
自称为“team0xf”的人们在D1中完全做到了这一点 。
我期待有一天也能学习D语言:)
但有一点要记住:好的语言是好的,但作为一个游戏开发者,你也需要工具(如图书馆)来做你的竞标。 目前很less有好的图书馆对D有约束力。然而,我知道最有可能的(但不是肯定的)有:
食人魔 – 领先的,即使不是领先的,免费的在自由的图书馆为您的所有便携式3Dgraphics需求之一。
当然,你需要更多,但这很大程度上取决于你的游戏。
我不知道它是如何容易或困难的,以build立一个C库的D绑定。 这可能很难,可能很容易,有些自动化。 后者将是非常可能的,因为,我认为,语言是非常接近对方,D开发人员可能有很多时间在脑海中的C + +。
希望这可以帮助。
补救措施(Max Payne,Alan Wake,Quantum Break)使用D: http : //dconf.org/2013/talks/evans_1.html
从另一个angular度来看,D编译成与C / C ++相同的目标文件(尽pipe是OMF格式)。 人们会认为D的组装优化可以与C / C ++相媲美,无论如何,组件总是在那里手动优化。