Skip to content

DiscoC v0.2.0

Latest

Choose a tag to compare

@DiscoManOfficial DiscoManOfficial released this 21 Oct 03:24
2ff90df

DiscoC v0.2.0

DiscoC v0.2.0 is the stable-channel release of this experimental pre-1.0 compiler/toolchain. Stable-channel naming does not make it production-ready or establish a stable language, ABI, or object-format compatibility guarantee.

Highlights

  • Explicit optimization policies: -O0 remains the default; -O1 (also -O) selects local optimization, -O2 selects the speed-oriented global policy, and -Os selects size-oriented candidates. A native CMake Release build does not implicitly optimize source programs. See the optimization contract.
  • Correctness-oriented SuperFX code generation, expanded backend/differential/raster regression coverage, and mixed-optimization-level objects using the current call ABI and object format.
  • The gem-chess scene and complete-ROM demos. The gem-chess viewer is a scene viewer, not a chess rules engine or real-time game.
  • Native packages for Windows MSVC, Windows MinGW, Linux x86_64, and macOS arm64, plus source, SNES demos, and recorded validation evidence. The optional DOS package is experimental and has no runtime validation.

Downloads and checksums

The release contains four native distribution archives, the optional DOS archive, source, SNES demos, an evidence archive, BUILD-INFO.json, FINAL-NOTES.md, and SHA256SUMS.txt (11 attached files).

Use SHA256SUMS.txt to check the ten accompanying files. The checksum manifest itself has SHA-256 08e8aa174c6efcd5aaf2a9088a0fe00f3514c3b3d8d0d11ff54207221c8e59a0.

The packages retain their accepted filenames and bytes; the original native CI archives were not repacked. See BUILD-INFO.json, the evidence archive, and the pinned reproduction guide.

Source identity and completed validation

The v0.2.0 tag targets merged commit 2ff90df8e11410537ebabfc0bbd51ad5919cadd4. The prepared packages and detailed measurements identify build/source commit be39ef96037d1762814f8445f4059ff557790dd5. Both commits have the exact same Git tree, 53390aa43de224eabfc011cfd28134b9c3b5c87a; the merge changes commit ancestry, not source-file content. Package and evidence identities are preserved, not relabeled as new builds or new measurements.

Already-recorded validation for be39ef96037d1762814f8445f4059ff557790dd5 includes:

  • Local Release 395/395 and Debug 387/387 tests passed, with zero failures, skipped tests, or disabled tests.
  • All 36 functional, 36 independent Mesen, 36 assembly-identity, and 36 observable-RAM cross-policy cases passed. Nine positive and nine negative complete-ROM demo configurations passed.
  • Exact-source CMake CI and Static Analysis completed successfully across 11 checkout jobs; four native distribution archives were produced and smoke-tested.

Post-merge CI independently completed successfully on tagged commit 2ff90df8e11410537ebabfc0bbd51ad5919cadd4:

The attached FINAL-NOTES.md is an unchanged historical preparation-time validation record, not an updated publication-status document. Its original source identity, wording, and scoped historical diagnostic-replay limitation remain intact. It does not claim complete historical-harness-source closure. This release description records the final tag, post-merge CI, and publication context without rewriting that evidence.

Compatibility and limitations

  • The language remains DiscoC Language Baseline 0.1, not ISO C. Syntax and ABI may change before 1.0. Emission remains explicitly little-endian object format v7; rebuild tools and objects together when upgrading.
  • A linked .bin is a fixed-origin GSU payload, not a complete SNES ROM or position-independent code. The SNES host owns copying, bus ownership, and PPU configuration. See the loading contract.
  • SPC700 remains a frontend/capability/verified-IR foundation, with no executable backend. OpenSNES is neither bundled nor required.
  • Optimization is bounded and immature, not globally optimal. Large balanced switches can still exceed local branch range. Interbank code calls, aggregate-by-value ABI, independently placed RAM code and ROM constants, general inline assembly, native WLA-SuperFX export, and profile-guided optimization are not supplied by this release.
  • DOS is cross-compiled only; runtime behavior is UNVERIFIED. MSVC warnings C4456, C4244, and C4267 remain visible. Earlier Windows long-path failures remain recorded; the shorter-path mitigation does not establish general long-path support.
  • Mesen/model validation is not physical-hardware validation or exhaustive fuzzing. Functional instruction counters, GSU cycles, host wall time, and completed-image FPS are distinct measurements. RC comparison signatures are incompatible across all 36 recorded rows; no apples-to-apples RC speedup claim or invented RC gem baseline is made.
  • The gem and interactive-shapes RAM hosts accept O2/Os, not O0/O1. Source regression checks, ROM execution, and image/timing evidence have different scopes; a successful build alone does not validate display output. See the testing guide.

Contributor credits

Thanks to k0b3n4irb for independently authored correctness fixes and regression tests retained in this release line:

Original authorship and cherry-pick provenance remain intact. The contributor's OpenSNES benchmark branch was deferred, not merged wholesale. See the project contributor list.

SNES demo disclaimer

The included SNES demo ROMs do not use proprietary Nintendo code. Their hosts and generated payloads contain no Nintendo SDK code, retail-game ROM code, or proprietary Nintendo assets. Nintendo and Super Nintendo are trademarks of their respective owner. This independent project is not affiliated with or endorsed by Nintendo; emulator validation is not physical-hardware validation.