3 Limitations
ourc is under active development, and full parity with rustc’s test suite is a goal of the project. This node states the promise, how it was measured against v0.1.1, and what is out of scope today.
Its correctness promise is about the programs it accepts.
3.1 The promise
ourc compiles a subset of Rust correctly, and refuses the rest. If ourc accepts a program, the executable it builds produces the same output and exit code as rustc’s build. When it cannot compile something faithfully, it refuses it instead of guessing.
3.2 How it was measured
Every test in rustc 1.99.1’s tests/ui suite, 20,072 files, was run against the v0.1.1 release binary with ui-full.sh. A run-pass test is OK if ourc accepts it and the built executable’s stdout and exit code equal rustc’s, and WRONG if they differ. A check-pass or build-pass test is OK if ourc accepts it; a compile-fail test is OK if ourc rejects it.
The 84 remaining run-pass tests could not be built or run by rustc itself in the test environment, and are not counted. “crash” counts both ourc crashing and a program it built crashing where rustc’s does not.
3.3 What is not supported
A refused program names the construct ourc stopped at. These are the largest areas outside the v0.1 subset, measured over the refused valid programs.
3.4 Accepts invalid programs
ourc implements only part of rustc’s checking: borrow checking, trait coherence, lint-level errors and much of type inference are partial. It accepts some programs that rustc rejects, 3,975 of the 12,159 compile-fail tests. Closing that gap is part of the goal of full rustc parity; until then, use rustc to check whether a program is valid Rust.
3.5 Platform and resources
llc (LLVM 16 or newer) and a C compiler and linker, cc, at run time.f32, i128 and u128 are refused.--time-limit, --mem-limit; 0 lifts either). ourc compiling its own source needs both lifted.