From d2673317a8dda3619d2e5e489ce13513ff655532 Mon Sep 17 00:00:00 2001 From: Roman Volosatovs Date: Thu, 27 Aug 2026 18:02:29 +0200 Subject: [PATCH] define map and fixed-length list value encoding Signed-off-by: Roman Volosatovs --- design/mvp/Binary.md | 3 +++ design/mvp/Explainer.md | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/design/mvp/Binary.md b/design/mvp/Binary.md index 3915bb75..7f15ef92 100644 --- a/design/mvp/Binary.md +++ b/design/mvp/Binary.md @@ -472,6 +472,7 @@ val(i:) ::= v: => v val((record (field l t)+)) ::= v+:+ => (record v+) val((variant (case l t?)+) ::= i: v?:? => (variant l[i] v?) val((list t)) ::= v:vec() => (list v) +val((list t len)) ::= (v:)^len => (list v^len) 🔧 val((tuple t+)) ::= v+:+ => (tuple v+) val((flags l+)) ::= (v:)^N => (flags (l[i] for i in 0..|l+|-1 if v[floor(i / 8)] & 2^(i mod 8) > 0)) (where N = ceil(|l+| / 8)) val((enum l+)) ::= i: => (enum l[i]) @@ -485,6 +486,8 @@ val((result (error u))) ::= 0x00 => ok | 0x01 v: => (error v) val((result t (error u))) ::= 0x00 v: => (ok v) | 0x01 v: => (error v) +val((map k v)) ::= e*:vec() => (map e*) 🗺️ +entryval(k, v) ::= key: val: => (entry key val) 🗺️ ``` Notes: diff --git a/design/mvp/Explainer.md b/design/mvp/Explainer.md index 3cab3bb2..76ad01b7 100644 --- a/design/mvp/Explainer.md +++ b/design/mvp/Explainer.md @@ -2431,7 +2431,9 @@ val ::= false | true | (enum ) | none | (some ) | ok | (ok ) | error | (error ) + | (map *) 🗺️ | (binary ) +entryval ::= (entry ) 🗺️ f64canon ::= without the `nan:0x` case. ``` @@ -2478,6 +2480,17 @@ For example: (value $t bool (binary "\00")) (value $u string (binary "\07example")) + ;; 🔧 fixed-length list: + (value $v (list u8 3) (list 1 2 3)) + + ;; 🗺️ map: + (value $w (map string u16) + (map + (entry "a" 1) + (entry "b" 2) + ) + ) + (type $complex (tuple (record