beni 0.23.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +60 -0
- data/README.md +4 -2
- data/lib/beni/builder.rb +4 -23
- data/lib/beni/version.rb +1 -1
- data/sig/beni/builder.rbs +0 -4
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 972f60a1bbd73cce7cab668d18116347d7e314e06b3f8816dc773c16d3e9515a
|
|
4
|
+
data.tar.gz: 81db42e88c6aed2c93c0b2f044a8bc41b0126d0a3c69ba1eadb6e2ac3c3fe8f8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 31ac3f6b4a4d734eebec8d4a94939473e6a03637aa74570525708c8723bfef79157766260da4d4b027fca3558113129dee11c6a1cf1a4f1e7124e3133e787c1d
|
|
7
|
+
data.tar.gz: 91c676a0d91c3587d7eba6c47e12e16bda2b0ebffa5faa1382c29dd2180abb52716ec4f415e00ad9acb688c0f83352af5297d55b3c0c2e15ae7ee850c57c2287
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,65 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.24.0](https://github.com/elct9620/beni/compare/v0.23.1...v0.24.0) (2026-10-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### ⚠ BREAKING CHANGES
|
|
7
|
+
|
|
8
|
+
* **beni:** an instance-variable key without `@` on a plain object now surfaces a NameError, its presence test answers false, and the iteration no longer visits it. Keep such state in a TypedData payload, or reach it through `beni::sys`.
|
|
9
|
+
* **beni:** a class-variable or constant key Ruby could not write there — no `@@`, a lowercase or `__x__` constant — now surfaces a NameError, and its predicate answers false. A global key without `$` now names the `$`-prefixed global; reach a `$`-less global through
|
|
10
|
+
* **beni:** `Mrb::gc_register_forever(v)` is now
|
|
11
|
+
* **beni:** `Value` and every typed handle are no longer `Send` or `Sync`; a handle held across threads, such as in user data or a `TypedData` payload, is stored as an `Opaque` and unwrapped with
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **beni-sys:** bind debug.h and publish whether the archive carries the debug hooks ([610384a](https://github.com/elct9620/beni/commit/610384a2c531ba95ff4731ca6c5ca55034295f8a))
|
|
16
|
+
* **beni-sys:** check the bindings' layouts behind bindgen-layout-tests ([a753565](https://github.com/elct9620/beni/commit/a7535658b53228fd0fb781193215a8844e10c847))
|
|
17
|
+
* **beni-sys:** make the all-zero mrb_value nil under either admitted boxing ([843da49](https://github.com/elct9620/beni/commit/843da49009091b92fb9a0e6d0039b400e69fcf8e))
|
|
18
|
+
* **beni-sys:** read the type tag and the integer through boxing-agnostic shims ([125ad6e](https://github.com/elct9620/beni/commit/125ad6e5f949cca76b720fd392878b107fb0f22a))
|
|
19
|
+
* **beni-sys:** refuse an archive boxed other than word or no boxing ([5590d33](https://github.com/elct9620/beni/commit/5590d33a8fc5da5f93c32321b93d6aba7e5ad477))
|
|
20
|
+
* **beni-sys:** step out of a proc's scope and read an environment's length ([4d07150](https://github.com/elct9620/beni/commit/4d07150822f09ed45f982c42e7ba9ae53d3a1e66))
|
|
21
|
+
* **beni:** add debug hooks a debugger drives breakpoints from ([0f05132](https://github.com/elct9620/beni/commit/0f05132d39d79b7038d5737c879e0dbc5cb40bec))
|
|
22
|
+
* **beni:** copy the hook's views and read them by value, as magnus does ([f948a5e](https://github.com/elct9620/beni/commit/f948a5e19082486f33f8691f6da302b8687ac93e))
|
|
23
|
+
* **beni:** keep handles on their thread and carry them in an Opaque ([13b1952](https://github.com/elct9620/beni/commit/13b19525e4d9f9824439127db3f76d7eea4c896f))
|
|
24
|
+
* **beni:** name the never-released root gc_register_mark_object ([7df23d6](https://github.com/elct9620/beni/commit/7df23d6d7d7b9b71f9880f74d848efa24bea7581))
|
|
25
|
+
* **beni:** read a frame's self and defining class, and inspect from Rust ([c9c945e](https://github.com/elct9620/beni/commit/c9c945e0b0d6af1fbbaa42774138a0c0e13803e4))
|
|
26
|
+
* **beni:** read values under no boxing as under word boxing ([38be9e6](https://github.com/elct9620/beni/commit/38be9e6384934c0dea817c8d6bec226fd6d77f57))
|
|
27
|
+
* **beni:** refuse class-variable and constant names Ruby cannot write ([fe8a34e](https://github.com/elct9620/beni/commit/fe8a34ea72927aa8cbac9b3b79f5c7b602986513))
|
|
28
|
+
* **beni:** refuse instance-variable names Ruby cannot write, except on data carriers ([be8c040](https://github.com/elct9620/beni/commit/be8c040234c2156b02425ca91a497a30330856a2))
|
|
29
|
+
* **tasks:** expect archive-gated surface in its own drift net body ([97af298](https://github.com/elct9620/beni/commit/97af298b7f46342484c544a949b73f41693d4ed9))
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Bug Fixes
|
|
33
|
+
|
|
34
|
+
* **beni-macros:** fully qualify the panic a derived carrier read raises ([1355f22](https://github.com/elct9620/beni/commit/1355f228560dc49cf0da14992c5b4bf7cfd15b1e))
|
|
35
|
+
* **beni-macros:** leave the fallback arm out when every variant names a class ([52de4e2](https://github.com/elct9620/beni/commit/52de4e2a6b5b90fd3c53a07f58bda6181aa0e0fd))
|
|
36
|
+
* **beni-sys:** fence a header example past any fence it holds ([5455f52](https://github.com/elct9620/beni/commit/5455f523e7e2ee190f2672d4e8a8fac13b3b3d91))
|
|
37
|
+
* **beni:** bound an enclosing scope's locals by its environment less self ([b7bc20a](https://github.com/elct9620/beni/commit/b7bc20a416de61a858a3f12fab8f6ef76d970e91))
|
|
38
|
+
* **beni:** end arena scopes in any order without re-protecting released slots ([d44b921](https://github.com/elct9620/beni/commit/d44b9216541babb93e2a40776fa419f8a40dd923))
|
|
39
|
+
* **beni:** hand every beni:build to mruby's rake ([06c274f](https://github.com/elct9620/beni/commit/06c274f98c01463e62fe4997e5dabb681965a812))
|
|
40
|
+
* **beni:** hide the typed surface's own arrays from ObjectSpace ([076779f](https://github.com/elct9620/beni/commit/076779fc649d7f1f917c75fb29689e1e3b2b7486))
|
|
41
|
+
* **beni:** hold what an inspector opened from Rust reads ([5afd1e0](https://github.com/elct9620/beni/commit/5afd1e047c25e907a8386c0781936429af4a4f34))
|
|
42
|
+
* **beni:** list a frame's local variables as mruby's local_variables does ([ebb1c26](https://github.com/elct9620/beni/commit/ebb1c26267d77b13ac42ca727c0673d79f1ee43d))
|
|
43
|
+
* **beni:** raise from the code fetch hook through the method bridges' path ([4ec8586](https://github.com/elct9620/beni/commit/4ec8586e39151df778a59c6869c8e6308ef65aa8))
|
|
44
|
+
* **beni:** read the running frame's line at the instruction the hook runs before ([ca20bed](https://github.com/elct9620/beni/commit/ca20bedf5d3047d549ff4758ceb98e7c030da6b3))
|
|
45
|
+
* **beni:** refuse a carrier path segment Ruby could not write as a constant ([df16fa3](https://github.com/elct9620/beni/commit/df16fa3cd0d0d1ead797deb742fcab3f05576c8b))
|
|
46
|
+
* **tasks:** clear a shell's MRUBY_LIB_DIR for the host legs ([89d2958](https://github.com/elct9620/beni/commit/89d2958568f8cf7f8de0eb62613cf8122360c96c))
|
|
47
|
+
* **tasks:** hand the float32 leg its build env as a hash ([50819dd](https://github.com/elct9620/beni/commit/50819ddd6718ec9b05c4f02cbfbe690e93d58089))
|
|
48
|
+
* **tasks:** read every gate axis and leave build-specific net bodies unread ([bfb6d00](https://github.com/elct9620/beni/commit/bfb6d000c27e6a5a574248d6168bb0ec6349c468))
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
### Performance Improvements
|
|
52
|
+
|
|
53
|
+
* **beni:** end an arena scope in one crossing ([7ace894](https://github.com/elct9620/beni/commit/7ace89469360abac032797f5c70973e922b9bd54))
|
|
54
|
+
* **beni:** read the lazy-value record through the interpreter's slot ([f1135b0](https://github.com/elct9620/beni/commit/f1135b024c79a3e6af9f6172090b2ceafdb239b0))
|
|
55
|
+
|
|
56
|
+
## [0.23.1](https://github.com/elct9620/beni/compare/v0.23.0...v0.23.1) (2026-10-13)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
### Bug Fixes
|
|
60
|
+
|
|
61
|
+
* **beni-sys:** declare mruby's functions to unwind under the unwind strategy ([b42faee](https://github.com/elct9620/beni/commit/b42faee83bd95733864512efcd74fac848993bdb))
|
|
62
|
+
|
|
3
63
|
## [0.23.0](https://github.com/elct9620/beni/compare/v0.22.1...v0.23.0) (2026-10-12)
|
|
4
64
|
|
|
5
65
|
|
data/README.md
CHANGED
|
@@ -97,8 +97,10 @@ fn main() {
|
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
An interpreter is carried between threads but never reached from two at
|
|
100
|
-
once
|
|
101
|
-
compiles while sharing it needs a `Mutex` of your own.
|
|
100
|
+
once. `Mrb` is `Send` and not `Sync`: handing one to another thread
|
|
101
|
+
compiles, while sharing it needs a `Mutex` of your own. A handle stays on
|
|
102
|
+
the thread that made it; wrap it in `beni::value::Opaque` to carry it
|
|
103
|
+
along, and unwrap it there with `Mrb::get_inner`.
|
|
102
104
|
|
|
103
105
|
Every build needs the archive: with no discovery variable set the build
|
|
104
106
|
fails naming the ones it looked for, rather than handing you a crate
|
data/lib/beni/builder.rb
CHANGED
|
@@ -62,26 +62,11 @@ module Beni
|
|
|
62
62
|
File.join(staged_path(target), archive_file_name(sidecar))
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
#
|
|
66
|
-
#
|
|
67
|
-
#
|
|
68
|
-
#
|
|
69
|
-
# incremental and only emits what it lacks.
|
|
70
|
-
def built?
|
|
71
|
-
targets.all? { |target| exist?(archive_path(target)) }
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# Idempotent build entry point for +rake beni:build+: skip with a
|
|
75
|
-
# note when every artifact is already present, otherwise build and
|
|
76
|
-
# report readiness. A declared config that does not exist aborts
|
|
77
|
-
# before the skip check — stale artifacts must not mask it.
|
|
65
|
+
# Build entry point for +rake beni:build+. mruby's rake decides what
|
|
66
|
+
# is stale — a changed build config, gem, or source rebuilds what
|
|
67
|
+
# depends on it, and an up-to-date tree compiles nothing — so every
|
|
68
|
+
# run hands it the build.
|
|
78
69
|
def ensure_built
|
|
79
|
-
check_build_config!
|
|
80
|
-
if built?
|
|
81
|
-
puts "[beni] archive already present for #{targets.join(" + ")} — skipping"
|
|
82
|
-
return
|
|
83
|
-
end
|
|
84
|
-
|
|
85
70
|
build
|
|
86
71
|
puts "[beni] archive ready for #{targets.join(" + ")}"
|
|
87
72
|
end
|
|
@@ -124,10 +109,6 @@ module Beni
|
|
|
124
109
|
File.basename(line.delete_prefix(ARCHIVE_PATH_KEY).strip.tr("\\", "/"))
|
|
125
110
|
end
|
|
126
111
|
|
|
127
|
-
def exist?(path)
|
|
128
|
-
!path.nil? && File.exist?(path)
|
|
129
|
-
end
|
|
130
|
-
|
|
131
112
|
# Spawn mruby's rake with the parent environment plus the +env+
|
|
132
113
|
# overlay. Extracted as a seam so tests can fake the subprocess
|
|
133
114
|
# while observing the full env + cmd contract.
|
data/lib/beni/version.rb
CHANGED
data/sig/beni/builder.rbs
CHANGED
|
@@ -20,8 +20,6 @@ module Beni
|
|
|
20
20
|
|
|
21
21
|
def archive_path: (String target) -> String?
|
|
22
22
|
|
|
23
|
-
def built?: () -> bool
|
|
24
|
-
|
|
25
23
|
def ensure_built: () -> void
|
|
26
24
|
|
|
27
25
|
def build: () -> void
|
|
@@ -32,8 +30,6 @@ module Beni
|
|
|
32
30
|
|
|
33
31
|
def archive_file_name: (String sidecar) -> String
|
|
34
32
|
|
|
35
|
-
def exist?: (String? path) -> bool
|
|
36
|
-
|
|
37
33
|
def run_mruby_rake: (Hash[String, String] env, Array[String] cmd) -> void
|
|
38
34
|
|
|
39
35
|
def env: () -> Hash[String, String]
|