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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e4c6d83159939da82314e61d5d4a1af2807dd6dae38d49f7c73b2d3cb9af417
4
- data.tar.gz: 4c1ce88db244a5d0d4164fc37167491e8f8527cfcfe41ccf06248b3038c018e3
3
+ metadata.gz: 972f60a1bbd73cce7cab668d18116347d7e314e06b3f8816dc773c16d3e9515a
4
+ data.tar.gz: 81db42e88c6aed2c93c0b2f044a8bc41b0126d0a3c69ba1eadb6e2ac3c3fe8f8
5
5
  SHA512:
6
- metadata.gz: ec9d27e614d60a4742bc341f94c4cf97ae88833e2510bccd9c3c1d310205afdfad798e425a3f5643cb5a7aa76e6b9c3c0eced4823a115c8e778a04e6b8b9ce7c
7
- data.tar.gz: 787386782684649ef5255449ba8f1dc092e436407129b9576bd60aca25dd67de8709516d0c04b3e1c58afba4622be535bcdfdc3ff7e4e4fdda9940a1a0b4e89f
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: `Mrb` is `Send` and not `Sync`, so handing one to another thread
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
- # True when every target has its +libmruby.flags.mak+ sidecar — the
66
- # channel +beni-sys+ parses for ABI alignment — and the archive that
67
- # sidecar names, letting callers skip the build without spawning a
68
- # subprocess. A missing sidecar triggers a rebuild, which is
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Beni
4
- VERSION = "0.23.0"
4
+ VERSION = "0.24.0"
5
5
  end
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]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beni
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.0
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aotokitsuruya