FAQ
Questions,
answered briefly.
Short answers to the questions that come up most often. Each answer links to the chapter of the manual or specification that states the full rule.
§ 01
General
What the language is and where it stands today.
What is l?
l is a small, statically typed language that compiles to native code through LLVM. Function bodies are expressions, numeric types never promote implicitly, and memory is explicit but unmanaged. The manual introduces the language chapter by chapter.
Is l ready for production use?
No. The language is experimental and under active development, so syntax, semantics, and tooling can change between snapshots without a compatibility period. Prebuilt compilers track the main branch rather than versioned releases.
Which platforms does the compiler run on?
Prebuilt compilers are published for macOS on Apple silicon and for Linux on x86-64 and AArch64. Code generation supports any target with an LLVM code generator and a C scalar model the language understands; linking supports Linux, macOS, and bare-metal ELF. See Install and Compiler Workflow.
§ 02
Language
How the memory model and the C boundary work.
Does l have a garbage collector?
No. There is no garbage collector, reference counting, or ownership analysis. Aggregate initializers allocate storage that lasts until the allocating function returns, and the language performs no lifetime, bounds, or aliasing checks. The Memory Model chapter explains what that means in practice.
Why can't I assign to a let binding?
A let binds a name to an immutable value and allocates nothing. Mutable state lives in storage: an aggregate initializer allocates backing, a field projection such as cell.value yields a pointer to a slot, and assignment stores through that pointer. See Storage and Loops.
How do I call a C function?
Declare it without a body, writing its types with @CType, and link against the library that defines it. A c"..." literal produces a zero-terminated string for such calls. The Targets and C Interoperation chapter covers the supported ABI boundary.
§ 03
Project
Getting involved and getting help.
Where do I report a problem?
Open an issue in the GitHub repository. Include the compiler version from l --version, the target, and a small source file that reproduces the problem.