理解Odin编程语言
摘要
一本教授Odin编程语言的书,涵盖手动内存管理、参数多态和数据导向设计。1.10版本已发布并包含更新。
暂无内容
查看缓存全文
缓存时间: 2026/07/12 13:48
# 理解 Odin 编程语言
来源:https://odinbook.com/
《理解 Odin 编程语言》,作者 Karl Zylinski
你想学习 Odin 编程语言并揭开底层编程的神秘面纱吗?
那么这本书就是为你准备的。
阅读样章 (https://odinbook.com/sample.html) 或立即购买 (https://store.zylinski.se/b/tnwvO)
《理解 Odin 编程语言》是一本教授 Odin 基础与高级概念的书籍。你将学习到过程、**手动内存管理**、参数多态、数据导向设计等等。
目标读者是具有一定编程经验的任何人。Odin 是一门简单而强大的语言,这使得本书成为**底层编程的绝佳入门读物**,无论你的背景如何。
编程语言是一种工具。**通过理解你的工具,你将成为一个更好的工匠**。因此,本书不仅解释如何编写 Odin 代码,还解释*为什么*这门语言会如此运作。
**读者评价:**
> 我强烈推荐 Karl Zylinski 写的这本关于 Odin 的精彩书籍——非常适合任何想学习和理解 Odin 编程语言的人。 — **Bill "gingerBill" Hall,Odin 语言的创造者**。
>
> Karl 在解释 Odin 方面做得非常出色。我以前有使用像 Golang 这样的垃圾回收语言的经验,这本书确实帮助我过渡到了像 Odin 这样的非垃圾回收语言。 — **来自 store.zylinski.se 的 Kevin D 的评论**。
>
> 我从不读书,很容易分心。但这里的写作风格太好了,以至于我在几天内毫无困难地读完了整本书。 — **来自 store.zylinski.se 的 Shaka 的评论**。
**1.10 版本发布!** 阅读发布说明 (https://odinbook.com/#release_notes)。
**可用格式:**
## HTML
展示书籍在 HTML 格式下的外观。有一个标题写着“参数多态”。下面有一些文本和侧面的一些额外信息气泡。图片底部附近还有一些代码。
布局精美,易于导航。一个便携式 HTML 文件,内嵌了所有字体和图像。类似于 PDF,但使用起来更舒适。
在电脑上提供最佳阅读体验。也可以在手机或平板电脑上阅读。
可在 store.zylinski.se (https://store.zylinski.se/b/tnwvO) 购买 HTML+电子书版 或在 Itch (https://zylinski.itch.io/odinbook) 购买 HTML+电子书版
阅读样章 (https://odinbook.com/sample.html)
**如果你不确定要买哪个版本,我建议你从 store.zylinski.se (https://store.zylinski.se/b/tnwvO) 或 Itch (https://zylinski.itch.io/odinbook) 购买。** 在那里你将同时获得 HTML 和电子书版本。
## 概述视频
## 发布说明
**版本 1.10**
- 第 8.3 节已修改为教授 `[dynamic; N]T` 类型(固定容量动态数组),取代了 `Small_Array`。固定容量动态数组弃用了 `Small_Array`。
- 更新了附录 B,也使用了固定容量动态数组。
- 附录 A 现在包含了一些关于 `core` 中基于句柄的映射的注释。
- 第 10.3 节中对一些不必要的切片操作进行了微小修改。
只需从购买处重新下载书籍即可获取最新版本。
**版本 1.9**
- 更新了 `core:os` 的使用,以匹配“os2”引入的变更。背景:整个 `core:os` 包在 2026 年 2 月被替换。替换后,一些代码示例需要修改。许多使用 `core:os` 的代码仍然有效,但使用 `os.read_entire_file` 和 `os.write_entire_file` 的代码需要一些更改。
- 现在 HTML 版本中的外部链接会在新标签页中打开。
- 改进了第 10.1.1 节中关于禁用边界检查的提示框。
- 修复了约 30 处语法问题。
- 修复了几个小的技术错误。
**版本 1.8**
### 字符串章节大改
此版本对字符串章节(第 11 章)进行了重大修改。已经进行了大幅修订和扩展。部分变更包括:
- 更清晰地说明了 UTF-8 如何解码为 rune。
- 增加了关于如何手动解码 UTF-8 的章节。
- 旧的关于空终止的“提示框”已变成一个独立的章节。
- “释放与字符串常量混合的字符串”部分通过考虑映射而非数组,使其更清晰、更有用。
- 增加了关于“字符串常量”一词可能产生歧义的章节。
- 关于 Windows 上 UTF-16 的章节大部分已被重写,现在使用了新的 `cstring16` 类型。
- 更多许多小的修改和编辑。
### 其他章节的变更
- 第 1.5 章:修正笔误。
- 第 2.4 章:关于 `odin run . -keep-executable` 的说明(新的 Odin 行为)。
- 第 3.2 章:修正关于类型推断的笔误。
- 第 5.3 章:澄清了用于检查联合体变体的 `.(Type)` 语法。
- 第 7.4 章:澄清了一个句子。
- 第 7.8 章:添加了关于 `@init` 和 `@fini` 的“无上下文”要求的信息。
- 第 10.1.5 章:修正代码笔误。
- 第 10.3 章:删除了不必要的切片操作。
- 第 11.6 章:修正代码笔误。
- 第 15.2 章:将关于 `bit_set` 初始化器的提示框移动到更合适的位置。
- 第 15.2.2 章:修正笔误。
- 第 15.3 章:修正笔误。
- ...以及若干其他小修正!
**版本 1.7**
- 第 1 章:修复了失效的 Discord 链接
- 第 5.1.3 章:修正笔误
- 第 9.7 章:澄清了 `rand.int_max` 的范围
- 第 14.3 章:改进了 'Special_Array' 示例
- 第 23 章:修正笔误
- 第 26.6 章:修复了失效的 WebGPU 示例链接
- 附录 D:修复编译错误
**版本 1.6**
- 新增第 17.5 节“使用回调打破循环依赖”,介绍了如何使用回调来解决需要循环依赖的情况,以及如何创建基础接口。
- 第 13.1.2 章:根据最近对错误释放处理方式的更改,更新了跟踪分配器的示例。
- 新增第 18.6 节“更复杂的构建设置”。关于编写更大的自定义构建脚本的简短章节。
- 新增第 26.10 节“代码生成”:仅说明什么是代码生成并链接到一个示例。
- 附录 D:从 Raylib + Box2D 示例中移除了一些不必要的内容,并使其更清晰。
- 为 HTML 版本添加了图标,以便更容易找到标签页。
- 第 23.3 章:更清楚地说明你不需要避免动态字面量,但需要理解它们会分配内存。
- 第 6.3 章:修正笔误
- 第 8.1.3 章:修正向量 `from_1_to_2` 的错误方向
- 第 8.1.4 章:统一使用过程名 `draw_image`,而不是有时使用 `draw_texture`。
- 第 12.1 章:修正笔误
- 第 23.1 章:为清晰起见进行小幅改写
**版本 1.5**
我通读了整本书,本质上是进行了一次额外的编辑校对。我做了大量修改,使文本更清晰。以下是一些较大的修改:
- 澄清了第 5.3 章中 `My_Union` 的大小
- 在讨论枚举时使用“成员”和“值”这两个词。以前我使用“枚举值”和“值”。旧的说法令人困惑且模棱两可。
- 将第 26 章重命名为“还有一些东西...”,并稍微编辑了内容。
- 在第 26 章中提到了 `#load`
- 在第 26 章中提到了 `@rodata`
- 在第 26 章中增加了“使库编译干净”一节
- 新增第 7.8 节(`@init` 和 `@fini`)
- 改进了第 4.3 节(循环)。
- 第 6.3 节(指向结构的指针)现在更具教学性。
- 改进了第 10.3 节(自定义迭代器)。
- 新增第 11.5.1 节(释放与字符串常量混合的字符串)
- 第 12.6 节(context.user_ptr 和 context.user_index)有了新示例。
- 修复了第 2.6 章插图中的一个小错误。
- 将动态字面量移至第 23 章(Odin 中应避免的内容),因为它们默认是禁用的,而且有充分的理由。
- 第 18 章:关于“不需要构建系统”以及我实际所说“构建系统”含义的细微差别。
- 使第 6.5 章中的一些内容更清晰
- 修复了读者报告的 5.1.3、5.2.1、6.5、10.2.1 中的笔误(谢谢!)
- 在封面上添加了版本号。
- 修复了 HTML 版本中 YouTube 链接使用错误“外部链接”符号的问题。
- 在 itch.io 上链接到 CAT & ONION(因为它附带 Odin 代码)。
- 在“第 4 章:一些额外基础知识”中提及了 `#reverse`
**版本 1.4**
- 关于自动作为不可变引用传递:将“足够大”改为“大于 16 字节”。最近,Odin 将阈值改为始终为 16 字节,无论平台如何。
- 澄清了第 6.2 章中关于指针通常使用多少位的侧边提示框。
- 在第 8.1.2 章中更清楚地说明了“过程的栈内存”的含义。
- 在第 8.1.3 章中添加了一条注释,说明“栈分配数组”的含义,并指出后面的章节将展示如何动态分配固定数组。
- 修复了 EPUB 中某些附录显示异常的问题。
- 修正了一些小的笔误。
**版本 1.3**
- 修复了 EPUB 中某些附录显示异常的问题。
- 在第 13.1.1 章中增加了关于在关闭时清理内存分配的细微说明。
- 在第 5.3.5 章中增加了关于将 Odin 用于非游戏开发的细微说明。
- 在第 3.2 章中澄清了我对“十进制”一词的随意使用。
- 修复了第 13.2 章中 `level` 不是指针的问题,并添加了关于它为什么需要是指针的信息。
- 修复了第 8.1.1 章中的一个错误,其中使用了索引 20 而不是索引 10。
- 额外的笔误修正。
**版本 1.2**
- 新增第 13 章中关于地址净化器(Address Sanitizer)的章节。
- 根据 PythagoRascal 发送给我的列表,修复了 28 个不同的笔误和语法问题。谢谢!
- 修复了 `bit_set` 章节中的缩进错误。
- 澄清了使用 `bit_set` 与使用基于映射的集合之间的区别。
- 关于 `Small_Array` 的章节已经过改进,使其更清晰。
- 提到了如果未发生截断,无类型浮点数可以隐式转换为整数。
- 澄清了 `delete` 的工作原理。
- 添加了一个提示框,说明了局部变量上的 `@static` 的作用。
- 额外的笔误修正,其中一些来自我的 Discord 上的人们。谢谢大家!
**版本 1.1**
在 1.0 版本发布后不久发布。修复了一系列笔误。
---
## 关于作者
一张作者 Karl Zylinski 的照片。他站在秋叶中。
Karl Zylinski 是一位独立游戏开发者和编程教育者。他是《理解 Odin 编程语言》一书的作者,该书以平易近人的方式教授 Odin。Karl 是视频游戏 CAT & ONION (https://store.steampowered.com/app/2781210/CAT__ONION/) 的创作者。这是首款使用 Odin 编程语言制作的商业视频游戏。他还运营着一个 YouTube 频道 (https://www.youtube.com/@karl_zylinski),分享关于 Odin 和游戏开发的教育内容。
过去,Karl 曾在 Our Machinery、Bitsquid 和 Autodesk 担任游戏引擎程序员。他还曾在 Hazelight(A Way Out)和 Friendly Foe(SOULBOUND)担任游戏程序员。
Karl 拥有天体物理学学士学位。在空闲时间,他喜欢玩电子游戏、徒步旅行、抱石攀岩和弹钢琴。
访问他的网站和博客:zylinski.se (https://zylinski.se/)。
在他的 Discord 服务器 (https://discord.gg/4FsHgtBmFK) 上讨论 Odin 和游戏开发。
相似文章
Odin dev-2026-06 发布
Odin dev-2026-06 已发布。Odin 是一种面向数据的编程语言,专为高性能系统开发而设计。
Odin 1.0 Announcement
Odin编程语言宣布将于2027年1月发布1.0版本(Odin 2027),并公布了完整规范、内联汇编、新标准库等路线图。
汤姆的命名空间:一篇 Odin 同人小说
一篇叙事风格的技术文章,探讨 Odin 编程语言中的代码组织方式,着重指出其包系统特点、缺乏包级局部命名空间的现状,以及由此引发的开发者工作流挑战。
Odin、Wikipedia 与互动诱导
本文探讨了 Odin 编程语言的 Wikipedia 页面通过文章删除讨论流程被删除一事,以及随后围绕关注度、可靠来源以及语言创建者被指控进行互动诱导的争议。
一套实用的现代色彩空间变换,适用于 Odin 语言
一个为 Odin 语言编写的库,为 UI 框架和创意工具提供正确且简洁的色彩空间变换,涵盖 OKLCh、OKLab、sRGB、Display P3 和 Rec. 2020。