Compiling to C(++) gives us C(++)'s portability and a dirty/better way to 
interop with C(++): features like `.emit`, `.header`, `.incompleteStruct`, 
`.codegenDecl` are harder to do with LLVM.

That said, C is a pretty bad compiler target language because it doesn't 
support precise stack tracing for GCs nor efficient exception handling. Thanks 
to its preprocessor you never know which identifiers might actually be unusable 
as object fields (`obj->unix` can fail to compile...). LLVM doesn't have these 
problems.

Reply via email to