69 lines
3.4 KiB
Markdown
69 lines
3.4 KiB
Markdown
# language features
|
|
|
|
## IMPLEMENTED
|
|
|
|
### source and declarations
|
|
|
|
- newline-terminated statements and `#` comments
|
|
- immutable `::` bindings, mutable function-local `=` bindings, and `_` sinks
|
|
- immutable and mutable locals
|
|
- package-level globals and functions
|
|
- interned identifiers
|
|
|
|
### types and expressions
|
|
|
|
- exact-width `i8` through `i64`, `u8` through `u64`, `f32`, `f64`, `isize`, `usize`, `void`, and inferred integer-constrained `int`
|
|
- target-dependent atomic C primitives from `c_char` through `c_longdouble`
|
|
- C primitives remain semantically distinct from exact-width Brolang primitives until target lowering
|
|
- contextual integer literals and constant folding of addition and negation trees
|
|
- strict numeric conversions, checked integer addition, and unary negation
|
|
- arrays `[N]T`, sentinel arrays `[N;S]T`, single-item pointers `@T`, many-item pointers `*T`, sentinel many-item pointers `[*;S]T`, pointer offsets, slices, and explicit slicing
|
|
- immutable UTF-8 string literals typed as pointers to static sentinel arrays: `@[N;0]u8`
|
|
- pointer-to-array `.len`, indexing, and slicing without explicit dereference
|
|
- arrays expose `.len` but not `.ptr`; slices and pointers-to-arrays expose `.ptr` and preserve sentinel information when available
|
|
- information-preserving and information-forgetting pointer-to-array decay and sentinel slice/pointer weakening; array values never implicitly decay
|
|
- narrow immutable zero-terminated byte pointer conversion to `*c_char` and `[*;0]c_char`, without general `u8`/`c_char` interchange
|
|
- optionals with trapping postfix `?`, `orelse`, and nullable pointer representation
|
|
- source-order native structs, keyed literals, and defined or opaque pointer-only `c_struct`
|
|
- postfix pointer dereference, general writable locations, function calls, assignments, and returns
|
|
|
|
### functions and packages
|
|
|
|
- demand-monomorphized functions
|
|
- bodyful `c_func` definitions using the c calling convention
|
|
- bodyless `c_func` declarations with exact, globally unique external symbol names
|
|
- concrete-only foreign signatures
|
|
- Apple Silicon C ABI scalar and pointer lowering, including narrow integer extension attributes
|
|
- directory packages with merged declarations
|
|
- file-local relative imports, aliases, and qualified member access
|
|
- relative `.h` imports as synthetic package namespaces
|
|
- transitive external C function prototypes, typedef chains, C scalars, and pointers to opaque C records
|
|
- bodyless manual and imported C variadic declarations with target-aware default argument promotions
|
|
- reference-time diagnostics for unsupported imported C declarations
|
|
|
|
### compiler behavior
|
|
|
|
- error-tolerant compilation with runtime diagnostic traps
|
|
- lazy semantic checking of demanded function specializations
|
|
- demand-driven LLVM declarations for referenced foreign functions
|
|
- ordered linking of additional c sources, objects, and libraries
|
|
- replaceable dynamically loaded libclang C-import backend
|
|
- per-compilation C-header import caching by canonical path, target, ordered include paths, and ordered defines
|
|
- static, eager runtime, and deferred problematic globals
|
|
|
|
## PLANNED
|
|
|
|
### foreign functions and linking
|
|
|
|
- exporting brolang functions to c
|
|
|
|
### scalar and compound types
|
|
|
|
- tuples and native variadic functions
|
|
- C unions, C enums, and by-value C record ABI lowering
|
|
|
|
### advanced c imports
|
|
|
|
- C enums, external variables, function pointers, callbacks, macros, and static inline functions
|
|
- target-specific by-value C record and union ABI lowering
|