【问题标题】:What features would you like to see in a game programming DSL?您希望在游戏编程 DSL 中看到哪些功能?
【发布时间】:2009-11-23 15:41:50
【问题描述】:

我和我的朋友正处于为他的论文创建专为游戏编程设计的特定领域语言的第一阶段。

该语言将是相当低级的,它将具有类似 C 的语法,可选的垃圾收集,并且将面向内存或处理能力很少的系统(例如 Nintendo DS),但应该足够强大方便PC开发。 它不会是一种脚本语言,而是一种编译语言,但由于我们不想花几个月时间编写一个普通的编译器,所以第一个实现基本上是一个 LanguageName-to-C 翻译器,以 TCC 或 GCC 作为结尾编译器。

现在,我有一个问题要问你们所有的游戏程序员:

您希望在这种语言中看到什么?哪些功能、实现和语法方面最适合它?应该避免什么?

编辑:

我们已经想到的一些事情:

  • 基于状态的对象 - 对象可以存在于它的一种状态(或子状态)中
  • 事件和函数 - 事件不必存在就可以被调用,并且可以冒泡
  • 有限的动态分配和指针支持 - 我们希望它尽可能安全
  • 支持对象合成(Hero 由 Actor、Hurtable、Steerable 等(动态)组成)
  • 状态中的“资源”,在状态开始/结束时自动加载和卸载(例如,OpenGL 纹理对象是资源)
  • 对本地化和序列化的基本支持
  • 一种可快速解析的语法
  • 我们希望使语言尽可能一致:所有内容都作为值传递,每个声明都具有可预测的语法(例如,function retType name(type arg) is (qualifier, list) { };没有conststaticpublic 限定符,除了限定符中的任何地方列表)等。

【问题讨论】:

  • Clojure 有很多我很欣赏的特性,尤其是在函数式编程方面。可能是件好事。

标签: programming-languages language-design dsl


【解决方案1】:

使并发编程更容易的东西。也许是 Erlang 和 C++ 的混合体。自从 Cell 处理器发布以来,我一直在思考这个问题,但是开发它并解决许多在传统 C++ 程序中已经有解决方案的问题需要大量的研发时间。

【讨论】:

  • 该语言将支持非常基本的协同程序(基本上是 Duff 的协同程序,由 Simon Tatham 提出)。
【解决方案2】:

就我个人而言,我喜欢编写能够访问广泛的网络受众的游戏。让桌面和网络之间的接口变得简单会很有趣。

我想,这可能更多的是使用该语言构建的应用程序领域,而不是语言本身,但也许在设计阶段需要牢记一些有用的东西。

【讨论】:

  • 你能举例说明你的意思吗?
  • 抱歉,没有接受过语言设计方面的正式培训,所以我并没有什么令人惊奇的细节,但我可以看到让你的游戏程序将信息传递到网站服务器的好处用于显示,并且通常在桌面上运行的游戏和网络上可用的社交连接之间紧密集成。 耸耸肩
【解决方案3】:

您可能比阅读以下内容更糟糕:The Next Mainstream Programming Languages: A Game Developer's Perspective (PDF)。

【讨论】:

    【解决方案4】:

    所以,我不想真的破坏你的泡沫,但是......也许我应该?作为一名专业的游戏开发者,不得不说,游戏开发确实需要三种“语言”。

    首先,是您的引擎级语言。这通常是 C++。一切都与性能有关。游戏的工件不应该在这里实现(遗憾的是,它们经常是)。

    接下来是游戏语言。这是轻量级的,易于理解,并且专为快速迭代而设计。

    最后,还有某种可视化脚本语言。这是最轻量级的,面向非程序员(关卡设计师等)。

    话虽如此:

    一定要看看 UnrealScript。整个行业都在使用它(因为虚幻引擎是 FPS 游戏开发的基石)。

    我强烈建议支持:

    • 并发编程(查看 CCP 为 Eve Online 使用 Stackless Python 所做的事情)
    • 网络复制(查看 UnrealScript,您可以标记函数以在服务器或客户端上运行,或者在客户端上安全运行等)
    • 状态(如前所述)会很棒。 UnrealScript 有这个功能。这需要安全地完成(即在任何时候进入和退出,优雅地处理复杂的转换等)

    祝你好运!

    【讨论】:

    • WoW 的实现方式类似于您所说的:C++ 引擎、用脚本语言编写的 UI,然后还有用于用户输入快捷方式的宏。它使用分层的多语言方法并取得了完全的成功。
    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2010-10-12
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多