A deftype field tagged ^:unsynchronized-mutable / ^:volatile-mutable is set!-able,
but under direct-link immutable records are shape-rec tuples, so set! errored
("Can't set! field on non-deftype: tuple").
A deftype with any mutable field now opts out of the shape-rec layout and uses
the existing :jolt/deftype table form regardless of :shapes? — set! already
mutates that form and field reads route through the tagged-table path. Such a
type is also not registered as a shape, so the inference never emits a bare-index
read against the table. Immutable deftypes/records keep the fast shape-rec.
deftype extracts per-field mutability from the field metadata and passes it to
make-deftype-ctor, which picks the representation at ctor-build time.
Co-authored-by: Yogthos <yogthos@gmail.com>
|
||
|---|---|---|
| .. | ||
| 00-kernel.clj | ||
| 00-syntax.clj | ||
| 10-seq.clj | ||
| 20-coll.clj | ||
| 25-sorted.clj | ||
| 30-macros.clj | ||
| 40-lazy.clj | ||
| 50-io.clj | ||