扩展库 / sharedmem
sharedmem
Windows/Linux 命名共享内存,字节安全的双语接口。
Windows/Linux C 子进程测试、Linux sanitizer、XLang JIT 与双语范例逐字对照已通过;范例使用独立随机名称。C 范例可直接由 xl run 执行。核心 AOT 已验证;完整发布签收仍受主线原生类退役和私有构造器访问控制问题阻断。
API
| 入口 | 用途 |
|---|---|
create(name, size) / open(name) | 创建或打开命名映射,创建不覆盖现有名称 |
SharedMemory.write/read | 通过 Buffer 读写原始字节,读取返回独立副本 |
writeText/readText | 按明确的 UTF-8 字节长度读写;读取返回独立 cstring,只复制一次 |
writeInt/readInt / zero | 小端有符号 64 位整数和清零 |
重复创建名称在 XLang 中抛 ValueError,打开不存在的名称抛 LookupError;C 侧分别保留 XERR_EXISTS 与 XERR_NOT_FOUND。
xlang
import sharedmem
auto owner = sharedmem.create("demo_exchange", 128)
auto reader = sharedmem.open(owner.name)
owner.writeText(0, "hello")
println(reader.readText(0, 5))
C 与边界
头文件 include/sharedmem_native.h;C 调用方显式关闭句柄,xshm_read 的缓冲用 xrtBufferDestroy 释放,xshm_read_text 的文本用 xrtFree 释放。名称最长 128 UTF-8 字节,XLang 在进入 C 前拒绝内嵌 NUL;大小 1 至 64 MiB。没有内建进程间锁,应用须自行同步。POSIX 创建者关闭会 unlink;显式 unlink 后同名重建时,旧创建者不会误删新对象,但并发名称操作仍需同步。Windows 名称随最后句柄关闭而消失。Windows 与 Linux 包级门禁覆盖独立 C 子进程、分配故障、语言边界及双语范例;README 记录当前完整签收阻断。