Skip to content

v5.5.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 13:12
· 14 commits to master since this release

Full Changelog: v5.4.2...v5.5.0

pip install codecin==5.5.0

[5.5.0] - 2026-09-24

以「Python 只做 CLI、Go 是唯一实现」为主线的架构收敛,配套标准库打包修复与 AOT 依赖加固。
详见 第二轮更新建议。

新增 (Added)

  • 原生库改为"安装时编译":PyPI 包不再携带任何预编译库(package-data 与
    MANIFEST.in 都移除了 *.dll/*.so/*.dylib)。setup.py: BuildPyWithNative
    在构建时调用 codecin/native/build.* 用用户机器的 Go 工具链现场编译,
    并把产物单独拷进安装目录 —— 所以 pip install codecin(sdist)装完即带原生加速。
    build.sh/build.bat 相应改为只发布 sdist:若同时发布 wheel,pip 会优先装
    wheel 而不执行构建,用户就拿不到原生加速。没有 Go 的用户可从 Release 下载预编译库。
  • 原生库新增 ARM64 目标:Release 现在为 五种平台组合构建 c-shared 库 ——
    linux/amd64、linux/arm64(ubuntu-24.04-arm)、darwin/amd64、darwin/arm64、
    windows/amd64。
    资产名带 平台-架构 后缀(如 libcodecin_native-linux-arm64.so):
    此前各平台产物同名,release 汇总时会互相覆盖,只剩最后一个。
  • 产物架构校验:每个原生库构建后都用 go version -m 读出真实的 GOOS/GOARCH
    并断言与资产名一致,杜绝把错架构的库以 arm64/x64 的名义发出去。
  • 原生库查找支持架构专属名:codecin/native.py: _lib_candidates 现在按
    架构专属名 → 通用名 的顺序查找,同目录下同时存在两种架构的库时会优先选本机的那个。

变更 (Changed)

  • get_engine 不再因原生库 ABI/符号不符而中断运行:此前只捕获 OSError,
    旁边放一个旧版或架构不符的库会抛 AttributeError 并让整个运行崩掉(哪怕
    native.py 承诺过"加载失败自动回退纯 Python")。现在同时捕获 AttributeError,
    逐候选继续尝试,全部失败时记一条 warning 再回退。
  • Go 侧不再提供 CLI:删除 codecin/native/cmd/codecin/(独立 Go CLI)、codecin/native/tmpdump/
    与仅供 CLI 调用的 codecin/native/aot/build.go。语言实现仍在 Go 侧
    (CIN 编译器、字节码 VM、CROM、AOT stub),但只以库的形式存在;
    CI 新增门禁断言 codecin/native/ 下不存在 package main。
  • 唯一 CLI 入口是 Python:python cpu.py / 安装后的 codecin console script。
  • 内置标准库迁入包内:lib/ → codecin/lib/,并通过
    [tool.setuptools.package-data] 与新增的 MANIFEST.in 进入 wheel/sdist —— 修复
    「pip install codecin 之后所有 import "lib/*.cin" 直接编译失败」的问题。
  • CIN import 解析规则 (B3):
    • import "./x.cin" / import "../x.cin" —— 相对当前 .cin 文件所在目录;
    • 其余任何形式(import "x.cin"、import "lib/x.cin")—— 直接解析到
      codecin 内置标准库 codecin/lib/(lib/ 前缀保留为兼容写法)。
      仓库内示例与测试已统一为裸名字形式。
  • AOT 依赖检查与嵌入:--build-exe 现在会先解析 import 闭包做依赖完整性检查
    (缺失/循环引用报 AotError 而不是等到 go build 失败),把依赖清单打印出来,
    并在编译期把依赖库全部展开嵌入产物;数据段越界不再静默丢弃,而是报错并提示
    --mem-size。Windows 目标未带 .exe 的输出路径会自动补上后缀。
  • 发布与 CI:移除 release.yml 的 Go CLI 构建矩阵;原生库资产补上架构维度
    (macOS x64/arm64)并使用与本地一致的静态链接参数;workflow_dispatch 现在
    会 checkout 输入 tag;新增 dist 作业断言 wheel/sdist 内含 19 个内置标准库模块
    并实际安装后跑一个使用标准库的程序;CI 补 timeout-minutes 与 permissions,
    覆盖率合并为一次运行并设 --cov-fail-under=70。
  • 移除旧的安装/打包脚本:install.sh / install.ps1 / codecin.spec /
    codecin_linux.spec / build_win.bat 已删除,相关文档同步更新为 pip 安装路径。

修复 (Fixed)

  • python cpu.py --help 的首行版本号长期停留在 Code CIN v5.3,现直接取
    codecin.__version__(此前是全仓唯一残留的版本串)。
  • --build-exe 在程序文件不存在时抛裸 FileNotFoundError traceback,现在与普通路径
    一样给出 Build Error 面板。
  • --build-exe 传给 build_program 的显式输出路径在 Windows 上不再产生无法执行的
    无扩展名文件。