reader: feature set #{:jolt :default}, clause-order matching (RFC 0002)
jolt no longer satisfies :clj in reader conditionals. The shortcut was a measured net liability: :clj branches carry JVM interop and JVM-specific test expectations jolt fails, and they shadowed :default branches jolt passes. A/B over the suite: clj,default = 4967 assertions / 4324 pass / 119 errors; jolt,default = 5069 / 4470 / 81 (+146 pass, -38 errors, +8 clean files). Baselines raised to 4470/86. Matching is now by CLAUSE order like Clojure — the first clause whose key is in the feature set wins (#?(:default 5 :clj 6) is 5 everywhere); the old code scanned for :clj first, then :default, regardless of position. Foreign clj-targeted libraries are a property of the LOADING CONTEXT, not the platform: reader-features-set! opts a load into a compatibility set, and the SCI bootstrap/runtime tests load SCI under ["jolt" "clj" "default"] (its .cljc selects implementations via :clj with no :jolt branches). JOLT_FEATURES remains the process-wide override. RFC 0002 records the decision with the measured data; spec 02-reader S18 is now normative (clause order, documented feature set, per-context override). Reader tests updated to the portable set + an opt-in round-trip.
This commit is contained in:
parent
2224e40afc
commit
fdfd086df6
8 changed files with 164 additions and 33 deletions
|
|
@ -127,9 +127,14 @@ checks → UNVERIFIED (rows to add).
|
|||
platform satisfies, else nothing. `:default` matches any platform.
|
||||
`#?@(…)` splices a sequential form into the surrounding context.
|
||||
- Feature keys are implementation-defined; each implementation MUST document
|
||||
its feature set. ⚠ jolt currently satisfies `:clj` (inheriting JVM branches
|
||||
in `.cljc` files) — under review; the portable convention is
|
||||
*own-key + `:default`*.
|
||||
its feature set, and SHOULD follow the portable convention *own dialect key
|
||||
+ `:default`*. Matching MUST be by **clause order** — the first clause whose
|
||||
key the platform satisfies wins (`#?(:default 5 :clj 6)` is `5` everywhere)
|
||||
— not by key priority. Implementations SHOULD provide a per-loading-context
|
||||
compatibility override for foreign-dialect libraries. (jolt:
|
||||
`#{:jolt :default}`, opt-in via `reader-features-set!`/`JOLT_FEATURES`;
|
||||
decision + A/B data in RFC 0002 — inheriting `:clj` cost 146 suite
|
||||
assertions and 38 errors.)
|
||||
- Reader conditionals MUST be an error outside `.cljc`-style reading unless
|
||||
the implementation documents otherwise.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue