Files
brolang/README.md
T
2026-06-12 18:07:21 +02:00

56 lines
1.9 KiB
Markdown

# brolang
Prototype error-tolerant Brolang compiler written in Odin.
```sh
odin build . -out:brolang
./brolang examples/programs/prototype -o /tmp/prototype
/tmp/prototype
```
Compilation phases are isolated under `compiler/`:
```text
package loader -> per-file lexer/parser/AST -> checker/HIR -> lower/IR -> opt -> LLVM -> zig cc
```
Source diagnostics do not block executable generation. When recovery is
possible, invalid code lowers to runtime diagnostic traps and the compiler
returns status `1`. Infrastructure or backend failures return status `2`.
Top-level function bodies are semantically checked lazily when a concrete
specialization is demanded.
Every immediate `.bro` file in the input directory belongs to the root
package. Imports are relative directory paths and are local to the file that
declares them:
```bro
import "../math"
other_math :: import "../math"
value :: math.sum(other_math.value, 1)
```
Current prototype features:
- Newline-terminated, multiline statements; `}` may terminate a block's final statement
- `#` comments
- Immutable `::` bindings, mutable function-local `=` bindings, and `_` sinks
- `i8`, `i16`, `i32`, `i64`, and loose integer-constrained `int`
- Contextual integer constants and compile-time folding of literal addition trees
- Directory packages with merged declarations and file-local relative imports
- Qualified imported globals and functions with package-aware symbol mangling
- Demand-monomorphized Brolang and C-ABI functions
- Checked signed addition
- Static, eager runtime, and deferred problematic globals
- Runtime diagnostics followed by `llvm.trap`
See [LANGUAGE.md](LANGUAGE.md) for the concise implemented and planned language
feature ledger, and [TODO.md](TODO.md) for the implementation roadmap.
Compiler exit statuses:
- `0`: executable produced without source diagnostics
- `1`: executable produced with source diagnostics and embedded traps
- `2`: executable could not be produced