You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
rss: lower builtin value-type .clone() to Rust clone (fix E0425); document release fast path for package check
#1 (List<T>.clone() etc.): `.clone()` on a builtin value type whose clone the
checker resolves (List/Bytes/Buffer) typechecked via the Clone protocol but lowered
to a dangling `List_clone`-style call -> rustc E0425. The lowerer now emits Rust's
`.clone()` for these (they lower to Clone Rust types). Same frontend-accepts/
backend-fails class as the borrowed-match E0308 fix. Removes the need for manual
copy helpers in source-shaped ports. Regression test in checker_lowering/stdlib.
#2 (slow package check in debug): documented the release-binary fast path in
README (Performance) and cross-referenced from BUGS.md RSS-11 — debug leaves the
~O(n^3) generic-substitution path unoptimized; release is usable.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+9Lines changed: 9 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -473,6 +473,15 @@ rss test [--all] [--json] [--filter <substring>]
473
473
- `rss pkg publish --dry-run`runs pre-publish checks without uploading and reports whether the package is ready.
474
474
- `rss run`lowers a single file (or a package with `src/main.rss`) to a temporary Rust package and delegates to `cargo run`; package lowering carries enabled `[native.rust]` wrappers through as generated Cargo path dependencies and maps `native/bindings.rssbind.toml` call bindings into generated Rust calls. `--dry-run` prints the generated `Cargo.toml`, lowered Rust, and cargo invocation without executing it; `--release` delegates to Cargo's release profile, `--out-dir` keeps the generated package, and arguments after `--` reach the program through the core `Args` API.
475
475
476
+
> **Performance — use a release-built `rss` for package-scale checking.** On large, generics-heavy packages, `rss check` / `rss pkg` can be noticeably slow when run from a **debug** build of the compiler, because generic type-argument substitution currently re-parses type strings at each nesting level (a known, deferred ~O(n³) path — see `BUGS.md` RSS-11). The debug build leaves that path unoptimized; a release build optimizes it enough to be comfortable. For repeated package-wide validation (e.g. an inner edit→check loop on a big codebase), build the compiler once in release and use that binary:
> This is a temporary fast path; the durable fix is the parse-once refactor tracked in RSS-11.
484
+
476
485
### Execution backends
477
486
478
487
These are **not equivalent backends** — they cover different slices of the language. Only Rust lowering executes the full language; it is the semantic reference. The others are progressively narrower fast-feedback/optimization tiers that **fail closed** (or fall back) rather than silently diverging, and the N-way differential (`tests/backend_differential.rs`) gates that they agree on their shared supported subset.
0 commit comments