Luce Base
LuceSourceLuciaOS

20. Exclusions

Absent from Base, each with the reason it is not a loss:

  • The preprocessor, conditional compilation, macros. Generics, constants, per-target modules, asm ARCH, fmt parameters, luce.location, and luce bind cover every use.
  • Implicit narrowing, signedness change, and integer-float conversion. These change values; the one implicit conversion, same-signedness widening, cannot.
  • NULL and nullable-by-default pointers. T*?.
  • ->. Auto-dereference on ..
  • Braces, semicolons, &&, ||, !, ++, --, the comma operator, statement expressions, do while, switch fallthrough. One parser, one formatter, one spelling per idea.
  • goto. Not in the language, and an ordinary name (§8.6).
  • setjmp/longjmp. ISO C, but incompatible with defer, errdefer, and initialisation analysis. A longjmp through a Base frame is undefined. A library that reports errors through it (libpng, libjpeg, the Lua C API) is bound through a shims.c function that contains the setjmp and returns a status.
  • Computed goto, VLAs, unbounded alloca, register, long double, _Complex. GNU extensions, not representable by the backends, or not portable. Frame storage of a size the program bounds is memory.frame (§12.7).
  • Variadic function definitions, bit-field widths in Base structs, designated array initialisers, a storable result type. Deferred until enough exported and C-layout code exists to test the rules against; a storable result is an enum with two cases today.
  • Classes, reference counting, closures, built-in collections, owned strings, workers. The runtime. Use full Luce.