业余项目的 11 年:SymOntoClay 开发日志

发布: (2026年1月10日 GMT+8 15:15)
5 min read
原文: Dev.to

Source: Dev.to

Introduction

在过去的 11 年里,我一直在尝试一种用于描述 NPC 行为的多范式语言。
主要目标是创建一种既高度表达又易于人类阅读的语言。这通过使用一些有用但很少使用的技术(例如模糊逻辑或逻辑编程),并通过专门的语法构造实现,使语言更加紧凑和富有表现力。

History

SymOntoClay 的想法最初源于想制作一款带有社交模拟元素的动作/RPG——一个设定在军事冲突区的微型《辐射》风格游戏。早期我更关注软件实现,而不是组建团队。在开发游戏概念的过程中,我想起了基于规则的系统,如 Prolog 和专家系统,觉得用这种方式编写 NPC 的部分逻辑会很方便。

逐渐地,在命令式语言(C++/C#)中使用逻辑推理变得比实际的游戏开发更有吸引力。2014 年 5 月,我产生了一个“疯狂”的想法:创建一种自己的编程语言,将逻辑编程与命令式代码结合,并直接在语法中嵌入一些少用的概念(例如模糊逻辑)。

最初的动作/RPG 从未实现;相反,项目演变成现在称为 SymOntoClay(Symbolic Ontological Clay)的东西。我最初以为几个月内可以完成语言规范,并在一年内实现它,但项目已经进行 11 年,仍未有结束的迹象。

Publication Motivation

这些年里我从未发布过任何帖子或文章。我的“内在完美主义者”希望只在项目完成、完全打磨好之后才展示。11 年后,我意识到等待完美时机毫无意义,于是决定把 SymOntoClay 作为一个活的、不断演进、并不完美的系统以及它积累的遗产分享出来。

Current State

  • 已实现许多特性,但目前只能描述非常简单的 NPC 行为。
  • 对 Unity 的实验零星进行,主要用于验证基本功能。
  • 代码已在 GitHub 上以 MIT 许可证公开。
  • 更多细节请参见项目网站(原文链接中提供)。
  • White Paper 说明了开发理念。
  • 文档不够均衡:语言规范是最新的,而“入门指南”和使用示例则相对简略。
  • 项目 YouTube 频道目前为空,稍后会补充内容。
  • 目前还没有社区;本帖是除个人笔记之外的首次公开展示。

Example: Fuzzy Membership Definition

linvar `degree of membership` for range [0, 1]
{
    constraints:
        for inheritance;

    terms:
        minimal = L(0, 0.1);
        low = Trapezoid(0, 0.05, 0.3, 0.45);
        middle = Trapezoid(0.3, 0.4, 0.6, 0.7);
        high = Trapezoid(0.55, 0.7, 0.95, 1);
        maximal = S(0.9, 1);
}

Future Work

  • Demo Scene – 通过完成 HTN 实现并与 Unity 集成,制作一个最小可玩演示。
  • Tooling – 开发调试器、性能分析器等工具,以简化 DSL 调试。
  • Editor Support – 为 VS Code(或至少 Notepad++)实现语法高亮,并提供完整的语言服务器。
  • Documentation – 扩展架构描述,添加最新的图示,改进“入门指南”。
  • YouTube Content – 发布短视频,演示使用 SymOntoClay 控制角色的演示场景。
  • Community Building – 撰写文章,开设 Discord 服务器,鼓励社区贡献。

Closing

这是关于 SymOntoClay 在更广阔的互联网首次公开的发布。项目终于走出了个人笔记的阶段。

感谢阅读至此!

Back to Blog

相关文章

阅读更多 »