玄铁版本(XuanTie SemVer)框架: 版本 SemVer:主版本.次版本.修订号.测试号
主版本(Major):破坏性变更/产品里程碑 次版本(Minor):向后兼容功能/部分新功能/大更新 修订号:向后兼容缺陷修复/Bug 修复/小更新
v1.0-rc.3 (2026-10-04)
第三个候选正式版。变更覆盖 XTC(报错增强/性能)、工具链与发行设施、渲染库平台化修复,并首次 引入多平台发布流水线;配套发布铸造厂 IDE v0.4.0(见 ide/versionLog.md)。本历史只记录语言与 工具链变更,官方库、插件、文档站与工程治理不在其内。
XTC(自举编译器):报错增强与修复
- 内置错写方法编译期拦截:
列表.添加(2)这类"写错方法名"此前编译期放行、运行期才报 「对象不存在的方法」(实测高频,白烧一轮往返);现对静态推断为内置类型(数组/字典/字符串) 的接收者,错写词(添加/推入/append/push→追加、删除/移除/remove→删、插入→插、 包含→包含?、合并/串联→连接)编译期直接报错并给出正确写法、常见内置方法清单与文档锚 (字典设键额外提示索引赋值)。豁免:该成员被动态挂载过(按 变量.成员 精确记录,先挂后调 是合法写法)、接收者非简单标识符、用户自定义型;判据走独立记录表,不参与内存释放/标量判定。 - 「不支持的前缀类型」提示:类型词(数组/字典)被直接作表达式前缀时报错附"内置方法请写在 变量上"示例与文档锚(此前零信息)。
- 未知标识符同义错写专表:在相近关键字提示之外补语义等价专表(打印→示、输出→示、 返回→返、函数→函、循环→当、否则→否、跳出→断、引入/导入→引,以及 return/print/function/class/while/import/null)。
- 项目模式三处缺陷修复 + 错误退出路径崩溃修复;新增运行时内建
xt_cwd。 - 性能:除/模恢复内联(控制流守卫)——修复取模慢 7.1×、分支慢 5.2× 的回归。
工具链与发行设施
- 构建清单 MANIFEST.txt +
xtc -h自证:发行包记录编译器与自举链各级 md5、对应提交 哈希、包内全部文件 md5;「编译器自述」段由xtc -h原样打印,裸 exe 也能自证。 - 多平台发布流水线(
.github/workflows/release.yml):打 tag(v*)或手动触发即构建 Windows / Linux x86_64 / macOS arm64 三平台语言包与铸造厂 IDE;发布前自动硬校验指纹 (包内提交 == tag 指向提交、版本行 == tag 名,不通过拒绝发布)。 release/make_pkg.sh平台自适应:Windows(Git Bash,内嵌 clang/MinGW 子集)与 Linux/macOS(系统 clang)三条打包路径;编译器链顶动态取自举链最高级xtc_sN并校验相邻两级逐字节一致(修复此前硬编码只认到 s4、链延长后会误取旧级的缺陷)。
运行时与渲染库(含贡献者 PR)
- 渲染缩放语义:取渲染宽/高(framebuffer 物理像素)+
@2x资源自动选择(PR #54)。 执()语义文档:补「shell 命令行」语义与跨平台示例(PR #58)。- Linux 渲染链接:不再误用发行包 MinGW 版 libraylib.a,改用系统 raylib(issue #59/PR #62); 补 Wayland 平台说明(issue #60/PR #61)。
- 渲染桥查找顺序:铁铺已安装目录优先于发行包缓存(issue #45/PR #65)。
.ttc字体直载修复:解析 ttcf 容器取首 face——此前 Windows/Linux 上 TTC 加载必然失败 并静默回退默认字体(中文全?的伪成功)。- CI:纯文档/图片变动不再触发四平台门禁(issue #64)。
v1.0-rc.2 (2026-09-27)
第二个候选正式版。语言层补齐"保留字不得作标识符"等硬规则与一批编译期静态校验,运行时跨三平台(Windows / macOS / Linux,含 arm64)平台化,两条编译器线(XTC 自举编译器与 GSC 种子编译器)同步收敛。本历史只记录 XTC 与 GSC 的变更,官方库、插件、文档站与工程治理不在其内。
XTC(自举编译器):语言与编译器
- 保留字不得作标识符:变量名/常量名/函数名/参数名/迭代变量名/型名/接口名等 14 个标识符定义入口全部拦截,报错文案逐字对齐种子编译器(GSC);清单以 GSC 的判定处为准(
结果 任务 道 测试 字符串 整 小数 布尔 数组 字典 字节,另按名补判此)。 - 成员调用静态校验:① 内置属性被当方法调用(
列表.长度())编译期报错并给出改写建议;② 静态可知的型上"方法不存在"编译期报错(查目标型及其全部派生型,避免多态误报;字段中存放的函数可调用)。 - 内置错写方法编译期拦截(报错增强):
列表.添加(2)这类"写错方法名"此前编译期放行、运行期才报「对象不存在的方法」(AI/新手高频,白烧一轮往返);现对静态推断为内置类型(数组/字典/字符串)的接收者,错写词(添加/推入/append/push→追加、删除/移除/remove→删、插入→插、包含→包含?、合并/串联→连接)编译期直接报错并给出正确写法、常见内置方法清单与文档锚(数组/字典/字符串各给对应清单;字典设键额外提示索引赋值)。豁免:该成员被动态挂载过(先挂后调是合法写法,按 变量.成员 精确记录)、接收者非简单标识符、用户自定义型;判据走独立记录表,不参与内存释放/标量判定。 - "不支持的前缀类型"提示:类型词(数组/字典)被直接作表达式前缀时,报错附"内置方法请写在变量上"示例与文档锚(此前零信息)。
- 未知标识符同义错写专表:在既有相近关键字提示之外补语义等价专表(打印→示、输出→示、返回→返、函数→函、循环→当、否则→否、跳出→断、引入/导入→引 及 return/print/function/class/while/import/null 等英文关键字)。
- 自举与回归:s4→s5→s6,相邻两级逐字节一致(固定点 md5
a174e291…);全量回归 0 异常(140 用例),新增Test/148_内置错写方法诊断(预期编译失败型基线);修正 examples/im/client.xt 存量错例(地址.包含(→包含?(,原写法运行期即崩)。 - 实参个数校验补全:方法调用与
造构造调用两条路径此前漏校验,少传实参时被调方读取未初始化的形参槽并按 ARC 释放垃圾对象 → 堆损坏;现编译期拦下。 - 嵌套异步块非法 IR 修复:异步块内再起纯计算块并等待它时,内层函数体曾继承外层 fiber 状态机上下文 → 生成未定长类型的
getelementptr非法 IR。 等待(t).成员取空值修复:方法调用分派前置段曾把接收者求值两次,等待的一次性句柄被提前消费,结果静默变空(fiber 内更会生成label %空非法 IR);现接收者只求值一次。终止码支持任意表达式:终 <表达式>(变量/算术/调用皆可)此前只认数字字面量,其余被静默丢弃退成 exit 0;并新增语言级类型守卫——字符串/数组/字典当终止码改为编译期报错。- 编译期自检硬失败:IR 完整性自查发现非法标记时不再只告警,而是打印诊断并以非零退出码终止,不产出坏产物。
-jc只检查模式崩溃修复:检查模式的作用域退出例程会读已解约页的对象头(0xC0000005);现对齐正常路径 destroy 并硬退出。- 浮点运算落地:运行时算术(
+ - * / %)浮点分派与混合提升、编译器装箱安全路由(非标量算术走运行时调用)、前缀负号与注解小数参数段错误修复。 - 关键字名变量读取纪律统一:抽出唯一入口
读符号槽,修复关键字名分支各自裸 load 不 retain 导致的引用计数下溢(悬垂读,实测段错误)。 - 遮蔽修复(P0):函数内
设/遍历变量遇同名全局一律新建遮蔽局部,杜绝模块函数静默污染调用方全局槽位。 - 异常与错误处理:捕捉机制死代码根治(轮询式异常机制,除零/参数类型错误可捕捉)、
是中缀双形态(类型判断/值等价)、除模运算全走运行时(灭字面折叠 undef 与变量除零崩溃)。 - 文件 API 铁律硬化:
文件.写检查写入字节数与fflush/fclose(磁盘满/短写不再静默成功);新增文件.删(带重试,失败必报错);解释器路径补文件.存在?。 - 数组/字节方法接收者守卫:错类型对象误用方法(如
s.找(...))不再越界踩内存,改为明确报错退出(修段错误)。 - 其它修复:数学常量命名与 GSC 对齐(并修常量裸访问把函数地址当数据读的既有缺陷)、长字符串拼接性能(1e5 次拼接 10.5s → 4.6ms)。
- 多平台发布流水线:
.github/workflows/release.yml——tag 推送(v*)或手动触发即构建 玄铁语言包(Windows / Linux x86_64 / macOS arm64,绿色包 tar.gz)与铸造厂 IDE(Windows, NSIS);发布前自动硬校验 MANIFEST 指纹(包内提交 == tag 指向提交、版本行 == tag 名, 不通过拒绝发布);release/make_pkg.sh平台自适应(Windows 保持内嵌工具链行为, Linux/macOS 用系统 clang;编译器链顶动态取 build/ 内最高级 xtc_sN,防止链延长后误取旧级)。 - 工具链:新增
xtc pao/xtc 跑子命令(编译后立即运行,语义对齐go run/cargo run:临时产物落缓存目录、跑完清理、参数与退出码透传);项目根模式(裸跑xtc 铁按玄铁.配置.toml的[项目] 入口编译);--检查全文件语义错误收集(供 LSP 一次出全部诊断)。
XTC(自举编译器):异步与运行时
- 异步路由:含阻塞核心原语(
求/执/输)的异步块整块路由线程池(这三者是 C 侧全程阻塞实现,跑在调度器线程上会饿死同进程其他 fiber)。 - 等待(线程池任务)属主分派与句柄槽位清零:修复任务析构连带释放
task->result造成的堆结果悬垂,以及作用域退出二次释放;核心原语实参捕获补扫。 - HTTP 单参请求补强:重定向跟随、连接/收发超时、多 A 记录容错;
单参求()补 chunked 传输解码(铁铺包索引响应超 2KB 曾致卡死/段错误)。 - 跨平台:macOS/arm64 与 Windows ARM64 自举打通、Linux ARM64 验证记录;运行时 C 文件平台隔离(
unistd.h/线程宏/TLS 存根)、渲染桥 Win32 专有代码隔离、FFI「外」与终端 VT 处理平台隔离、GNU/Linux 非渲染编译补-lm;修复 POSIX 主线程标志致调度器 drain 失效(裸 spawn 任务被进程退出杀掉)、darwin执()退出码归一化、darwin 渲染库链接适配。 - 调度器与渲染回路:
xt_scheduler_step非阻塞单步泵(根治主线程进 UI 主循环后 fiber 整体饿死)、按需重绘(帧级脏源轮询,空闲 CPU 实测 0.000s)、轮询事件桥。
GSC(Go 种子编译器)
- 平台化:macOS/arm64 自举打通(种子编译器与运行时平台化、
xt_self_path补__APPLE__/__linux__分支、FFI「外」与终端 VT 处理平台隔离);Windows ARM64 自举(平台化与架构探测补全)。 - 浮点算术修复:算术快速路径写死 i64 运算而
isScalarType已含 double,装箱指针被当整数相乘(设 x = 3.14 * 2实测得堆地址量级垃圾数);现按 double 分流,补ensureRawDouble与mapOperatorDouble(含比较谓词),前缀负号改走fneg double。20 项浮点矩阵探针与 XTC 对照语义一致。 - 后端与 ABI:LLVM(tie) 后端补齐数学库符号并与解释器 stdlib 对齐;外函数返回小数此前按注解生成
declare double读 XMM0,而实际返回的是装箱指针(RAX),改为declare i64直取装箱值。 - 转译路径(zao):带
?的函数名会生成非法 Go 标识符(?→_q映射现覆盖声明预扫描、变量/赋值/遍历/参数、类型父子、方法参、模块导出、闭包参等全路径);补或/且/<=/>=运算符映射;模块级外函数预声明补齐。 - 文件 API 与解释器:双端注册
文件.删(带退避重试,失败必报错);解释器路径补文件.删、文件.存在?与输()表达式分支。 - 退出码纪律:编译/链接三处失败路径由
return(退出码 0)改为os.Exit(1)——对明确的编程错误宁可报错退出也不静默跳过。
v1.0-rc (2026-08-13)
首个候选正式版。囊括 v0.19.0 全部内容(下方条目),另加网络栈完善、自举定点、fiber 网络 I/O 三大块
自举里程碑
- XTC 自举定点达成:GSC→S1→S2→S3→S4 逐代编译,s3 与 s4 产物逐字节一致(确定性构建:中间文件按源内容 FNV 指纹命名 + 链接去时间戳);自举产物全量回归通过
网络与并发(方案三:网络与线程调度整合)
- fiber 感知网络 I/O:
异步块内连/流.读()/流.写()成为真挂起点——socket 懒置非阻塞,未就绪挂起并注册调度器就绪表(WSAPoll),不占线程;就绪精确唤醒。语义与阻塞版完全一致 - 字段直存根治两枚地基 Bug:①异步块内局部变量跨挂起点丢失(读回 空);②捕获变量跨挂起点修改丢失且堆损坏。捕获/局部全部改为状态结构体字段直存
- HTTP 客户端双参形态:
求(url, 选项)支持方法/头/体/超时,回 状态码/体/头;TLS 接收 EXTRA 字节丢失修复(持久 inbuf) - HTTP 服务端落地:新铁铺包
HTTP(纯玄铁,基于听),HTTP.服务(端口, 处理函)请求/响应字典模型 - 听 闭包通路修复:回调经
xt_closure_call1按 env 感知约定调用,捕获闭包不再崩 - 阻塞写补全发循环(部分发送自动续传);回归套件新增 8 个网络/调度单元(110-117)
语言语义修正
- 分割 修正为字面子串切分(同 Python
split):保留空段、多字符分隔符按整体匹配;旧 strtok 字符集语义(丢空段)废弃。空分隔符维持逐逻辑字符拆分
手册
- GUIDE/08 全面扩写为保姆级:两种执行上下文判定、TCP 无消息边界坑、fiber 写法纪律、求 与异步块的关系、HTTP 服务端细则,关键点多配可运行示例
v0.19.0 (2026-08-10)
多线程双层架构落地 + 编译器地基全面加固 + 声明式 UI 库首次跑通
语言新特性
- 若表达式:
设 x = 若 条件 { 值 } (抑 条件 { 值 })* 否 { 值 }——条件求值可直接作为表达式,支持字典值、函数返回值、实参等任意表达式位置;否分支缺失时编译期明确报错(无值可求属明确编程错误)
网络与铁铺
- HTTPS 支持:运行时新增
runtime/xt_tls.c,基于 Windows 原生 Schannel 实现 TLS 客户端——求("https://...")实测通过,零新增第三方依赖,发行包零增重 - 铁铺 CLI 落地:新增
tiepm/铁铺.xt命令行入口(install/list/search/publish/clean 双语命令),核心.xt连修打包链(tar 双实现兼容/TOML 节名解析/路径尾空格/令牌 BOM) - 发布闭环:publish 自动 POST 注册索引;下载地址约定为 Release 附件(GitHub 附件名不支持中文,资产名取仓库末段);实测 install 全链(下载→SHA256 校验→解压→编译运行)通过
- 成员访问类型分派:
.成功/.值/.错误成员读曾无条件按结果结构体直读,带这些键的普通字典读出垃圾;现按运行时类型分派(结果走结构体,字典走键查询) - 执 编码修复:临时批处理写入 UTF-8 而 cmd 按系统代码页解析,含中文命令静默失败;现写入前加
chcp 65001 - 编译器自定位运行时:运行时/网络/TLS 栈文件改按 xtc 自身所在目录解析,任意目录调用不再炸链接
多线程与并发(双层调度架构)
- 双层多线程架构全链路修复:调度/通道/
选/路由一整串缺陷集中排爆,并发 67 项全覆盖测试全绿 - 新增无栈状态机:异步块不再依赖栈帧,支持真正的挂起/恢复
- XTC 编译并行 Segfault 与 SSA 问题修复;被引文件 parser 错误不再沉默
- 调度器丢失唤醒导致的间歇死锁修复
- 异步块捕获循环变量修复:fiber 符号表重定向 + N=0 改 env 字典传参
- 多线程与无栈状态机测试、官方手册教程补全;并发章节详情迁入 08 指南
闭包与捕获(一串老雷)
- 闭包捕获编译崩溃修复(字段名错/alloca 累积/alloca 未入 IR 三连)
收集捕获变量AST 节点覆盖补全:原来 15 种节点之外的语句根本不会捕获外层变量- 闭包隔离失败修复;尾随闭包动态调用与堆损坏修复;GSC SSA 闭包冲突修复
- 闭包循环捕获共享终值修复:循环内声明的变量按创建时刻值快照(逐迭代语义)
- 闭包参数补 retain(GSC 和 XTC 同病同修):匿名函数入口存参数没 retain,出作用域却 release,每调一次实参引用计数净 -1,闭包调两次实参就被提前释放——
UI.应用第二帧必崩的总根因。为抓这个 heisenbug 给运行时临时加过"隔离+投毒"调试层(已撤) - 捕获变量遍历器三个字段名写错:
键值列表→键值对列表、等待任务→任务对象、匹配分支按对象读实际是数组。闭包里写字典字面量必段错误
GSC 与编译正确性
- GSC 循环表征翻转误编译根治:干跑探测 + 前置规范化;回退装箱改动并源码级规避其缺陷
- 编译内建中缀字符串比较与产物类型传播修复
- 布尔关键字
判全面更名布尔 ==/!=运算符重载与入口 alloca 支配性错误修复- 引入路径规范化约束:正反斜杠混用给出编译期警告;统一转绝对路径并折叠
./..(同一物理文件不再被当成两个文件重复编译) <比较被误解析为泛型修复;.含?()缺少数组分支修复;JSON 递归下降解析器新增
模块系统
- 模块内裸名互调修复:别名引入时预扫描会把模块函数改名成
别名.名,导致模块内部函数互调全部失效(UI 库就是这么被憋死的)。现在裸名解析不到时自动回退到当前模块命名空间 - 菱形引入双重改名修复:应用引 UI+渲染、UI 又引渲染时同一文件被预扫描两次,
R.开窗口被改成R.R.开窗口。现在同路径同别名只预扫描一次;同模块多别名直接明确报错 - 模块全局变量预登记:函数体可以先于全局声明语句引用模块全局变量
解析器与诊断
返值解析 first 集对齐:返 [1,2]、返 {"a":1}之前被当成"无返回值",静默返回空——UI 库量固有就是这样中招的- S4 诊断强化:解析器死循环根修(未闭合文件导致的 16GB 内存爆炸)、参数个数校验、类型注解冲突校验
- 运行时守卫:方法缺失/成员访问非对象/索引非对象,全部从段错误改成明确报错退出
整()/小数()统一返回结果容器- 手册补充编译期错误与运行时诊断章节(报错分级策略现状)
性能
- P-perf-1 中缀整数内联快路径:1e7 累加 2000ms → 220ms(9 倍),新增 93 性能校验和防"快而错"回归
测试体系
- 回归测试集扩充至 94 单元(75→94),并发项重复 3 次判定;四层判定(编译成功性/退出码/FAIL 标记/金标比对)
- 混沌测试器:500 轮随机程序轰炸零坠毁;94 内存搅动猎手;80 内存 ARC 压力测试
渲染库 / UI 库
- 声明式 UI 框架库初建;
@响应修饰符与尾随闭包语法糖 - 声明式 UI 库首次端到端跑通:
应用/造状态/态取/态设/控件/布局/交互全链路可用,计数器实测点击真实递增 - UI 中文字体接入:
应用选项"字体"/"字库字号"自动加载卸载,文本与按钮绘制走精确测宽(量字体文字,新增 MeasureTextEx 桥接) - 纹理句柄改池化:之前直接返回裸 C 指针,玄铁 ARC 把
Texture2D当自家对象做 retain/release,必崩。现与字体同款方案(1-16 池内索引) - UI 选项容错:内边距/外边距传裸数字自动转
全边
文档
- 新增 GUIDE/12_UI库编程指南.md(用法、禁区、能力边界)
- 手册新增第 10 章(UI 库);05 模块系统补模块内互调语义与单别名限制;09 补
量字体文字 - 手册首页改为标注对标版本,正文不再逐条标注"某版本新增"
已知问题
- UI 应用长时间运行内存持续增长(每帧重建控件树相关),排查修复中
v0.18.6 (2026-06-21)
自举编译器外部函数 ABI 修复 + 渲染库 v1.1 字体扩展
自举编译器修复(编译.xt + 玄铁.xt)
- 外部函数声明去重:预扫描和代码生成两趟不再重复追加
declare - 返回类型映射:
空→void、判→i1+select i1→i64 4/2布尔转换,修复 X 按钮无响应 - 调用点类型感知:提前返回路径和动态分派路径均根据
函数返回类型表生成正确的 LLVM call 指令(call void/call i1/call i64) - 渲染库链接支持:玄铁.xt 新增自动检测渲染桥 + 编译 + 链接 libraylib.a + OpenGL
渲染库 v1.1(渲染桥.c + 渲染.xt)
- bool 返回值修正:6 个函数返回
0/1替代XT_FALSE/XT_TRUE,匹配 LLVMi1 - XTString 布局修正:对齐运行时
char* data指针布局,修复字符串乱码 - Unicode 窗口标题:直接调用 Win32
MultiByteToWideChar+SetWindowTextW - 字体 API 新增:
加载字体(文件, 字号)— 全 CJK 范围(21K 字形)加载字体精准(文件, 字号, 参考文本)— UTF-8 精准码点提取,纹理 256×256释字体(句柄)/绘字体文字(...)— 自定义字体渲染绘椭圆(...)— 实心椭圆
- 字体兼容:仅支持
.ttf/.otf,不支持.ttc(raylib 限制) - 预编译 IR:
lib/渲染/渲染.ll和渲染.o已更新
修复的已知问题
- 产物 Phase 5 代码生成访问违例(
call void修复) - 渲染桥 XTString 布局导致字符串损坏
- 自举编译器不支持渲染程序链接
v0.18.5 (2026-05-23)
铁铺包管理器初始版本
铁铺(TiePM)——玄铁语言的官方包管理器正式落地,包含 CLI 工具、远程索引服务、文档三件套。
铁铺 CLI(铁铺.xt / tiepm/核心.xt)
- 安装铁器:
铁铺 安装 <包名>— 从远程索引获取包信息,构造 GitHub 下载 URL,下载 ZIP 到~/.tiepm/缓存/,SHA256 验证完整性,解压到~/.tiepm/已安装/<包名>/; - 搜索铁器:
铁铺 搜索 <关键词>— 匹配远程索引中的包名和描述,返回最新版本信息; - 发布铁器:
铁铺 发布— 读取tiepm.toml清单,打包项目(tar -czf),计算 SHA256,输出 API 登记指令; - 列表已安装:
铁铺 列表— 列出~/.tiepm/已安装/下全部铁器; - 包详情:
铁铺 信息 <包名>— 查看指定铁器的版本、仓库、哈希; - 清理缓存:
铁铺 清理— 删除下载缓存; - TOML 解析器:纯玄铁实现的 TOML 配置解析(节、键值对、注释跳过),用于读取
tiepm.toml; - 包清单格式:
tiepm.toml([包]/[作者]/[依赖]/[描述]四节),名称、版本、仓库为必填; - 索引格式:JSON 对象
{包名: {版本: {版本, 哈希, 仓库, 作者, 描述}}},作者字段可选; - 安全机制:安装时强制 SHA256 哈希比对,不匹配拒绝安装;
- 英文别名:所有命令支持中文和英文双名(安装/install、搜索/search、发布/publish、列表/list、信息/info、清理/clean);
铁铺官网(tiepm-site/)
- Go HTTP 服务端(main.go):单文件部署,
embed.FS将前端编译进二进制,零外部依赖; - API 端点:
GET /api/index— 返回完整包索引 JSON;GET /api/search?q=— 按关键词搜索(大小写不敏感),返回包名、最新版本、作者、描述;POST /api/publish— 登记新包/版本(校验必填字段名称、版本、哈希),返回成功/错误;GET /download/:name/:version— 302 重定向到{仓库}/archive/v{版本}.zip;
- 前端页面:深色主题(GitHub 风格),搜索框实时过滤,展示包名、版本、作者、描述、仓库链接、安装指令;
- 线程安全:
sync.RWMutex保护索引并发读写; - 安全措施:哈希日志安全截断(≤16 字符),输入字段校验,JSON 解析失败返回 400;
自举编译器修复
- 语法分析.xt L539:
解析遍历循环()中变量名缺少设声明,Go 种子宽容处理但自举编译器要求严格声明; - 编译.xt L3584:删除了
示("[弱赋值查]...")debug 打印; - 入口 alloca 机制:局部变量的
alloca从内联发出改为延迟到entry:块统一发出,修复遍历体和条件分支内设导致的 LLVM 支配性验证失败; ==/!=运算符重载跳过:对非标量类型的==/!=跳过_等_方法查找,避免内联 alloca 在 3+若/抑条件中崩溃;- 字符串索引类型分发:
编译索引表达式新增字符串类型分支(type_id==3 →xt_string_get_char),此前只处理数组和字典; 返 [...]系统化修复:74 处返 [...]改为设 _r = [...]; 返 _r,修复自举编译器对 inline array return 的值空化问题;- 程序缓存恢复:
预扫描引入从源码缓存恢复为程序缓存(AST 缓存),解决此参数经解析型成员添加后在重新解析时丢失的严重问题; - 字符串 IR 常量:
转为十六进制缓冲区大小确认为s->length * 3 + 1(格式\XX,每字节 3 字符); 公 型支持:解析带修饰符语句()新增"型定义"case,支持公 型 类名 { ... }语法;说明符语句过滤:新增_name.长度 > 10条件,拦截超长标识符误入说明符路径;解析中缀默认分支:Pratt 解析解析表达式(优先级)→解析表达式(优先级 - 1),修复中缀运算符默认分支无限递归;结果关键字冲突:将tiepm/核心.xt和铁铺.xt中结果变量重命名为_res或读结果,因结果是Result类型的保留关键字;- 裸
返无返回值:所有返无值改为返 空(空=null);
依赖与工具
- Go 1.26:tiepm-site 编译依赖,使用
embed标准库静态文件嵌入; - certutil(Windows 内置):SHA256 哈希计算,后续计划纯玄铁实现;
- tar(Windows 内置):ZIP 解压;
v0.18.1 (2026-05-16)
< 比较解析修复 + 标准库
- 修复了
<比较运算符被误解析为泛型尖括号的编译器bug:语法分析.xt:解析泛型参数列表()单标记前瞻无法区分i < n(比较)和盒子<节点>(泛型),导致所有含<比较的玄铁代码解析失败。修复方案:新增窥视标记2(第二前瞻标记),进标记()级联推进,解析泛型参数列表()在标识符后检查第三者标记——只有>/,/?才进入泛型模式。该bug也连带导致当循环体编译异常(条件标记被错误消费)。回归验证:01-29 全部通过。 - 新增了玄铁标准库
lib/数组.xt:纯玄铁实现的数组高阶方法——映射(map)、过滤(filter)、归纳(reduce)、查找(find)、每个?(every)、存在?(some)、排序(bubble sort)、去重(dedup)、反转(reverse)。使用方式:引 "../lib/数组.xt" 予 A ; A.映射(列表, 变换)(路径相对于源文件所在目录)。 - 新增了 Test 26 数组高阶方法测试:覆盖映射、过滤、归纳、查找、每个?、存在?、排序、去重、反转 9 个方法。
- 修复了模块路径解析bug:
引的相对路径未以源文件所在目录为基准,而以编译器工作目录为基准——Test/下文件写引 "./lib/数组.xt"会错误地从项目根查找。根因:预扫描引入用"是否含目录分隔符"判断路径是否已解析(./lib/数组.xt含/被误判跳过)。修复:改用是绝对路径()判断;错误信息扩展为四行清晰提示。Test 26 路径已修正为../lib/数组.xt,新增 Test 30 验证错误路径报错。回归 30/30 全部通过。
v0.18.0 (2026-05-15) 弱引用支持
自举编译器正式支持 弱 关键字,打破 ARC 循环引用的关键基础设施落地。
- 新增了弱引用语法
弱 设 变量 = 对象:运行时层——xt_runtime.h/c新增XTWeakSlot旁路链表结构体、xt_weak_init注册槽位 API、xt_weak_clear清零函数(对象释放时遍历链表将匹配槽位置为XT_NULL),xt_free_obj开头调用xt_weak_clear;编译器层——抽象语法树.xt变量声明节点新增弱引用字段,语法分析.xt在解析语句/解析带修饰符语句/继续解析型定义四处分派弱关键字,编译.xt变量声明时生成xt_weak_init+xt_release(释放表达式 load 的 retain,使对象仅由强引用持有)并从作用域追踪移除,赋值时对弱引用变量直接 store 跳过 ARC;ARC 行为验证——覆盖唯一强引用后弱引用自动归零,确认 xt_weak_clear 在 xt_free_obj 中正确触发; 新建 Test 17 弱引用测试(声明、重赋值、空弱引用、归零验证、类成员弱引用)、Test 18 字符串方法(截取/替换/分割/包含?)、Test 19 模式匹配(值匹配/通配符/类型匹配/函数内匹配)、Test 20 运算符重载(加/等)、Test 21 泛型可空组合(多参数泛型+?后缀+字典缓存)、Test 22 严格模式升级(W004/W005在三档模式下的升级验证)、Test 23 弱引用归零验证(局部变量归零+类成员弱引用读写+嵌套成员访问)——单元测试扩展至 23 个,23/23 全部通过; - 更新了
实现清单和计划.md:弱引用条目标记为已实现; - 新增了类成员弱引用支持:
型 子节点 { 弱 设 父: 父节点? }——运行时新增xt_dict_set_weak(字典存值不retain)、xt_dict_weak_init(注册字典弱引用槽位)、扩展XTWeakSlot支持字典槽位和xt_weak_clear字典清零;编译器新增弱引用字段表跟踪每型的弱引用字段,编译实例化和编译赋值成员分支对弱字段调xt_dict_set_weak+xt_dict_weak_init替代xt_dict_set;Test 17 新增类成员循环引用测试——”子节点引用父: 根“验证弱引用正确读取; - 新增了弱引用强制可空类型检测(W005):
弱 设声明时若注解类型不含?则输出警告,提示开发者添加可空修饰符; - 新增了编译期循环引用风险检测(W401):在语义分析后、类型推导前运行
检测循环引用——遍历所有型定义构建引用图,检测2-节点环(A的非弱引用字段指向B,且B的非弱引用字段指向A),输出结构化警告建议将其中一条边标注为弱;提取引用类型名支持直接类型名、数组<型>元素类型、字典<K,V>value类型的解析;新建Test 24验证检测(互相强引用触发W401、一方弱引用不触发);24/24全部通过; - 新增了 JSON 序列化验证测试(Test 25):
化(dict)、化(array)、化(string)均正确输出 JSON 字符串(反序列化解有 ABI bug——声明参数为%XTString*但调用传i64——待修复); - 已验证
口(接口)关键字可编译通过,当前无编译期接口契约校验(规划中功能); - 修复了弱引用重赋值时旧槽位可能导致误清零的问题:
xt_weak_clear在清零前校验*slot_addr == (XTValue)obj(仅当槽位仍指向本对象时才清零);编译器弱引用赋值分支新增xt_weak_init调用(注册新值槽位);JSON 反序列化从仅支持字典/数组降级说明为简化实现(支持字符串/数字/布尔/空基础类型); - 修复了编译器中缀比较
!=的严重bug——编译内建中缀的"!="分支创建假中缀节点时未设置中缀运算符字段,递归调用匹配不到"=="→指令为空→返回["0", "i64"](永假)。任何涉及!=的比较均受影响(包括弱字段内联比较a.x != 空)。修复:设置中缀运算符="=="+对结果xor i1 ..., 1取反;25/25全部通过; - 修复了类成员弱引用失效的根因bug:
编译赋值成员分支中左类型.截取(0, 2) == "型:"因型为3字节UTF-8无法匹配,导致弱引用字段表查找永远失败→构造函数和赋值均走xt_dict_set(强引用)→弱引用语义完全未生效;修复为截取(0, 4),类成员弱引用正确走xt_dict_set_weak+xt_dict_weak_init路径; - 已知局限:W401仅检测直接类型引用的2-节点环;JSON 解为简化实现不支持
{}[];
v0.17.9 (2026-05-11)
自举编译器GEP字段访问全面切换到C运行时函数,新增编译严格度分级系统与隐式类型/未使用变量检测,并且正式支持泛型语法和闭包变量捕获支持。完全修复了16个单元测试测出来的的Bug。也是这个从这个版本“逻”正式变更为“判”作为玄铁布尔值的关键字。
- 新增了C运行时
xt_array_length函数,与xt_dict_size模式一致,返回数组原始长度(size_t)供编译器标记化后使用; - 新增了自举编译器中
@xt_dict_contains的LLVM IR声明; - 新增了语法分析器的警告码基础设施:定义了
警告码表(W001~W201覆盖隐式类型/逻辑语法/未使用变量/注释格式六大类),新增格式化警告方法输出结构化信息(含警告码、类别、行号、上下文、修复建议和升级提示),改造添加警告为基于警告码的调用接口; - 新增了编译器的类型警告系统:
添加类型警告方法,在类型推导阶段检测隐式类型问题(W001变量未标注、W002参数未标注、W003返回值未标注),依据严格度决定静默/警告/错误; - 新增了编译严格度三档开关CLI参数:
--默认/--moren(保持原始等级)、--严格/--yange(宽松→警告,警告→错误)、--禁止/--jinzhi(全部→错误),同时支持中文和拼音格式,严格度通过解析器和编译器共享的严格度字段联动; - 新增了未使用变量检测(W101):编译器在函数编译完成时遍历该函数的局部变量(排除参数和全局变量),对比
已用变量追踪集,对声明但从未引用的变量按严格度输出警告; - 新增了
若/抑/否逻辑中多个否分支的警告检测(W004); - 新增了
@允许注解抑制语法:在语句前加@允许(W004)或@允许(逻辑语法)可抑制指定警告码或类别名的输出,词法分析器新增@令牌识别(注解允许类型),解析器解析括号内参数并设置当前抑制列表,警告方法在抑制列表中匹配警告码或类别名时静默跳过; - 新增了
玄铁.配置.toml配置文件解析:编译时自动读取源文件同目录下的配置文件,支持[编译]节下严格度键设置(如严格度 = "严格"),优先级为命令行参数 > 配置文件 > 编译器默认值; - 修复了自举编译器GEP直接读对象字段返回值错误的bug:将
长度/大小/字节数成员访问从GEP改为C运行时函数调用(字符串→xt_string_byte_length、数组→xt_array_length、字典保持xt_dict_size),实测发现GEP方式在特定条件下返回0导致输出"空"; - 修复了遍历循环中GEP读取数组/字符串/字典键集长度全部失败的bug:数组长度→
xt_array_length、字符串长度→xt_string_byte_length、字典键集→xt_array_length,修复后Test 03"遍历数组"从无输出恢复为正确遍历4个元素; - 修复了
截取方法默认结束参数读取字符串长度时GEP失败的bug:改为xt_string_byte_length+ashr脱壳; - 修复了语法分析器
解析尝试捕捉不支持捕捉 (标识符)括号语法的严重bug:遇到捕捉 (e)时解析器将(误当作{吃掉,导致状态混乱→死循环→Arena无限扩容→内存超20GB被系统kill;修复后Test 10全部通过; - 修复了语法分析器
解析返回语句的first集中缺少函数定义标记导致返 函(...){}匿名函数表达式不被解析的bug; - 修复了遍历循环中
任务等保留关键字不能用作迭代变量名的过度限制; - 修复了自举编译器
含?/包含?成员方法只调xt_dict_contains对字符串完全无效导致Segfault的bug:新增类型分派逻辑,字符串走xt_string_contains(参数转%XTString*),字典走xt_dict_contains,用phi节点合并两分支结果; - 修复了自举编译器索引赋值
x[y] = z只调xt_array_set对字典完全无效的bug:新增类型分派,字典走xt_dict_set,数组走xt_array_set,修复后映射["地"]="中国"正确追加条目,字典大小从2变为3,遍历字典不再崩溃; - 修正了Test 09中非标准写法
管道为官方关键字道; - 修复了编译器关键字节点(
任务、道、字节、整、字)在表达式求值时跳过了符号表变量查找的bug:关键字被解析器设为特殊节点类别后,编译器直接返回关键字常量,导致任务等关键字作为for-each迭代变量时被当作类型ID而非变量值;修复后在关键字匹配分支中优先检查符号表,是变量则按普通标识符加载; - 修正了Test 08异步测试中
返100从异步块内返回外层函数的问题(异步降级同步执行的已知限制),改为不返回值并在注释中说明限制; - 修正了Test 08中
#{结果}错误引用关键字结果而非变量x结果的问题; - 新增了闭包变量捕获支持:
编译匿名函数在创建独立作用域时扫描函数体AST收集外层局部变量(收集捕获变量),为每个捕获变量创建全局桥接变量存储当前值,闭包内从全局加载到局部alloca;支持只读捕获(外部变量)和可变捕获(计数 += 1、x = 新值),跨调用可变状态持久化在显式返后暂不完全; - 将布尔类型关键字从
逻重命名为判:涉及词法分析器(token类型映射)、语法分析器(保留关键字/类型关键字/成员访问检查)、编译器(类型注解映射/标量类型检查/类型推导返回值)、Go种子编译器(llvm.go/compiler.go/token.go/evaluator.go/ast.go)、文档(GUIDE.md/语言参考手册/泛型指南);回归测试16/16全部通过,无性能退化; - 新增了泛型语法支持:解析器新增
是类型关键字辅助函数识别内置类型标记,解析泛型参数列表增加前瞻检查(区分<比较与泛型括号),解析中缀新增小于处理(泛型调用/类型引用/比较运算符三路分派),解析变量声明允许保留关键字用作变量名(编译器通过符号表优先匹配变量);编译器侧采用类型擦除策略,泛型参数在IR层全部映射为i64; - 回归测试:Test 01~16 全部通过退出码0(16/16),斐波那契(30)≈6.6ms无性能退化;
v0.17.8 (2026-05-09)
修复字符串字节操作返回非法地址、字典键/值方法缺失导致遍历崩溃
- 修复了Go种子编译器中
字节()方法错误地对返回值做了ashr i64 ..., 1反标签化的问题,xt_string_get_byte返回的是XTInt对象指针(已经过标签化),多余的右移导致指针被破坏,xt_obj_to_string收到无效地址后输出"非法地址"; - 修复了Go种子编译器中
键()方法未作为内置方法处理的问题,映射.键()走了动态字典查找路径尝试从字典中查找key="键",找不到返回null后for循环对null解引用导致ACCESS_VIOLATION崩溃;新增了键()和值()两个字典内置方法的IR生成逻辑,与自举编译器行为对齐; - 新增了
xt_dict_values函数的LLVM IR声明; - 回归测试通过:Test 01(基础)、Test 02(字符串,第一个字节=72)、Test 03(集合,字典遍历输出版=0.17/地=中国/名=玄铁)、Test 16(控制流)全部正确;
v0.17.7 (2026-05-05)
修复自举编译器LLVM结构体布局缺失magic字段的重大缺陷
- 修复了自举编译器中所有LLVM类型结构体定义缺少
magic字段的重大缺陷:Go种子编译器定义了{ i32, i32, i32 }(magic, ref_count, type_id)三个头部字段,但自举编译器只有两个({ i32, i32 }),导致type_id的getelementptr索引偏移4字节,实际读到了ref_count(值=1),所有类型分发(遍历循环、运算符重载检查)全部失效; - 修复范围:6种LLVM类型(XTObject/XTTring/XTTray/XTCDict/XTTFunction/XTResult)定义对齐,28处
getelementptr字段索引偏移修正,覆盖XTObject type_id(8处 i32 1→2)、XTTring data(i32 2→3)/length(3处 i32 3→4)、XTArray length(3处 i32 3→4)、XTFunction funcPtr(i32 2→3)、XTResult isSuccess(5处 i32 2→3)/value(4处 i32 4→5)/error(3处 i32 5→6); - 确认并保留了此前
raw_i64类型映射修复:编译变量声明语句(L1389-L1395)和编译赋值(L3296-L3301)中将变量类型表从"raw_i64"改为"i64",因为值已被确保I64标签化; 遍历循环修复回归:修复前循环体完全不执行(type_id读到ref_count=1,不等于5/6/3);修复后遍历 x 于 [1,2,3]正确输出x=1,2,3;- 回归测试通过:Test 01(基础)、Test 07(算法,斐波那契30=832040)、Test 16(控制流,偶数和=6/阶段和=72)、Test 16i(局部变量函数,x+y=7/a*b=30)全部正确;
- 确认Test 02(字符串
包含?崩溃)和Test 03(集合字典遍历崩溃)是已有问题(Go种子编译器编译的版本同位置崩溃),非本版本引入;
v0.17.6 (2026-05-04)
修复编译赋值标量存储bug,16_控制流测试全通过
- 修复了
编译赋值对标量变量存储原始值而非标记值(tagged pointer)的严重bug:当执行x = 1时,编译器生成store i64 1而非store i64 3(tagged(1)),导致后续读取和比较全部失效。此bug的传导链为:赋值存raw值 → 读取时被当作tagged值右移1位 → 数值错误 → 条件判断失败 →续语句永远不触发。修复方案:将标量存储分支的此.符(翻译右[0])改为xt_val,与编译变量声明语句保持一致; - 16_控制流测试全部5项通过:续跳过奇数、断跳出循环、嵌套断隔离、嵌套续隔离、当+遍历嵌套断;
- 回归测试 05/06/07 全部通过,fib 性能无退化;
v0.17.5 (2026-05-04) - fib(30) 6ms 超越 Go
自举编译器类型注解驱动优化,fib(30) 6ms 超越 Go
- 新增了自举编译器的
映射类型注解函数:将整→raw_i64、小数→double、逻→i1,为参数脱壳和静态优化提供统一映射; - 新增了自举编译器编译函数定义的参数脱壳:读取解析器存入的
arg节点.推导类型(如"整"),对标量参数先ashr脱壳再存储为 raw_i64,跳过不必要的xt_retain和追踪对象; - 新增了
函数返回类型表:在编译函数定义时注册返回值类型(如函 xxx(): 整),调用处自动ashr脱壳为 raw_i64 供后续原生运算使用; - 新增了编译中缀的标量快速路径:当
+/-/*//等运算符的左右操作数都为标量类型(raw_i64/i1/double)时,跳过动态分发(xt_dict_get+xt_string_new),直接走原生 LLVM 指令; - 修复了编译赋值对标量变量存储标记值的问题:
k = k + 1现在对 raw_i64 变量存储原始值而非标记值,与种子编译器修复同源; - 新增了解析器
是保留关键字检测函数:识别结果、任务、道、整、字、逻等 15 个关键字,在变量声明、遍历循环、函数定义等位置拦截撞名用法并输出中文友好报错(与种子编译器行为对齐),修复了 07/08/09/15 等测试的解析失败问题; - 修复了自引用报错:
预扫描引入检测到文件引用自身时调用终 1输出中文错误并立即终止,取代之前的静默跳过; - 修复了
出作用域无限循环崩溃的严重 bug:根因是种子编译器的compileForStatement缺少continueLabels和breakLabels的 push/pop,导致续/断在嵌套循环中跳转到错误标签。修复方案:在条件分支后提前生成stepLabel,同步 pushbreakLabels(endLabel)+continueLabels(stepLabel)+loopDepths三个栈,循环结束后 pop。修复后 05/06 编译正常,新增 16_控制流测试专项覆盖; - [性能突破] 斐波那契基准测试:带注解
斐波那契(n: 整): 整的 fib(30) 从 365ms 降至 ~6ms(约 60 倍提升),超越 Go 的 ~15ms 和种子编译器的 ~18ms,标志着自举代码生成质量达到生产级;
v0.17.3 (2026-05-03)
种子编译器类型注解驱动优化与关键 bug 修复
- 新增了种子编译器的函数类型注解支持:编译器现在能识别
函 xxx(n: 整): 整中的参数和返回类型注解,将整数参数以 raw_i64 形式存储,跳过不必要的装箱和 ARC 操作; - 新增了调用处返回值自动脱壳:当函数声明了返回类型注解(如
: 整),调用的地方会自动把返回值脱壳成 raw_i64,让后续运算全走原生 LLVM 指令; - 修复了种子编译器赋值语句对标量变量错误存储标记值的 bug:
k = k + 1这种整数自增会错误地把装箱后的标记值存回 raw_i64 变量,导致后续k < N的判断失效——这就是自举编译器类方法参数循环只跑一次的根因; - 修复了带类型注解函数(如
斐波那契(n: 整): 整)的 IR 生成问题:比较(n <= 1)走原生icmp sle,加减法(n - 1、加法)走原生sub/add,不再调用xt_compare/xt_sub/xt_add这些运行时函数,fib(30) 降至 ~18 毫秒;
v0.17.2 (2026-04-28)
- 补全了数学标准库:全面支持
数学.绝对值、数学.正弦、数学.余弦、数学.平方根、数学.幂、数学.取整、数学.进一、数学.四舍五入等核心函数; - 实现了变参数学函数支持:针对
数学.最大值和数学.最小值实现了编译器级别的自动装箱,支持...n风格的无限参数调用; - 注册了数学模块常量:支持通过
数学.PI和数学.E直接访问高精度数学常量; - 修复了自举词法分析器的标识符识别漏洞:支持以
?结尾的标识符(如存在?),消除了之前的解析歧义; - 增强了
?操作符的类型安全:在自举编译器中增加了运行时类型校验,非结果对象调用将触发安全报错; - 优化了字符串插值兼容性:移除了非标准的
${}支持,统一并加固了#{}格式,并在编译器层增加了非法插值符号的语法拦截; - 修正了
xt_result_new的 ABI 调用约定:将成功标志参数由i1修正为i32,确保了跨 ABI 调用的稳定性; - 完善了并发对象的内存释放:补全了
通道(Channel)、任务(Task) 和字节流(Bytes) 的析构逻辑,彻底解决了并发测试中的内存泄漏; - 实现了轻量化发行支持:预编译了运行时对象
xt_runtime.o,并更新驱动使其支持“开包即用”的极速链接模式。
v0.17.1 (2026-04-28)
- 新增了位运算操作符支持:现在支持
位与、位或、异或、左移、右移和前缀取反关键字; - 实现了自举编译器的位运算 IR 生成:针对标记指针(Tagged Pointer)进行了优化,位运算会自动处理脱壳与装壳逻辑,确保类型安全;
- 同步更新了 Go 种子编译器:现在种子编译器也能识别并编译位运算操作符,确保了自举链路的一致性;
- 优化了位运算的执行效率:在 LLVM 后端为位运算生成了高效的原生指令,并支持标量优化(Raw i64)下的零开销计算;
v0.17.0 (2026-04-27)
自举驱动加固+MinGW深度集成+全面性能突破
注:所有更新均仅在Windows平台测试过,Linux和Darwin平台未进行任何测试。
- 全面切换至 MinGW 工具链:种子编译器和自举编译器现在默认生成 MinGW 格式的对象文件,并使用
gcc进行链接,彻底摆脱了对 MSVC 运行时库的依赖; - 全面硬化了运行时 C 代码:将所有潜在风险的
sprintf迁移至snprintf,确保在处理超长 URL、错误消息或文件路径时的缓冲区安全性; - 自举编译器成功驱动化,支持直接编译玄铁程序;
- 新增了原生 FFI 接口
xt_get_temp_path():直接封装 Win32GetTempPathA极速获取系统临时目录,移除了驱动层之前低效的cmd /c echo %TEMP%子进程调用与字符串清洗逻辑; - 新增了单引号和多行字符串支持,现在用
'''就能直接写带换行的长文本,插值#{ }也是全通的; - 新增了范围表达式(比如
1..5),配合遍历循环特别好用,底层会自动帮你造好数组; - 新增了解构赋值语法,不管是数组提取
[首, ...余]还是字典提取{名, 别}都能一气呵成; - 新增了早返回操作符(
?),碰到结果报错直接往上甩,省去了大段的逻辑判断; - 新增了自举编译器的输出控制参数
-sc/--输出,现在能自由指定生成的二进制文件名了; - 新增了自举编译器的详细信息输出参数
-xx/--xinxi/--信息,默认情况下保持简洁输出,仅在需要调试时显示底层指令; - 优化了 Windows 指令执行 (Driver Engine):弃用了直接
_wpopen调用,改为通过唯一性命名(PID + 毫秒时间戳)的临时.bat文件执行,彻底解决了 Windows 下的引号剥离(Quote Stripping)与并发文件碰撞隐患; - 优化了 argv 获取方式 并 顺利修复了获取中文 argv参数 乱码的问题:之前走main的argv,拿到的都是ANSI(GBK)字节,要么乱码要么得做不可靠的GBK转UTF-8。现在LLVM-IR里的main会直接
call xt_init_args(argc, argv),xt_init_args调用GetCommandLineW()+CommandLineToArgvW()直接拿UTF-16无损转换为UTF-8,中文文件名和路径不会再乱码; - 优化了字符串核心操作的编译方式,把
字节数、取字节、字符这些常用方法直接硬编码进后端,避开了自举时容易踩坑的动态查找; - 优化了符号生成安全性,增加了
符()和标()包装函数,彻底封锁了“空”值被误当成字符串塞进 IR 的漏洞; - 优化了跨模块的类型解析,现在支持继承别的模块里的类(
型 A 承 别名.B),实例化也支持带前缀的写法了; - 优化了 CLI 参数解析逻辑,支持单横杠短参数(如
-sj)与双横杠长参数(如--shijian); - 优化了成员访问报错,现在跨模块访问不存在的成员时会报出精准的错误信息,并立即终止编译;
- 更新了 LLVM Target Triple 为
x86_64-w64-windows-gnu,Data Layout 调整为 MinGW 兼容格式; - 优化了 FFI 调用稳定性:引入了
xt_ffi_printf安全包装器,解决了 MinGW 环境下跨 ABI 传递字符串对象导致的乱码和崩溃问题; - 增强了运行时字符编码兼容性:支持现代 Windows 的
.UTF8区域设置,确保中文字符串在 FFI 场景下的精准显示; - 增强了
执()指令的安全性:为指令路径增加了 1024 字节的长度校验与_snwprintf安全格式化,若路径超限将通过结果容器返回明确的错误信息,而非导致程序崩溃; - 增强了前端错误拦截机制:
- 词法期严判:增强了词法分析器对特殊字符的过滤,现在遇到
^、@、$等未定义操作符时会立即报错并终止,防止非法字符作为标识符流向后端; - 编译期语义熔断:在自举编译器的语义分析与 IR 生成阶段,引入了严格的“错误熔断”机制。凡是遇到“未知标识符”、“未定义类型”或“越权成员访问”,编译器将立即调用
终 1强制退出,彻底解决了之前错误 IR 泄露导致 LLVM 报错难懂的问题;
- 词法期严判:增强了词法分析器对特殊字符的过滤,现在遇到
- 优化了链接时的文件锁处理:在自举驱动中增加了输出文件预删除逻辑,解决了 Windows 下因输出二进制文件被占用导致的链接挂起与 5~10 秒超时报错问题;
- 修复了 Arena 销毁时的挂起与堆损坏问题:
- 结构体安全化:为
XTArena增加了XTObject头部,并设为“长生不老”状态,彻底解决了 ARC 引擎误将 Arena 句柄当作普通对象进行release导致的内存污染; - 扩容算法重构:优化了 Arena 的自动扩容逻辑,采用“头部锚定”策略,确保用户持有的原始句柄始终指向链表头,使得
xt_arena_destroy能够百分之百回收所有扩容块;
- 结构体安全化:为
- 实现了 Windows 全链路 UTF-8 路径支持:
- 在运行时中增加了
xt_utf8_to_utf16与xt_utf16_to_utf8转换原语; - 将
文件.读、文件.写、文件.存在?、xt_get_temp_path以及执()指令全面迁移至 Windows 原生宽字符 API(如_wfopen,_wstat64,GetTempPathW); - 解决了 Windows 环境下因 ANSI 编码强制转换导致的中文字符路径乱码及文件操作失败问题;
- 在运行时中增加了
- 修复了命令行参数的引用计数泄漏:在
xt_init_args初始化全局参数数组后,增加了缺失的xt_release调用,确保了进程启动阶段内存管理的严格平衡; - 优化了自举编译器的相对路径解析:现在子模块的
引路径将基于当前源文件所在目录进行解析,而非基于编译器的工作目录,显著提升了大型多层目录项目的组织灵活性; - 优化了基准测试文案与反馈质量:
- 更新了性能测试文案,将原本的“循环性能测试”明确标注为“LLVM 闭式优化演示”,以准确传达编译器代数简化的优化效果;
- 补全了运行时所需的
<sys/stat.h>与<sys/types.h>系统头文件,确保了 MinGW 环境下对_stat64等结构的编译兼容性;
- 补全了运行时里关于字符串取字节、数组切片和范围生成的底层函数;
- 修复了跨模块调用方法莫名其妙返回
空的 Bug,原因是引入模块时漏掉了类定义的合并,现在已经修好了; - 修复了生成的 IR 里中文字符串长度不对导致报错的问题,所有字符串常量现在都强行走
.字节数计算,出来的长度百分之百精确; - 修复了拼接符号(
&)在自举环境下碰到空值会产生非法指令的隐蔽 Bug,并在拼接和插值时增加了明确的编译期警告; - 修复了库引用失败时编译器继续运行产生级联报错的问题,现在会立即终止编译;
- 修复了
XTResult结构体的 ABI 对齐问题:在 C 层增加了显式padding字段以匹配 x64 对齐要求,并同步修正了 LLVM IR 中的 GEP 索引,彻底解决了寻址错位导致的返回值丢失问题; - 新增高精度计时原语
时.微秒():- 在运行时层实现了基于
QueryPerformanceCounter(Windows) 和clock_gettime(Linux) 的亚微秒级计时接口; - 允许开发者通过微秒级数据更精准地评估代码段的性能,彻底告别“0 毫秒”误差;
- 在运行时层实现了基于
- [性能突破] 引入了局部整数脱壳优化 (Raw i64 Optimization):
- 对局部整数变量(如循环计数器)引入了基础类型推断,直接使用原生
i64存储而非标记指针(Tagged Pointer); - 零成本算术运算:对于纯整数运算,跳过了繁琐的“脱壳-运算-装壳”流程,直接生成原生 LLVM 加减乘除指令;
- ARC 消除 (Scalar ARC Elimination):
- 对识别为
raw_i64、i1(布尔)等标量类型的局部变量,彻底移除了读取时的xt_retain和赋值时的xt_release调用; - 运行时加速:在
xt_retain/xt_releaseC 函数内部增加了针对标记指针的快速返回路径,极大减少了无效的原子操作开销;
- 对识别为
- 延迟装壳机制:仅在整数“逃逸”到通用容器(数组/字典)或跨函数调用时才进行装壳转换,大幅提升了密集型循环的执行效率(预计提升 2-5 倍);
- LLVM 闭式求解优化突破:由于
raw_i64与 Scalar ARC 消除 彻底净化了算术热点路径的 IR 表现(无装拆箱、无冗余原子操作调用),LLVM 优化器现在能将复杂的 10⁸ 次方级线性递推循环识别并压缩为闭式解。在 1 亿次迭代测试中,执行耗时仅为 11 微秒(约 27 次迭代开销),标志着玄铁的整数代码质量已达到能让 LLVM 进行深度代数简化的原生级别; - mem2reg 友好型 IR 生成:通过消除标量类型的
retain/release调用,确保局部变量的alloca地址不被外部函数引用,从而完美触发 LLVM 的mem2reg优化 pass,将局部变量全量提升至 SSA 寄存器,实现真正的内存 zero-copy 计算; - 算术强度削减 (Strength Reduction):
- 取负优化:针对标记指针(Tagged Pointer)的取负操作,由原本的 4 条指令(脱壳 -> 取负 -> 移位 -> 装壳)削减为 2 条原生指令:
sub i64 2, %val与or i64 %res, 1。这一改进利用了标记指针的代数特性,大幅降低了单目运算的指令密度; - 标量短路路径:前端 AST 现在能识别已脱壳的
raw_i64环境,直接生成最简化的原生算术 IR,不再盲目执行装拆箱操作;
- 取负优化:针对标记指针(Tagged Pointer)的取负操作,由原本的 4 条指令(脱壳 -> 取负 -> 移位 -> 装壳)削减为 2 条原生指令:
- 对局部整数变量(如循环计数器)引入了基础类型推断,直接使用原生
v0.16.5 (2026-04-24)
- 新增了核心网络和系统原语的支持,现在能直接用
求、听、连、执、输这些高级货了; - 补全了标准库里的一大堆常用方法,字符串的
分割、替换,数组的删、插、找,字典的键、值、删都有了; - 更新了语法分析器,现在能认出
: 类型、|联合类型和?可空标记了,为以后的静态检查铺好了路; - 更新了全局内建对象,
时、数学、文件这种常用的现在不用声明就能直接用了; - 优化了异常处理,
捕捉块现在能拿到带.消息的错误对象了,不再是光秃秃的一个报错;
v0.16.4 (2026-04-24)
- 更新了内存管理架构,让 ARC(原子引用计数)和 Arena 内存池能一起干活了,彻底解决了自举编译器编译自己时发生的堆损坏问题;
- 补全了运行时里的
xt_retain和xt_release核心逻辑,现在程序跑完能自动把内存收回来了; - 优化了工程稳定性,确认了开启 ARC 后自举编译器依然能稳稳当当地通过全量测试;
v0.16.3 (2026-04-24)
- 新增了分号
;作为语句分隔符,现在你想在一行里写好几条语句也没问题了; - 补全了命令行参数支持,现在生成的程序能通过
xt_get_args()拿到外边传进来的参数了; - 优化了文档,把
GUIDE.md里那些乱七八糟的 HTML 标签都删了,看着清爽多了; - 修复了 Arena 里的字符串被误释放的 Bug,给
XTString加了个data_in_arena标志位来防误杀; - 修复了 64 位整数在不同平台上打印不统一的问题,现在都走标准格式了;
v0.16.2 (2026-04-24)
- 更新了编译器架构,改成了更牛的三趟编译流程,解决了前向引用的问题,函数和类随便怎么写都能找到了;
- 优化了模块引入逻辑,加了
程序缓存机制,不但编译变快了,还解决了循环引用时的状态同步问题; - 优化了符号表隔离,现在
引 ... 予 别名这种带命名空间的写法更稳了; - 修复了 LLVM 后端符号命名的兼容性问题,所有全局符号都加了引号保护;
v0.16.1 (2026-04-21)
- 新增了异步语法的全套解析,包括
异步、等待和并行; - 优化了代码生成策略,目前采取“语法先行、同步降级”,保证了老代码在新版本上也能正常跑;
- 更新了测试基准,专门给
等待和并行补了集成测试用例;
v0.16.0 (2026-04-21)
- 新增了
道(Channel) 工厂函数,现在可以造带缓冲的并发通道了,顺便把发和收也做好了; - 补全了显式类型转换,
整、小数、字这几个内建函数现在随叫随到; - 更新了文件操作,
文件.读和文件.写现在都会返回结果容器,报错处理更优雅了; - 优化了编译器后端,现在
追加能根据类型自动选是给数组加还是给字节流加;
v0.15.9 (2026-04-21)
- 新增了匿名函数支持,现在可以在表达式里随手写
函(x) { ... }了; - 新增了原生字节流类型
字节和异步任务类型任务,给以后的高性能并发打底; - 补全了
尝试 ... 捕捉的语法解析逻辑,离真正的异常捕获又近了一步; - 修复了内置类型关键字不能当表达式前缀的 Bug,现在
设 x = 字节这种写法合法了;
v0.15.8 (2026-04-21)
- 新增了原生 JSON 支持,用
化序列化,用解反序列化,速度贼快; - 补全了模块化递归引入的支持,现在的
引终于能像模像样地处理复杂的项目结构了; - 优化了主函数返回逻辑,现在支持在顶层直接用
返语句安全退出了; - 修复了全局变量加载时的双重装箱 Bug,解决了跨模块调用时数值不对的怪事;
v0.15.7 (2026-04-20)
- 更新了访问控制系统,正式支持
公、私、护三种可见性,谁能看谁不能看现在编译器说了算; - 优化了语义检查,现在编译器能自动推导变量的具体类型,还能顺着继承链递归找成员;
- 修复了 LLVM 生成时带类型标记寄存器的处理逻辑,转换指令现在出得更准了;
v0.15.6 (2026-04-19)
- 新增了外部函数接口
外,现在能直接声明并调用 C 语言的函数了,比如外 函 printf(...); - 更新了内存管理,集成了 Arena 分配器,把 AST 节点全丢进去管理,再也不怕循环引用导致的崩溃了;
- 补全了泛型语法的解析基础,虽然目前是类型擦除模式,但
<T>这种写法已经全通了; - 补全了接口定义
口的解析逻辑,为以后的契约校验占好了坑位;
v0.15.5 (2026-04-19)
- 新增了无限循环
循语法,顺带把断(Break) 和续(Continue) 的多层嵌套逻辑也搞定了; - 补全了针对数组、字符串和字典的统一
遍历语法,写代码更顺手了; - 补全了模式匹配
匹配语句,支持字面量匹配和_通配符; - 优化了分支结构,
若 ... 抑 ... 否的全路径现在都能生成正确的代码了; - 修复了遍历变量顺序不统一的问题,现在全世界都用
遍历 元素, 索引 于 容器;
v0.15.4 (2026-04-18)
- 更新了插值符号,全平台统一用
#{ },看着漂亮也少歧义; - 优化了类型编译流程,现在先收方法签名再编方法体,解决了类方法里没法实例化自己的问题;
- 优化了类型判断
是的逻辑,现在走内容相等检查,字符串判断再也不会出错了; - 修复了返回语句会误吞后面
造表达式的严重 Bug; - 修复了算术运算重载时的引用计数错误,告别了双重释放导致的崩溃;
v0.15.3 (2026-04-18)
- 新增了字符串插值支持,
"#{表达式}"这种写法现在已经落地了,后台会自动帮你转成拼接逻辑; - 补全了自举编译器源码里缺失的模块引用,现在模块化程度更高了;
- 修复了长字符串在 UTF-8 索引下可能被截断的问题,加了
空值哨兵来保命;
v0.15.2 (2026-04-18)
- 优化了算符优先级,把
是操作符排到了正确的位置; - 优化了动态分发,加了操作数类型预检,杜绝了给整数发字典消息导致的崩溃;
- 优化了返回指令检测算法,从 O(N) 优化到 O(1),编译大项目再也不卡了;
- 补全了代码生成里的自动转义逻辑,换行和引号现在都能正确变成 LLVM 常量了;
v0.15.1 (2026-04-18)
- 新增了类继承
承和方法重写覆的支持,玄铁的 OOP 终于像那么回事了; - 优化了实例化流程,现在造对象时会递归初始化整条继承链上的属性;
- 更新了元数据处理,把成员列表扁平化了,查找效率提升了一大截;
- 修复了循环变量重名导致的 LLVM 符号冲突问题;
v0.15.0 (2026-04-18)
- 新增了原生集合支持,数组
[ ]和字典{ }的字面量、索引读写现在全部到位; - 更新了面向对象基础,
型、造、此这些核心概念正式入驻自举编译器; - 优化了解析器架构,引进了 Pratt Parsing 算法,嵌套的点号和方括号解析起来更稳了;
- 优化了 ARC 内存管理,在方法调用和字面量生成时加了更精细的引用计数控制;
- 修复了某些非法语法会导致编译器进死循环的问题,加了强制 Token 消费;
v0.14.5 (2026-04-17)
- 新增了
raw_i64内部类型,专门代表那些没被装箱的原始整数; - 优化了算术运算性能,现在整数加减乘除直接在 CPU 寄存器里跑,不用再来回拆箱装箱了;
- 优化了循环计数器,遍历数组和字符串的时候快了不少;
- 更新了自动装箱逻辑,只有真正需要对象的地方才动手,平时能省就省;
v0.14.4 (2026-04-17)
- 更新了技术白皮书,把 ARC 内存管理和底层类型规范都定死在文档里了;
- 修复了方法调用返回类型丢失的问题,现在链式调用更聪明了;
- 修复了作用域堆栈泄漏的严重漏洞,退层的时候彻底干净了,解决了内存重复释放的噩梦;
- 修复了自举源码里的指针转换错误,把
inttoptr改成了正确的ptrtoint; - 修复了编译器入口逻辑,去掉了多余的词法分析调用,解决了输出为空的尴尬;
v0.14.3 (2026-04-17)
- 新增了定长对象内存池,给字符串、数组这些小结构体安排了专属空闲链表;
- 优化了内存分配速度,尽量从池子里拿,减少了系统调用的开销;
- 更新了分配安全策略,拿出来的对象先洗干净(
memset),防止脏数据捣乱;
v0.14.2 (2026-04-17)
- 修复了 ARC 在处理方法参数时的双重释放问题,内存更安全了;
- 修复了实例字段未初始化导致的段错误,现在统一用
calloc保证全零; - 修复了自举源码里对字典错误调用
.键()的问题,现在都老老实实用遍历了;
v0.14.1 (2026-04-17)
- 更新了
引关键字的语义说明,现在更像 C 语言的#include,直接把符号拉进当前作用域;
v0.14.0 (2026-04-13)
- 更新了项目结构,正式确立
xuantie_compiler为自举源码库,开启了“玄铁编玄铁”的新纪元; - 更新了代码架构,为了生成 LLVM IR 对原有的解释器原型进行了模块化大重构;
v0.13.4 (2026-04-12)
- 新增了原生字典支持,哈希表性能杠杠的,支持字面量和索引访问;
- 补全了原生文件 I/O,
文件.读和文件.写终于能用了; - 补全了数组的
.长度和字典的.大小属性; - 优化了
成功和失败的语法限制,现在能直接用在模式匹配里了;
v0.13.3 (2026-04-12)
- 新增了标记指针技术,整数、布尔和空值实现了零分配存储,性能飞起;
- 新增了原子引用计数,引入了
stdatomic.h,给以后高并发打好了地基; - 优化了 ARC 插入时机,编译器会自动在变量退出作用域时补上
release; - 优化了位运算,直接在 Tagged 级别操作,省去了转换时间;
v0.13.2 (2026-04-12)
- 新增了对运算符重载的支持,
_加_、_减_这些魔术方法现在能接管原生符号了; - 补全了面向对象在 LLVM 后端的落地,字段存储和方法调用全通了;
- 更新了
Result类型,原生支持成功()和失败()的代码生成; - 更新了运行时接口,统一了本地对象的字符串转换逻辑;
v0.13.1 (2026-04-11)
- 补全了字符串和集合的一大堆高级方法,像
.索引()、.重复()、.包含?之类的全都有了; - 更新了数学库,加入了最大值、最小值和范围随机数;
- 更新了标准库模块,新增了
字符串模块来处理字节转换;
v0.13.0 (2026-04-11)
- 新增了
覆关键字,重写方法必须显式声明,防止手抖; - 新增了原生测试支持,有了
测试关键字和断言系统,写代码更有底气了; - 补全了文档注释支持,
///后面的内容现在能被工具链提取出来了; - 优化了错误对象,
捕捉块现在能拿到带消息和堆栈的完整对象了;
v0.12.0 (2026-04-11)
- 补全了
结果容器的链式方法,.映射()、.解包()用起来非常丝滑; - 补全了数组排序、去重和字典合并等常用集合功能;
- 更新了文件系统操作,现在能处理路径合并和目录遍历了;
- 优化了基础类型表现,字符串支持大小写转换,数学库也更全了;
v0.11.6 (2026-04-11)
- 补全了类内存布局在 LLVM 后端的初步实现;
- 更新了匹配语句的指令生成,原生执行更快了;
- 更新了语法对齐,后端现在也支持解构遍历和复杂赋值了;
v0.11.5 (2026-04-10)
- 新增了字典解构遍历,
遍历 键, 值这种写法终于支持了; - 更新了类型转换规则,
整()和小数()统一返回结果类型,安全第一; - 补全了字符串的
.修剪()方法;
v0.11.4 (2026-04-10)
- 新增了模式匹配语法,值匹配、类型匹配和通配符分支全支持了;
v0.11.3 (2026-04-10)
- 新增了字符串插值,
"#{表达式}"这种写法极大地解放了双手; - 补全了数学库、字典方法和类型转换等一大波基础功能;
- 更新了对象系统,正式支持
此关键字; - 更新了 FFI,现在加载外部库能返回更详细的
结果了;
v0.11.2 (2026-04-06)
- 补全了循环语句、本地函数和递归调用在 LLVM 后端的支持;
- 更新了逻辑运算,
且、或、非都能直接生成高效的机器码了;
v0.11.1 (2026-04-06)
- 补全了
若分支和基础控制流在后端的支持; - 更新了类型系统,支持了
逻和小数的本地存储; - 优化了运行时,初步搞定了字符串的内存管理;
v0.11.0 (2026-04-06)
- 新增了 LLVM IR 生成器,玄铁从此有了真正的原生后端;
- 新增了 ARC 自动引用计数,摆脱了对 Go 运行时的内存依赖;
- 更新了编译器,开启了用玄铁重写玄铁的自举征程;
v0.10.0 (2026-04-06)
- 新增了自动类型推导,声明变量不用再写一大串类型名了;
- 优化了泛型推导,造对象的时候能根据参数自动猜出
<T>是啥; - 优化了 FFI 接口,为对接原生运行时做好了准备;
v0.9.x 及更早版本
- 补全了模块化命名空间支持,实现了
引 ... 予 别名; - 补全了泛型定义、泛型约束和契约式接口;
- 补全了联合类型和
?空安全标记; - 更新了标准库,加入了网络原语(
连、听、求)和系统原语(执、道); - 优化了语法,开启了单字关键字大变革,把
打印变成了示; - 修复了循环引用检测、路径解析等一大堆早期原型阶段的 Bug;