From f50371a6510290625b8e00ca149cb1a9dc4ed54e Mon Sep 17 00:00:00 2001 From: speak-agent <248744407+speak-agent@users.noreply.github.com> Date: Thu, 20 Aug 2026 15:51:14 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20openarch=200.1.0=20=E2=80=94?= =?UTF-8?q?=E2=80=94=20arch=20=E6=9C=BA=E5=88=B6=E5=B1=82=E7=9A=84=20A0=20?= =?UTF-8?q?=E6=8E=A2=E9=92=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ⚠️ **0.1.0 是探针不是层。** 一个架构,以及决定这一层能否成立的两个原语中的一个 (上下文切换)。 门 —— 一份接口在第二台**真正不同**的机器上不碎 —— 没有通过,而且一个架构通不过它: 只有一个 arch 时,抽象没有可以碎裂的对象。aarch64 缺 mcpp 目标表行与模拟器。 收录是为了探针可被消费与复现,不是因为这一层可以被建构其上。README 的 「未被证明的」一节逐项写明了状态。 --- pkgs/o/openarch.lua | 56 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 pkgs/o/openarch.lua diff --git a/pkgs/o/openarch.lua b/pkgs/o/openarch.lua new file mode 100644 index 0000000..fea031a --- /dev/null +++ b/pkgs/o/openarch.lua @@ -0,0 +1,56 @@ +-- openarch — the architecture-mechanism layer. +-- +-- Form A because mcpp looks for a package manifest at the package ROOT, and +-- Form B would leave it one level down inside the tarball's wrap directory. +-- +-- ⚠️ NO `deps`. This package needs nothing installed: it is C++ modules plus +-- per-architecture assembly, and which assembly is compiled follows the +-- resolved target through the manifest's own `cfg(arch = ...)` sections. +-- +-- ⚠️ 0.1.0 IS A PROBE, NOT A LAYER. One architecture and one of the two +-- primitives that decide whether the layer can exist. The gate — that a single +-- interface survives a second, genuinely different machine — has not been +-- passed and cannot be passed by one architecture. Listed so that the probe can +-- be consumed and reproduced, not because the layer is ready to be built upon. +package = { + spec = "1", + namespace = "mcpplibs", + name = "openarch", + description = "openarch: the architecture-mechanism layer — execution contexts, traps and address spaces, as one interface over several instruction sets", + licenses = {"Apache-2.0"}, + repo = "https://github.com/mcpplibs/openarch", + type = "package", + + xpm = { + linux = { + ["0.1.0"] = { + url = { + GLOBAL = "https://github.com/mcpplibs/openarch/archive/refs/tags/0.1.0.tar.gz", + CN = "https://gitcode.com/mcpp-res/openarch/releases/download/0.1.0/openarch-0.1.0.tar.gz", + }, + sha256 = "9f1799c66eb5b96fe1cfe09c6d534d26b61fed14c985e9fa4ce788cd0ecb0e65", + }, + }, + macosx = { + ["0.1.0"] = { + url = { + GLOBAL = "https://github.com/mcpplibs/openarch/archive/refs/tags/0.1.0.tar.gz", + CN = "https://gitcode.com/mcpp-res/openarch/releases/download/0.1.0/openarch-0.1.0.tar.gz", + }, + sha256 = "9f1799c66eb5b96fe1cfe09c6d534d26b61fed14c985e9fa4ce788cd0ecb0e65", + }, + }, + windows = { + ["0.1.0"] = { + url = { + GLOBAL = "https://github.com/mcpplibs/openarch/archive/refs/tags/0.1.0.tar.gz", + CN = "https://gitcode.com/mcpp-res/openarch/releases/download/0.1.0/openarch-0.1.0.tar.gz", + }, + sha256 = "9f1799c66eb5b96fe1cfe09c6d534d26b61fed14c985e9fa4ce788cd0ecb0e65", + }, + }, + }, + + -- The package's own manifest, inside the tarball's wrap directory. + mcpp = "*/mcpp.toml", +} From 4f75882af1972bee742fc304b2fa9ba50dfa7e17 Mon Sep 17 00:00:00 2001 From: speak-agent <248744407+speak-agent@users.noreply.github.com> Date: Thu, 20 Aug 2026 15:55:59 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20std-freestanding-nolibc=200.1.1=20?= =?UTF-8?q?=E2=80=94=E2=80=94=20=E6=9B=B4=E6=AD=A3=E4=B8=80=E6=9D=A1?= =?UTF-8?q?=E8=A2=AB=E5=AE=9E=E6=B5=8B=E6=8E=A8=E7=BF=BB=E7=9A=84=E6=96=AD?= =?UTF-8?q?=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0.1.0 的注释、README 与本描述符都写着「与 C 库并存会重复定义而失败」。**实测:不会。** C 库以归档形式发布,归档成员只在符号仍未定义时才被拉入;本包的目标文件无条件进入 链接,于是先定义了 memcpy,C 库的成员从不被拉入,构建成功 —— 静默地把逐字节实现 换掉了 C 库经过优化的那份。**这比预测的报错更糟。** ⚠️ 0.1.0 保留且**内容不变**:发布过的版本就是可能有人 pin 过的版本。更正期间我一度 移动了 0.1.0 的 tag,随即回滚,并已核验其 tarball 的 sha256 与索引记录逐字节一致。 --- pkgs/s/std-freestanding-nolibc.lua | 31 ++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/pkgs/s/std-freestanding-nolibc.lua b/pkgs/s/std-freestanding-nolibc.lua index c42c214..32efb08 100644 --- a/pkgs/s/std-freestanding-nolibc.lua +++ b/pkgs/s/std-freestanding-nolibc.lua @@ -9,6 +9,16 @@ -- Four of the five are an obligation rather than a convenience: a freestanding -- implementation provides memcpy, memmove, memset and memcmp because the -- compiler lowers structure assignment and array initialisation onto them. +-- +-- ⚠️ 0.1.1 corrects a claim, not code. 0.1.0 predicted that using this package +-- alongside a C library would fail with a duplicate definition. Measured: it +-- does not. A C library is an ARCHIVE, and an archive member is pulled only +-- while the symbol is still undefined, so this package's object files define +-- `memcpy` first and the C library's member is never pulled. The build +-- succeeds, silently substituting byte-at-a-time implementations for the C +-- library's optimised ones — which is worse than the error that was predicted. +-- 0.1.0 stays listed because a published version is one somebody may have +-- pinned. package = { spec = "1", namespace = "mcpplibs", @@ -27,6 +37,13 @@ package = { }, sha256 = "280ffe0180e0bd19ef94d4655c564507c4799e5c72ac7624d58722cb8aac363a", }, + ["0.1.1"] = { + url = { + GLOBAL = "https://github.com/mcpplibs/std-freestanding-nolibc/archive/refs/tags/0.1.1.tar.gz", + CN = "https://gitcode.com/mcpp-res/std-freestanding-nolibc/releases/download/0.1.1/std-freestanding-nolibc-0.1.1.tar.gz", + }, + sha256 = "8999ec9db31699569e14a9c5f0fa24f4736961b1d8aec143c4d0cc7e5a978ec0", + }, }, macosx = { ["0.1.0"] = { @@ -36,6 +53,13 @@ package = { }, sha256 = "280ffe0180e0bd19ef94d4655c564507c4799e5c72ac7624d58722cb8aac363a", }, + ["0.1.1"] = { + url = { + GLOBAL = "https://github.com/mcpplibs/std-freestanding-nolibc/archive/refs/tags/0.1.1.tar.gz", + CN = "https://gitcode.com/mcpp-res/std-freestanding-nolibc/releases/download/0.1.1/std-freestanding-nolibc-0.1.1.tar.gz", + }, + sha256 = "8999ec9db31699569e14a9c5f0fa24f4736961b1d8aec143c4d0cc7e5a978ec0", + }, }, windows = { ["0.1.0"] = { @@ -45,6 +69,13 @@ package = { }, sha256 = "280ffe0180e0bd19ef94d4655c564507c4799e5c72ac7624d58722cb8aac363a", }, + ["0.1.1"] = { + url = { + GLOBAL = "https://github.com/mcpplibs/std-freestanding-nolibc/archive/refs/tags/0.1.1.tar.gz", + CN = "https://gitcode.com/mcpp-res/std-freestanding-nolibc/releases/download/0.1.1/std-freestanding-nolibc-0.1.1.tar.gz", + }, + sha256 = "8999ec9db31699569e14a9c5f0fa24f4736961b1d8aec143c4d0cc7e5a978ec0", + }, }, },