Skip to content

Spectec for binary format of types and instructions - #108

Merged
tlively merged 58 commits into
mainfrom
spec-binary-format
Oct 26, 2026
Merged

tlively merged 58 commits into
mainfrom
spec-binary-format

Conversation

@tlively

@tlively tlively commented Jul 16, 2026

Copy link
Copy Markdown
Member

No description provided.

tlively added 27 commits July 6, 2026 20:33
And struct.new_default_desc. Also update the valiation for struct.new and struct.new_default to require empty descriptors. Add an explanation of expansion to desctype to the validation conventions section and teach SpecTec about the new ExpandDesc relation to avoid errors during rendering.
Update the syntax of func externtypes and func types in the typing context to include exactness. This allows specifying exact function imports and properly typing ref.func as exact for exact imports and defined functions and otherwise as inexact.
Previously the definition of `heaptype` was `... | EXACT typeuse | typeuse`, but this made it impossible to treat the exactness as a variable. Refactor the definition to `... | _HT exact? typeuse` instead. This is similar to how nullability is treated in reference types, except that the `_HT` tag will not be displayed in the rendered spec.
…nctype

Update the typing context to store heap types for functions.
@tlively
tlively requested a review from rossberg July 16, 2026 07:48
| 0x4D x:Btypeidx => DESCRIPTOR (_IDX x)

grammar Bdesctype : desctype =
| describestype:Bdescribestype descriptortype:Bdescriptortype ct:Bcomptype => describestype descriptortype ct

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We probably want some other variable names here. I can use dt1 and dt2, but not dt_1 and dt_2 because dt is already taken by deftype. Any suggestions?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about just d_1, d_2? I think d isn't taken globally.

Btw, how about dropping the type suffix on describes/descriptortype? These names are a mouthful, and they aren't really types in their own right anyway, more like modifiers.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I ended up dropping the type suffix and introducing dedicated metavariables using using some other names in #120 and redoing these changes on top of those.

@tlively tlively mentioned this pull request Jul 16, 2026
31 of 51 tasks
tlively added 16 commits October 5, 2026 16:21
…nctype

# Conflicts:
#	document/core/valid/conventions.rst
#	specification/wasm-latest/1.2-syntax.types.spectec
#	specification/wasm-latest/2.4-validation.modules.spectec
#	spectec/test-frontend/TEST.md
# Conflicts:
#	specification/wasm-latest/2.3-validation.instructions.spectec
#	spectec/test-frontend/TEST.md
# Conflicts:
#	spectec/test-frontend/TEST.md
# Conflicts:
#	specification/wasm-latest/5.3-binary.instructions.spectec
# Conflicts:
#	document/core/syntax/instructions.rst
#	document/core/syntax/types.rst
#	document/core/util/macros.def
#	document/core/valid/conventions.rst
#	specification/wasm-latest/1.2-syntax.types.spectec
#	specification/wasm-latest/2.0-validation.contexts.spectec
#	specification/wasm-latest/2.1-validation.types.spectec
#	specification/wasm-latest/2.2-validation.subtyping.spectec
#	specification/wasm-latest/2.3-validation.instructions.spectec
#	specification/wasm-latest/2.4-validation.modules.spectec
#	specification/wasm-latest/4.1-execution.values.spectec
#	specification/wasm-latest/5.2-binary.types.spectec
#	specification/wasm-latest/6.2-text.types.spectec
#	specification/wasm-latest/7.0-soundness.contexts.spectec
#	specification/wasm-latest/7.1-soundness.configurations.spectec
#	spectec/test-frontend/TEST.md
# Conflicts:
#	specification/wasm-latest/2.3-validation.instructions.spectec
# Conflicts:
#	document/core/syntax/instructions.rst
#	document/core/syntax/types.rst
#	document/core/util/macros.def
#	document/core/valid/conventions.rst
#	specification/wasm-latest/1.2-syntax.types.spectec
#	specification/wasm-latest/1.3-syntax.instructions.spectec
#	specification/wasm-latest/2.0-validation.contexts.spectec
#	specification/wasm-latest/2.1-validation.types.spectec
#	specification/wasm-latest/2.2-validation.subtyping.spectec
#	specification/wasm-latest/2.3-validation.instructions.spectec
#	specification/wasm-latest/2.4-validation.modules.spectec
#	specification/wasm-latest/4.1-execution.values.spectec
#	specification/wasm-latest/4.3-execution.instructions.spectec
#	specification/wasm-latest/5.2-binary.types.spectec
#	specification/wasm-latest/6.2-text.types.spectec
#	spectec/src/backend-prose/gen.ml
#	spectec/test-frontend/TEST.md
# Conflicts:
#	spectec/test-frontend/TEST.md
# Conflicts:
#	spectec/test-frontend/TEST.md
Base automatically changed from cast-desc-eq-spec to main October 23, 2026 17:05
# Conflicts:
#	specification/wasm-latest/2.3-validation.instructions.spectec
#	spectec/test-frontend/TEST.md
Also introduce metavariables `dct` for `desctype`, `dcs` for `describes`, and `dcr` for `descriptor`.
@tlively
tlively changed the base branch from main to rename-describes-descriptor October 24, 2026 07:58
Base automatically changed from rename-describes-descriptor to main October 24, 2026 14:51
@tlively

tlively commented Oct 25, 2026

Copy link
Copy Markdown
Member Author

@rossberg, PTAL.

@rossberg rossberg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM modulo comment

Comment on lines +79 to +82
| dcs:Bdescribes dcr:Bdescriptor ct:Bcomptype => dcs dcr ct
| dcs:Bdescribes ct:Bcomptype => dcs ct
| dcr:Bdescriptor ct:Bcomptype => dcr ct
| ct:Bcomptype => ct

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this not be simplified to

Suggested change
| dcs:Bdescribes dcr:Bdescriptor ct:Bcomptype => dcs dcr ct
| dcs:Bdescribes ct:Bcomptype => dcs ct
| dcr:Bdescriptor ct:Bcomptype => dcr ct
| ct:Bcomptype => ct
| (dcs:Bdescribes)? (dcr:Bdescriptor)? ct:Bcomptype => dcs? dcr? ct

@tlively
tlively merged commit 60338ea into main Oct 26, 2026
9 of 10 checks passed
@tlively
tlively deleted the spec-binary-format branch October 26, 2026 21:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants