This commit is contained in:
@@ -5,6 +5,24 @@ All notable changes to WAFER are documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [0.2.1] - 2026-08-06
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **The search order is now authoritative** (Forth 2012 §16.3.3): a word
|
||||||
|
whose wordlist is not in the search order is no longer findable.
|
||||||
|
Previously lookup fell back to the newest entry across all wordlists,
|
||||||
|
making word hiding impossible. Verified against gforth and SwiftForth,
|
||||||
|
and guarded by a cross-engine corpus program.
|
||||||
|
- **Host words validate their stack arguments.** Around 40 host-implemented
|
||||||
|
words (`RND-SEED`, `ACCEPT`, `RESIZE`, `ALLOCATE`, `FREE`, `SEARCH`,
|
||||||
|
`SUBSTITUTE`, `ROLL`, `M*`, `UM/MOD`, `SF@ SF! DF@ DF!`, `F. FE. FS. F~`,
|
||||||
|
`2R@`, and friends) performed raw stack-pointer arithmetic with no
|
||||||
|
underflow check — calling them on an empty stack silently corrupted the
|
||||||
|
stack pointer (the compiled-code guards from 0.2.0 do not cover host
|
||||||
|
words). All argument-taking host words now fail with a clean, CATCHable
|
||||||
|
underflow error, enforced by a class-wide regression test.
|
||||||
|
|
||||||
## [0.2.0] - 2026-08-06
|
## [0.2.0] - 2026-08-06
|
||||||
|
|
||||||
The usability release: introspection, source files, honest errors, and a
|
The usability release: introspection, source files, honest errors, and a
|
||||||
@@ -86,5 +104,6 @@ compliance suite, `CONSOLIDATE` whole-program recompilation, `wafer build`
|
|||||||
AOT export (WASM / native / JS loader), browser REPL, SHA-1/256/512 words,
|
AOT export (WASM / native / JS loader), browser REPL, SHA-1/256/512 words,
|
||||||
and cross-engine benchmark lanes against gforth and SwiftForth.
|
and cross-engine benchmark lanes against gforth and SwiftForth.
|
||||||
|
|
||||||
|
[0.2.1]: https://github.com/ok2/wafer/compare/v0.2.0...v0.2.1
|
||||||
[0.2.0]: https://github.com/ok2/wafer/compare/v0.1.0...v0.2.0
|
[0.2.0]: https://github.com/ok2/wafer/compare/v0.1.0...v0.2.0
|
||||||
[0.1.0]: https://github.com/ok2/wafer/releases/tag/v0.1.0
|
[0.1.0]: https://github.com/ok2/wafer/releases/tag/v0.1.0
|
||||||
|
|||||||
Generated
+3
-3
@@ -1653,7 +1653,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wafer"
|
name = "wafer"
|
||||||
version = "0.2.0"
|
version = "0.2.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
@@ -1664,7 +1664,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wafer-core"
|
name = "wafer-core"
|
||||||
version = "0.2.0"
|
version = "0.2.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"insta",
|
"insta",
|
||||||
@@ -1679,7 +1679,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wafer-web"
|
name = "wafer-web"
|
||||||
version = "0.2.0"
|
version = "0.2.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@ members = ["crates/*"]
|
|||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.2.0"
|
version = "0.2.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
repository = "https://github.com/ok2/wafer"
|
repository = "https://github.com/ok2/wafer"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ license.workspace = true
|
|||||||
workspace = true
|
workspace = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wafer-core = { path = "../core", version = "0.2.0" }
|
wafer-core = { path = "../core", version = "0.2.1" }
|
||||||
wasmtime = { workspace = true }
|
wasmtime = { workspace = true }
|
||||||
anyhow = { workspace = true }
|
anyhow = { workspace = true }
|
||||||
clap = { version = "4", features = ["derive"] }
|
clap = { version = "4", features = ["derive"] }
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ workspace = true
|
|||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wafer-core = { path = "../core", version = "0.2.0", default-features = false, features = ["crypto"] }
|
wafer-core = { path = "../core", version = "0.2.1", default-features = false, features = ["crypto"] }
|
||||||
wasm-bindgen = "0.2"
|
wasm-bindgen = "0.2"
|
||||||
js-sys = "0.3"
|
js-sys = "0.3"
|
||||||
send_wrapper = { workspace = true }
|
send_wrapper = { workspace = true }
|
||||||
|
|||||||
Reference in New Issue
Block a user