Luce Base
LuceEngineeringLuciaOS

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, and luce bind cover every use; no successor language regrets this.
  • Implicit numeric conversion. The source of half of C's integer bugs. Literals still adapt to context.
  • 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. Reserved (§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, alloca, restrict, register, long double, _Complex. GNU extensions, not representable by the backends, or not portable.
  • Variadic function definitions and bit-field widths in Base structs. Deferred until the export and layout rules have a corpus behind them.
  • Classes, reference counting, closures, built-in collections, owned strings, workers. The runtime. Use full Luce.