Understanding the Odin Programming Language
Mastering the Odin Programming Language
Do you have a desire to dive into the Odin Programming Language and pull back the curtain on low-level systems programming?
Understanding the Odin Programming Language is a comprehensive guide designed to take you from the fundamental basics to the most sophisticated concepts of the language.
🎯 What You Will Master
This book is tailored for individuals who already possess some foundational programming knowledge. It focuses on turning you into a better craftsperson by ensuring you truly understand the tools you are using.
- Procedures and logic flow
- Manual Memory Management (Taking control of the heap)
- Parametric Polymorphism
- Data-Oriented Design (DOD)
- Low-level systems architecture
"I highly recommend Karl Zylinski's excellently written book on Odin—perfect for anyone who wants to learn and understand the Odin programming language. I had a good experience with garbage collected language like Golang and the book really helped me to transition to a non garbage collected language like Odin. But the writing style here is so good, that I didn't have any issues reading through the whole thing in a couple days." — Satisfied Reader
📚 Acquisition & Formats
Whether you prefer a browser-based experience or a dedicated e-reader, there is a version for you.
| Format | Features | Where to Buy |
|---|---|---|
| HTML | Beautiful layout, high navigability | store.zylinski.se, Itch.io |
| eBook | Optimized for e-readers and apps | store.zylinski.se, Itch.io, Amazon Kindle, Google Books |
Pro Tip: If you are undecided, the author suggests purchasing via Itch.io or store.zylinski.se.
🛠 Version Evolution
The book is constantly evolving to keep pace with the language. Below is a visualization of the update trajectory:
📝 Detailed Changelog
Version 1.10
- Major Change: Section 8.3 now focuses on the
[dynamic; N]Ttype (Fixed Capacity Dynamic Array). Now deprecated in favor of the Fixed Capacity Dynamic Array.Small_Array- Updated Appendix B for consistency with the new array type.
- Added notes to Appendix A regarding the new handle-based map in the core library.
Version 1.9
- Core Library Update: Adjusted
core:osusage to align with the "os2" changes implemented in February 2026. - Specific updates were required for
os.read_entire_fileandos.write_entire_file. - Refined the instructional "bubble" in section 10.1.1 regarding the disabling of bounds checking.
Version 1.8 (The Strings Overhaul)
- Chapter 11 Rewrite:
- Improved explanation of UTF-8 rune decoding.
- Converted the null termination "bubble" into a full section.
- Clarified the ambiguity of the term "string constant."
- Updated the Windows UTF-16 section to utilize the
cstring16type. - Enhanced the "Deallocating strings mixed with string constants" section by using a map instead of an array.
- Other Fixes:
- 5.3: Clarified the
.(Type)syntax for union variant checking. - 7.8: Added the "contextless" requirement for
@initand@fini. - 15.2: Relocated the
bit_setinitializer bubble.
- 5.3: Clarified the
Version 1.7
- Fixed broken links (Discord, WebGPU).
- Corrected typos in 5.1.3 and 23.
- Clarified the range for
rand.int_max(9.7). - Improved the
Special_Arrayexample (14.3) and fixed Appendix D compilation.
Version 1.6
- New Content:
- Section 17.5: "Breaking cyclic dependencies using callbacks" (covers rudimentary interfaces).
- Section 26.10: "Code generation" introduction and examples.
- Refinements:
- Updated tracking allocator examples (13.1.2) to reflect new "bad free" handling.
- Cleaned up the Raylib + Box2D sample in Appendix D.
- Added a favicon to the HTML version for easier tab identification.
- Clarified that dynamic literals allocate memory (23.3).
- Fixed vector direction in 8.1.3 and standardized
draw_imagenaming in 8.1.4.
Version 1.5 (The Great Edit)
- Performed a full-book editing pass for maximum clarity.
- Key Adjustments:
- Refined terminology: now using "member" and "value" for enums.
- Renamed Chapter 26 to "A few more things..."
- Added discussions on
#load,@rodata, and creating clean-compiling libraries. - Introduced section 7.8 (
@init/@fini) and improved Loop logic (4.3). - Moved dynamic literals to Chapter 23 ("Things in Odin to avoid") as they are disabled by default.
- Added nuance to the "build system" discussion in Chapter 18.
- Included links to CAT & ONION on Itch.io.
- Mentioned
#reversein Chapter 4.
Version 1.4
- Updated the rule for automatic immutable reference passing.
- The threshold was changed from "sufficiently large" to a specific mathematical limit:
💻 Code Example: The Odin Way
To give you a taste of the language's clarity, consider how Odin handles basic structures:
package main
import "core:fmt"
// A simple data-oriented structure
Person :: struct {
name: string,
age: int,
}
main :: proc() {
p := Person{"Karl", 30}
fmt.println("Hello, %s!", p.name)
}
Get the most current version of the book by simply re-downloading it from your original point of purchase!