ALUX programming guidelines
This book develops the foundation needed to understand and contribute to ALUX’s meaning-first codebase, beginning with a central principle of Denotational Design: define what programs mean before deciding how they work.
Following Conal Elliott, it treats computation as a clear mathematical object rather than an opaque sequence of steps.
Specifications are expressed as simple, compositional capability traits that describe what a program means. Interpreters provide interchangeable ways to realize those meanings.
The result is software whose composition rules, implementation obligations, and valid equations are easier to see and test.
Concepts and Insights explain useful programming machinery. Denotational Design explains how to decide what machinery should preserve.
How to read this book
Read the book in three layers:
- The Semantic View introduces denotations and compositionality, laws and interpretations, and the relationship between meaning and representation.
- Design by Meaning in Rust turns that view into small capabilities, derived extensions, first-order programs, and thin interpreters.
- Concepts and Insights explain important execution models, encodings, transformations, and connections.
The semantic principles are language-agnostic. Rust is the primary implementation language, and a concurrent language pipeline connects these principles to Tolang.
Who this book is for
- Programmers who want complex software to remain modular, composable, testable, and maintainable as it evolves.
- Developers seeking to connect category theory, type systems, and program design.
- Readers familiar with representational and operational techniques—such as free monads, continuation-passing style (CPS), and defunctionalization—who want to understand how that machinery serves, rather than defines, meaning-first design.
- Readers familiar with dependent types and proof-oriented programming who want to apply that mental model while writing high-performance Rust.
- Contributors who need to read meaning-first Rust specifications and understand how a concurrent language can be compiled without making its compiler the definition of the language.