Skip to content

v1.0.0

Choose a tag to compare

@hiroshiyui hiroshiyui released this 14 Aug 11:14
· 899 commits to main since this release

The toolchain stands on its own. v0.1.0 said the number would reach 1.0.0
"when the toolchain stands on its own, not when the language does" — and this is
that release. selfhost/compiler.pas is the only compiler, seed/pascalc.ll
builds it, and a clone with no C++ compiler and no LLVM development files
compiles the compiler, passes 435 tests, reaches the stage-2/stage-3 fixed point
and proves 43 SMT rules.

The language is unchanged from 0.1.0 — both standards were already complete. The
major version is about what it takes to build this, and about pascalc-s0
disappearing from the command line.

Removed

  • Stage 0, the C++ compiler. src/ and selfhost/difftest.sh are deleted;
    selfhost/compiler.pas is the only compiler. seed/pascalc.ll — a working
    compiler in LLVM IR, committed — is what builds it, so a checkout still builds
    itself. (ADR-0085)
  • LLVM as a build dependency. Nothing links libLLVM; cmake needs no
    LLVM_DIR, only clang on PATH to assemble IR.
  • The differential test, which compared two independent implementations over 436
    sources. Nothing replaces it, and ADR-0085 says what that costs.

Added

  • tools/pascalcc — compile and link. pascalc writes IR and stops,
    permanently: no standard Pascal program can start an assembler.
  • --dump-tokens, --dump-ast, --dump-sema, --dump-all on pascalc, and
    157 error-path sources adopted as real test cases with .err goldens, taking
    the suite from 279 to 435.

Changed

  • pascalc is quiet on success and writes file:line:col: error: message
    on failure, where it used to write three dump sections unconditionally.
  • The repository is x86-64 Linux only: the seed carries a target triple.
    Tag v0.1.0 is the last commit where a C++ compiler could reproduce a
    compiler from source alone.

Fixed

  • cmake --build left a stale build/bin/pascalc when the compiler failed to
    build, so ctest passed against a compiler that did not match the source.
  • A fresh configure could not create build/bin once no C++ executable target
    remained.
  • selfhost/badparse/variant-in-variant.pas had been accepted by both compilers
    since ADR-0026 and was no longer a negative test; a differential oracle cannot
    see a test that has stopped testing anything. Deleted — the feature is covered
    by tests/nested_variants.pas.