Skip to content

玄铁版本(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,匹配 LLVM i1
  • 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,同步 push breakLabels(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():直接封装 Win32 GetTempPathA 极速获取系统临时目录,移除了驱动层之前低效的 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_release C 函数内部增加了针对标记指针的快速返回路径,极大减少了无效的原子操作开销;
    • 延迟装壳机制:仅在整数“逃逸”到通用容器(数组/字典)或跨函数调用时才进行装壳转换,大幅提升了密集型循环的执行效率(预计提升 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,不再盲目执行装拆箱操作;

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;

基于 VitePress 静态构建 · 文档内容与仓库 GUIDE/ 同源

玄铁玄铁 XUANTIE · 中文系统级编程语言MARK 玄·折 120×120 · STROKE 8 · NO CURVES