扩展库 / cString
cString
显式 C 字符串互操作:直接调用 CRT 的 strlen。
版本 1.0.0 · 纯 xlang 声明 · 无扩展库依赖
2026-10-29 当前未完整签收:主线尚不支持 c_size 的 f-string 转换,默认门禁保留真实消费正例并失败。CRT 长度行为、函数值、原型和已有双语 JIT/AOT 已通过;没有在包内强转或改返回类型掩盖问题。
快速开始
import cString
string text = "a\0b"
assert string.byteLen(text) == 3
assert cString.length(text) == 1
assert cString.length("你好") == 6
结果只计算第一个 NUL 之前的字节,不是完整 XLang 字符串长度,也不是 UTF-8 字符数。普通文本使用 string.len;需要完整字节长度使用 string.byteLen。
接口
| 入口 | 用途 |
|---|---|
length(text) as c_size | CRT strlen:第一个 NUL 之前的字节数。 |
本包没有额外原生封装、状态或资源所有权。它用于需要匹配 C 字符串合同的场合,不适合测量含 NUL 数据缓冲区。
C 对照
#include <string.h>
int main(void)
{
const char data[] = {'a', '\0', 'b', '\0'};
return strlen(data) == 1 && sizeof(data) - 1 == 3 ? 0 : 1;
}
完整 C/XLang 对照范例位于 release/extlibs/cString/examples/。
基础例共用 cString.expected.txt。新增 records_c.c 区分记录完整字节数与首个 NUL 前缀长度,C/GCC、直跑与独立程序按 records.expected.txt 核对六行输出;对应 records.xl 当前受上述主线插值问题阻断,不能视为已可运行范例。
验证状态
新 C 回归不再被编译器折叠为空检查:实际 CRT 调用覆盖 528 个运行时缓冲,含对齐和恰好结尾终止符,另检查 UTF-8/NUL 与无写入。语言侧验证默认空串、切片、临时实参、全局/局部/传参/返回完整签名函数值。Windows 默认 25 阶段中前 24 通过,最后 records 语言例失败;Linux 原生快照的 ASan/UBSan、JIT/AOT 与五条独立程序也先过,最后在同处失败。输入未变,失败现场保留,不把历史通过当作当前完整验收。
无包类型对照在两平台各执行 48 项:20 种 C 标量类型直接打印正确,但插值失败;普通 int、uint64、float、bool 的直接打印和插值均正常。当前只把实测消费该边界的 cString 记为受影响包,不推断其他库均有问题;主线修复后须复跑完整双语黄金输出。
powershell -NoProfile -ExecutionPolicy Bypass -File release/extlibs/cString/test/check.ps1
bash release/extlibs/cString/test/check.sh
2026-10-24 使用更新后的 Windows 发布版复验,默认包门禁全部通过:严格 GCC、C 与 XLang 边界、独立 C、xl run 直跑 C 和 XLang 三条范例路径逐字节同输出,以及带输出范例 AOT。Linux C ASan/UBSan 与 XLang 门禁也通过。旧版 xl6ValueDataSnapshotV1 缺符号已解除;这是 cString 包级验证,不代表整个 xlang 发布版签收。
2026-10-26 现有双平台发布版复核:Windows 默认门禁与 Linux C ASan/UBSan、XLang JIT、边界和范例两份独立 EXE 全通过;新增 C 单文件范例独立 EXE 后,GCC、TCC、C AOT 与 XLang JIT/AOT 输出逐字节一致。length 仍仅表示 CRT strlen 在首个 NUL 前的字节数,不代表 UTF-8 字符数;本包不返回拥有型 C 字符串。更新后的工作树重建新发布版被主线能力矩阵快照校验阻断,新产物需另行复验。