Speak in meaning. Think beyond syntax. Built beyond language.

FAQ

Is MSPLC already fully selfhosting?

Not yet. Real Semantic compiler units are producing native object files, but the complete Stage 2 → Stage 3 bootstrap has not been verified end-to-end.

Why not just embed a working EXE in the Semantic source?

That can be a temporary bootstrap/transport trick, but it does not demonstrate that the compiler compiled itself. The final selfhosting proof must derive the next compiler from the compiler’s Semantic source.

Why produce many .obj files first?

It localizes failures. A monolithic build tells you only that “the compiler failed”. Per-unit objects show which modules already native-lower and preserve successful work while the remaining backend gaps are fixed.

Why do some workers finish in one second even with a 120-second timeout?

The timeout is a maximum. A worker that encounters a deterministic compile error exits immediately. Only a worker that is still running after 120 seconds is killed as a timeout.

Why use child processes instead of goroutines?

A stuck compiler path cannot be reliably force-stopped as a goroutine. A child process can be hard-killed without stopping the parent queue.

Why does the compiler reject unknown semantics instead of guessing?

Because generated native code must preserve program meaning. Guessing a field layout, ABI, ownership rule or control-flow behavior can create a binary that appears to work while being semantically wrong.

Are .se, .sp and .spz different IRs?

No. They are representations/transports around the same SemanticProgram/UAST model. The project architecture aims to maintain one canonical semantic truth.

Does the native backend require GCC, Clang or an assembler?

The intended direct native path constructs machine/object/executable artifacts itself. External assembly/compiler routes may be useful as verification paths but are not the target dependency for selfhosting.