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

Getting Started

This page focuses on the current Windows x86-64 object-build workflow used while the selfhosting compiler is being completed.

Requirements

  • Windows x64
  • the packaged msplc-project-debug.exe
  • the units\ directory containing the Semantic .se compiler units
  • enough free disk space for build artifacts and logs

The runner package is intentionally self-contained for debugging. You do not need to open the EXE by double-clicking; the batch files pass the required arguments.

1. Start the normal build

START-HERE.bat

The stable runner:

  • scans the Semantic units;
  • builds a best-effort project index;
  • starts several isolated worker processes;
  • gives each unit its own hard timeout;
  • keeps successful .obj files even when other units fail;
  • records a status file and worker log for each unit.

2. Retry slow units

RETRY-120S.bat

A timeout is a maximum worker runtime. A unit that encounters a real compiler error can fail immediately; it does not wait for the timeout budget to expire.

3. Inspect current status

STATUS.bat

Typical summary:

STATUS total=95 ready=... compiling=0 queued=0 timeout=... failed=... objects=...

4. Produce a diagnostic report

MAKE-REPORT.bat

The report groups unit status, errors and object paths so backend failures can be fixed by error family instead of one file at a time.

Where objects are written

build\
  objects\
    units\
      <unit>\
        status.json
        worker.log
        objects\
          00000_*.obj
          00001_*.obj
          ...

Why isolated workers?

A goroutine timeout cannot safely stop a compiler path that is stuck in native lowering. A child process can be terminated by the parent without losing artifacts already produced by other workers.

flowchart TD A[95 Semantic units] --> B[Worker queue] B --> W1[Worker 1] B --> W2[Worker 2] B --> W3[Worker N] W1 -->|success| O1[Persist .obj] W2 -->|compiler error| F1[Record FAILED] W3 -->|hard timeout| T1[Kill worker / record TIMEOUT] O1 --> R[Continue queue] F1 --> R T1 --> R

Important distinction: FAILED vs TIMEOUT

FAILED means the compiler returned an actual diagnostic such as an unresolved binding or unsupported native node.

TIMEOUT means the worker was still running when its hard time budget expired and was killed.

Increasing the timeout only helps the second category.


Next: Architecture →