Files
brolang/LANGUAGE.md
T

3.4 KiB

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