f0f94f30e1e9a68de0000fae1614ac0290511a7e
- parser: add parserIsTypeArgListAhead() for Func<Type>(args) and Type<T> { ... }
- hir_lower: method call desugaring with typeName tracking, self keyword,
ekField typeName propagation, variable type tracking, strip '*' suffix
from pointer type names in method calls, fix externFuncs buffer overflow
(64 -> 256 elements) that corrupted structCount
- qbe_backend: QBE_FindStruct, QBE_FieldOffset, QBE_TypeSize helpers;
hStructInit field-by-field codegen; hFieldPtr with offset + auto-load;
hAssign/hStore special case for hFieldPtr (generate pointer, not value);
fix null as *HirNode -> null as *void for extraData comparisons
Bux Programming Language
Status: Self-hosting phase —
buxc2compiles.bux→ QBE SSA → native binary. Bootstrap (buxc, Nim) maintains backward compatibility via C transpiler.
Bux is a fast, compiled, strongly-typed systems programming language. Features a QBE backend for native code generation, raw multi-line strings, gradual ownership, async/await, generics, algebraic enums, and a package manager.
Quick Start
# Build the bootstrap compiler (Nim)
make build
# Create a new project
bux new hello
cd hello
# Build and run
bux run
Syntax Preview
Hello World
import Std::Io::PrintLine;
func Main() -> int {
PrintLine("Hello, Bux!");
return 0;
}
Raw Multi-line Strings
// Backtick strings: no escape processing, multi-line
func Main() -> int {
PrintLine(`Hello \n World`); // prints: Hello \n World (literal)
PrintLine(`Line 1
Line 2
Line 3`); // multi-line, newlines preserved
return 0;
}
Error Handling with ?
enum Result {
Ok(int),
Err(String)
}
func Divide(a: int, b: int) -> Result {
if b == 0 {
return Result_NewErr("division by zero");
}
return Result_NewOk(a / b);
}
func Compute() -> Result {
let x: int = Divide(10, 2)?; // auto-propagates Err
let y: int = Divide(x, 5)?;
return Result_NewOk(y);
}
Structs and Methods
struct Rectangle {
width: int;
height: int;
}
extend Rectangle {
func Area(self: Rectangle) -> int {
return self.width * self.height;
}
}
func Main() -> int {
let rect: Rectangle = Rectangle { width: 10, height: 5 };
PrintInt(rect.Area());
return 0;
}
Generics
func Max<T>(a: T, b: T) -> T {
if a > b {
return a;
}
return b;
}
func Main() -> int {
let m: int = Max<int>(10, 20);
PrintInt(m);
return 0;
}
Async/Await
import Std::Io::{PrintLine, PrintInt};
async func Compute() -> int {
PrintLine("Compute: step 1");
bux_async_yield();
PrintLine("Compute: step 2");
return 42;
}
func Main() -> int {
let h1 = spawn Compute();
let r1: int = h1.await as int;
PrintInt(r1);
return 0;
}
Hash Map
import Std::Map::{Map, Map_New, Map_Set, Map_Get};
func Main() -> int {
let m: Map = Map_New(16);
Map_Set(&m, "answer", 42);
PrintInt(Map_Get(&m, "answer"));
return 0;
}
Features
| Feature | Status |
|---|---|
| Types | Primitives, pointers, slices, tuples, structs, enums, unions |
| Generics | Generic functions (monomorphization) |
| Algebraic Enums | Enums with data (Result, Option) |
| Pattern Matching | match with guards |
| Methods | extend blocks for struct methods |
| Interfaces | interface + extend for trait-like behavior |
| Error Handling | Result<T,E>, Option<T>, and the ? operator |
| Standard Library | Io, Array, String, Map, Fs, Mem, Set, Path, Math, Task, Channel |
| Backend | QBE native codegen (self-hosting), C transpiler (bootstrap) |
| Strings | Raw multi-line backtick strings (...), C-string interop |
| Gradual Ownership | @[Checked] + &T/&mut T borrow checking |
| Async/Await | async func, spawn, .await with stackful coroutines |
| Concurrency | Task/Channel (pthread-based), bux_async_yield/spawn |
| CTFE | const func — compile-time function execution |
| Trait Bounds | func Max<T: Comparable>(a: T, b: T) -> T |
| Package Manager | bux add, bux install, bux.lock, path + git deps |
| Tooling | bux new, bux build, bux run, bux check |
Project Structure
bux/
├── src/ # Bootstrap compiler (Nim)
├── src_bux/ # Self-hosting compiler source (Bux)
├── _selfhost/ # Self-hosting build artifacts
├── stdlib/ # Standard library (.bux + .c runtime)
│ └── Std/
│ ├── Io.bux, String.bux, Array.bux, Map.bux
│ ├── Fs.bux, Mem.bux, Set.bux
│ ├── Path.bux, Math.bux
│ └── Task.bux, Channel.bux
├── examples/ # Example programs
├── tests/ # Unit tests (Nim)
├── docs/ # Documentation
├── README.md
├── PLAN.md # Roadmap to self-hosting
└── Makefile
Build & Test
# Build bootstrap compiler (Nim → C)
make build
# Build self-hosted compiler (Bux → QBE SSA → native)
make selfhost
# Run all tests
make test
# Run example programs
make test-examples
# Clean build artifacts
make clean
Documentation
docs/LanguageRef.md— Language referencedocs/Stdlib.md— Standard library documentationdocs/BuildAndTest.md— Build and test guidePLAN.md— Roadmap to self-hosting
License
MIT
Languages
C
74.6%
Nim
23.4%
HTML
1.2%
Makefile
0.3%
Go
0.3%