Odin 编程语言
Odin 被介绍为一种面向数据、现代化的 C 替代品,目标是高性能系统、游戏和图形编程,并常与 Zig、Nim、V、Rust、Hare 和 Jai 等语言比较。评论者称赞它的易用性、外部函数接口以及图形相关特性,但也指出缺少官方包管理器、工具链不完整,以及不能自动导入 C 头文件等问题,限制了更广泛的采用。语言创建者强调其在简洁性、显式依赖处理和 C 互操作设计上的刻意取舍,而其他人则争论这些权衡是否会使 Odin 在与工具更激进的竞争者相比时受限于增长。
定位与比较
- 许多人认为 Odin 是“真正的 C 后继者”:比 C++ 更简单,比 C 更易用,对一些人来说也比 Zig 更有趣。Nim 常被提作更像 C++ 的对应物,而 Odin 则被视为 C 的替代品。
- V 被提为竞争对手,但由于过去过度承诺、质量问题,以及带有垃圾回收器(因此与 Odin/Zig 的可比性较低),它受到相当多的质疑。
- 讨论中出现了长长的“C 替代品”或系统编程语言名单(Zig、D、Hare、C3、Beef、Jai、Rust 等),并争论什么才算真正的“像 C”(无 GC、AOT 静态二进制、低复杂度)与“像 C++”。
FFI、C 互操作与位域
- 一个反复出现的需求是:从 C 头文件自动生成 Odin 绑定,甚至直接导入头文件。
- Odin 方面承诺会提供官方绑定生成器,但强烈反对“神奇地导入 C 头文件”的功能:
- C 与预处理器分离、宏的重度使用,以及位域,使得忠实翻译很困难。
- 实际上,被导入的 API 仍然需要封装、重命名和细化类型。
- 有人指出 Odin 缺少 C 风格位域,这对某些领域来说是个痛点。
工具链、包管理与生态
- 一些评论者认为,Odin 落后于 Zig,因为 Zig 有一体化的构建系统和包管理器。
- 批评者说,Odin 增加了很多语言特性,但在诸如标准包管理器之类能促进生态的工具上却“拖延”了。
- 语言创建者对此回应:
- 不打算做“官方”包管理器,并且怀疑包管理器解决的问题没有它们制造的问题多。
- Odin 的“collections”是显式的导入搜索路径,而不是依赖系统。
- 社区已经有事实上的包管理器方案,只是没有被官方认可。
用途与细分领域
- Odin 被商业地用于高性能图形应用(例如实时流体/烟雾渲染工具)。
- 常见报告的领域包括:游戏、3D 图形、物理,以及通用应用开发。
- 这门语言强调数据导向特性:内建 SOA 类型、向量/矩阵/四元数,以及良好的 C 互操作能力。
语言设计哲学与范式之争
- Odin 有意采用命令式/过程式风格,并进行手动内存管理;它并不追求函数式或多范式。
- 线程中的函数式编程爱好者感到被疏离,并担心业界正朝着 Go/Odin 这类“简单”的命令式语言,而不是更丰富的函数式或 Rust 式设计方向发展。
- Odin 被描述为比 C 更复杂,但又比 C++ 简单得多;其设计高度聚焦于“直觉式”使用,即便这意味着编译器和常量系统更复杂。
杂项
- 有人希望看到更精致、更具代表性的演示;默认的解释器示例被认为与数据导向系统语言的定位不符。
- 核心标准库被批评为有些晦涩;支持者则认为它有意覆盖了许多真实世界的格式与算法,哪怕其中一些并不通常被推荐使用。