• v0.3.0 feb7984e25

    Alia v0.3.0
    All checks were successful
    Release / release (push) Successful in 23s
    Pre-release

    LingbaSanar released this 2026-10-21 01:09:39 +08:00 | 6 commits to main since this release

    里程碑更新

    • 自举(进行中):见 Plans/bootstrap-plan.md
      • 仓库与波次(2026-10-20):自举工程入库——Bootstrap/Executor 对应
        Executor.git、Bootstrap/Manager 对应 Manager.git(Bootstrap/Tests 属
        Executor 仓库);最终在 Git 层面将 Base/Executor/Base/Manager 的仓库链接
        由 Executor_JS/Manager_JS 更换为自举版本
      • 修复:跨模块成员链实参分派失配——成员结合点判定改为「分隔字收尾(token 结构)
        • 前缀裸调用(重解析)」双判定,S.enterClosure closure.modScope with ...
          类跨模块关键字调用不再把真实调用埋进嵌套成员目标(BootstrapRuntime case2
          阻断清除);自举版 tryParseAliasObjectCall 同步补齐双判定
      • 优化:自举解析前端参数解析记忆化(镜像 JS _argParseMemo:表达式系参数、
        范围 ≥6 记号、非别名值递归语境;程序号+首记号行列+长度代理数组身份)——
        语言核装载 js.alia 解析 127s → 95s(-25%)
      • 优化:arena 清扫摊销触发(阈值 max(8192, arena规模/2),清扫标记成本
        正比存活规模)——rs.alia 装载期 OOM 消除
      • 优化:覆写分派匹配按调用位点缓存(Runtime.matchAliasDispatch,实参 token
        数组身份恒定,AST 静态 ⇒ 匹配结果缓存)
      • 性能归因(逐句计时实证,见 Plans/bootstrap-plan.md §仓库与波次):
        rs.alia 装载成本主体为解释常数作用于巨型指令体(@compileEntry 体 1,608 行
        单句 58.6s),P5 批次子进程形态可行;Rust 版高性能形态为不动点达成后的
        rs 目标编译产物,四载具口径收口
      • 收尾波:解释器去帧化(RTState/RTFrame 退役)——扁平显式作用域栈 + 模块命名空间
        (真正的 import/export:模块级状态持久、闭包捕获定义语境、循环导入 set-then-populate);
        解释器/编译驱动/ASTifier/Checker 全部项目化拆分;调用纪律落地(call 仅存无参执行
        与动态分派逃逸口,已知模式一律语法式 + 辅助关键字);数据类归位 type 语句。
      • 引擎:循环导入三载具支持(宿主 set-then-populate、js 惰性模块命名空间、nodejs 原位导出);
        递归 type 记录检查(深度解析具名形状 + isAssignableTo 同一短路/可空解包前移);
        成员结合优先于调用实参(别名对象调用实参中的成员链不再切断方法点识别);
        原生包装类未声明成员返回绑定方法(修零参调用 undefined this 崩溃);
        补齐表达式位 new 求值。
      • 更新:类型注解解析递归进入数组元素类型、对象属性类型与泛型实参,[P]、*[k: P] 中的类名不再退化为裸类型名
      • 更新:类型描述符的 toString() 优先输出类名,[P] 不再显示为 [*[v:Number, ...]]
      • 更新:type 声明名记入类型描述符的 declaredName,供成员与索引查找回查类型注册表
      • 修复:类实例数组无法赋给以类名标注元素的数组字段
      • 修复:以类名标注的数组元素无法传给类类型形参
      • 修复:nodejs/js 后端 Object.set/Object.delete/Object.contact/Object.isObject 编译为不存在的 JS 方法,运行期 TypeError
      • 修复:nodejs/js 后端 Object.create 生成 Object.create(src),语义为设置原型,与解释器「复制成员」不符
      • 修复:nodejs/js 后端 Object.assign 为原地合并,解释器为非原地合并
      • 修复:nodejs/js 后端 Object.has 用 in 判定,会命中原型链成员,与解释器「仅自有键」不符
      • 更新:Object.* 降级收敛为 js 后端的 objectStaticCall,Call 与 AliasObjectCall 两条路径共用
      • 更新:运行时新增 __aliaObjectCreate/__aliaObjectAssign/__aliaObjectContact/__aliaObjectSet/__aliaObjectDelete/__aliaObjectIsObject/__aliaObjectToPlain/__aliaObjectToArray
      • 修复:nodejs/js 后端 String.toNumber/toBoolean/toArray 编译为 JS 原生字符串上不存在的方法,运行期 TypeError
      • 修复:nodejs/js 后端 ==/!= 缺少数组深比较,[1,2] == [1,2] 恒为 false
      • 修复:解释器 valuesEqual 在解包前判引用同一,Number(NaN) 的同一性使 n == n 为 true,与编译产物的 IEEE 语义相反
      • 更新:String.toNumber 语义为 Number(str),非法串产出 NaN,与 as Number 的报错语义不同(与解释器一致)
      • 更新:标准库 fs 新增 list/listRecursive,枚举目录直接子项与递归相对路径,结果排序、分隔符固定为 /,供自举编译器枚举源码树
      • 更新:新增错误码 FS_LIST_FAILED(中英双份)
      • 更新:编译指令体(@compileEntry/@compileWith/@compileNode/@compileAlias/@compileClass)统一进入生成器模式,指令体内声明的编译期变量对同语言覆写体可见
      • 更新:生成器模式下编译期动态字典的成员/下标赋值与数组实参不再作静态校验
      • 更新:空对象字面量可赋给任意对象形态(Alia 对象运行期动态开放,形状注解为提示性)
      • 修复:类型描述符解析时联合判定排在数组/对象形态之前,[String | Code] 被拆成非法成员
      • 修复:语法式 new 的构造实参按记号计数,new C [a] 被记成 3 个实参
      • 修复:rs 后端 mathExpr 无参分支误传对象字面量 *[]
      • 更新:rs 后端 CodeStr/CodeArr 改用 Dynamic,codeOf/argAt 等助手按语义接受任意编译片段
      • 归零:Base/Core/src/backends/{js,nodejs,rs}.alia 类型检查错误 40/36/128 → 0/0/0
      • 更新:新增 AST dump 差分测试台(Tests/Systems/AstDumpSystem.js),覆盖 Base/Core、Tests/Native、Examples 共 85 个文件,校验 dump 可复现、非确定字段已排除、对输入扰动敏感,并维护可复核的基线快照
      • 修复:js/nodejs 后端控制流不产值——switch 的 case 体、尾位置与表达式位置的 if/if-else/switch 丢失取值(alias f -> String { switch ... } 返回 undefined,let r = if ... {} 生成非法 JS)
        • 更新:@compileConfig 新增 controlFlowAutoReturn(js/nodejs 开启):内核对尾语句的控制流别名按表达式重编译后交还 return,使「栈末值即返回值」对控制流成立
        • 更新:js 后端 if/if-else/switch 覆写按 _ctx.isExpression 分支出值形式(IIFE + stackValueExpr 体末句 return);内核 _compileExpression 对 AliasCall 与语句路径同序(先 @compileAlias 再回落 @compileNode)
        • 更新:新增跨目标一致性测试 Tests/Systems/ControlFlowValueSystem.js(9 个场景)
      • 更新:rs 后端维持语句形式(未开启 controlFlowAutoReturn),尾位置控制流产值为既有限制,随自举 P1 一并处理
      • 修复:内核 _shouldAutoReturn 排除表遗漏 builtin:assign/builtin:add-assign/builtin:inc,与 _compileStackWithReturn 不一致
      • 更新:自举 P1-1——新增 Bootstrap/(Alia 侧编译器),Tokenizer 与 Base/Executor/ASTifier/Tokenize.js 逐字段对齐,经差分测试台(Bootstrap/Tests/TokenizeSystem.js)在 85 文件 / 925 句 / 10,562 token 语料上与 JS oracle 逐 token 一致,解释与 nodejs 编译产物双模式通过
        • 更新:差分 fixture 采用定宽字段文本格式(零填充整数 + 码元计长),规避 JSON 嵌套结构导入的运行时限制
        • 修复:js 后端 switch 语句形式整体包 IIFE,同级多个 switch 的哨兵声明不再冲突
      • 修复:对象字面量值扫描按记号内容而非类型识别括号,*['value': '(', 'pos': 1] 中 STRING 值含括号字符时该键与其后键被静默吞掉(与 tryParseAliasObjectCall 同一规则,按 token 类型识别)
      • 修复:Checker 对未声明接收者的成员/下标赋值零报错(zz.k = 2 静默写穿无关对象),现报 TYPE_UNDEFINED_VARIABLE;类语境的 self/this/super 与编译指令语境名豁免
      • 修复:字符串字面量下标赋值从未携带字面文本的类型描述符上取键名,恒为 undefined——闭合形态误放行、开放形态误报,现取 AST 节点文本
      • 修复:checkFile 未向 Checker 传源文件目录,相对 import 的类型预加载依赖进程 cwd 侥幸解析
      • 更新:跨模块类型流——Checker 预加载 export this 模块的顶层具名 alias 签名(形参/返回类型/实参校验),mod.fn 调用返回值不再退化为 Value(运行期数组/对象身份本就完好)
      • 更新:自举 P1-2——新增 Bootstrap/split.alia:注释清洗(~:/~///,字符串内不算注释)与句子切分状态机(括号深度、引号、句首行列)与 JS 实现逐字段对齐,经差分测试台(Bootstrap/Tests/SplitSystem.js)在 85 文件清洗语料的 998 句上解释与 nodejs 编译产物双模式一致
      • 更新:自举 P1-3——新增 Bootstrap/parse.alia(arena 数据模型表达式解析器,Bootstrap/tokenize.alia 同步自 main.alia 拆出)与差分测试台(Bootstrap/Tests/ParseSystem.js):运算符优先级链、后缀链、数组/对象字面量、call 形式、as 后缀、括号分组、内建类型负号实参收集逐字段对齐,78 个表达式语料 dump 一致,解释与 nodejs 编译产物双模式通过
      • 更新:自举 P1-4——新增 Bootstrap/alias.alia(alias 模式匹配与注册表:parseKeysContent 可空与复合类型形参、matchPatternRecursive 回溯、候选边界与 Stack 锚点剪枝、参数解析各类型、对象形状回落、alias 值递归守卫、alias 对象调用回落、择优与计分)与差分测试台(Bootstrap/Tests/AliasSystem.js):20 定义 × 39 流逐块一致(MATCH 31 / NOMATCH 7 / THROW 1),解释与 nodejs 编译产物双模式通过
      • 更新:自举 P1.5 引擎缺口修复波——P1-3/P1-4 记录的 9 项语言缺口逐项复查:2 项真实缺陷修复,7 项重新定性关闭(多缺陷叠加表象 / Grammar 既定语义 / 收窄手段已具备),终态见 Plans/engine-gaps-plan.md
      • 更新:自举 P2-1——新增 Bootstrap/types.alia(类型描述符层:parse 全形态判定与顺序、括号深度 0 的联合/属性切分、toString 规范化、isAssignableTo 全分支含名义继承链、mergeTypes)与差分测试台(Bootstrap/Tests/TypeDescSystem.js):33 类型串 + 34 判定对 + 6 合并对逐条一致,解释与 nodejs 编译产物双模式通过
      • 更新:自举 P2-2(进行中)——Checker 差分台架落地:Bootstrap/Tests/ast-serialize.js(AST 行协议序列化器:location 展平、Code.tokens 预拼接、Prop 合成节点、#E 段终止)+ Bootstrap/checker.alia(arena 装载器、扁平化作用域栈、变量声明/赋值全族、inferType 表达式族的诊断检查,~2,100 行)+ Bootstrap/Tests/CheckerDiffSystem.js(语料诊断序列差分)
        • 更新:types.alia 全量内联到 checker.alia(E11 跨模块开放形状 → Value 的唯一可靠绕开);Base/Executor/index.js 新增 options.skipCheck(自举过渡期:自举 Checker 代码在被替代前无法过被替代者全部检查)
        • 剩余:CheckerDiffSystem 的 29 片段诊断序列差分中,typed 声明路径(case 5 起)未产出诊断——需调试 checkVarDecl 的 typeName 提取与 isAssignableTo 比较
        • 修复:ExpressionEvaluator.getObjectProperty 的数组/字符串下标读取统一经 wrapPrimitive 包装化(与 pop 内建一致)——此前 .. 拼接产出的裸 string 存入数组后读出,其内建方法(toNumber/trim)调用丢 this
        • 剩余:checker.alia 需通过现行 Checker 自身检查(31+ 处写法限制待清理)后方能进入差分调绿
        • 记录:引擎缺口 E10(类型注解数组 + call push 构造元素的成员方法调用丢 this,见 Plans/engine-gaps-plan.md §3.5)——types.alia 以手写 trim 绕开
        • 修复:确定性解析错误在 alias 回溯匹配中被空 catch 吞没——对象字面量值的裸调用形态(典型:alias 助手声明在使用点之后)静默产出 null 或报误导性错误;现以 error.definitive 标记穿透回溯,报错直达根因(Cannot parse 'helper s' as a value; ... declared before this point)
        • 修复:print 双呈现(行为契约决策:统一裸串)——解释器 builtin:print 对 String 值裸呈现,与 js/nodejs 编译产物一致;inspect/toDescription 的描述语义不变;全部差分测试删除双编码比对逻辑
        • 测试:新增 Tests/Systems/CrossModuleSystem.js(嵌套 alias/双层循环/容器与记录跨模块,解释器与 nodejs 产物一致);Bootstrap/aliasmain.alia 拆除扁平化绕开,恢复 readDef/parseDefText 层级结构
        • 更新:Bootstrap/ 全面清除 <Dynamic>——多态槽位用 <Value> 收窄、可空用 ? 后缀、arena/工作栈用具名开放记录类型(AstNode/DumpFrame/AliasPart 等);parse.alia 补 parseSubExpression/parseCallFormExpression 供注册表感知解析
        • 记录:P1-4 实测引擎缺口(嵌套 alias 语境内跨模块调用静默失败、嵌套数组 push 静默失败、跨模块开放类型字段读取退化 Value 等)见 Plans/bootstrap-plan.md P1-4 节
        • 更新:Ok 内建跨目标语义修复——契约(Grammar.md)为 null 判定(typeOf(val) != 'Null'),js 后端覆写与 rs 运行时 ok_v 原按 truthy 判定,Ok false 编译产物为 false 与解释器分歧;js.alia 覆写改为 x != null、runtime_rs.rs 改为 !matches!(.., Value::Null)
        • 测试:新增 Tests/Systems/OkNullSystem.js(8 场景 × interpret/js/nodejs/rs 四运行方式)
        • 记录:P1-3 实测引擎缺口(Checker 多模块导入序类型流、Object 成员读取 Value 包装、内建 pop 返回 Value 等)见 Plans/bootstrap-plan.md P1-3 节,P2/P3 排期
      • 更新:自举验收口径统一为四载具——解释器 + js/nodejs/rs 编译产物逐字节一致(Bootstrap/Tests/carriers.js;rs 随 ALIA_TEST_RS=1 并入,cargo run --release 运行);tokenize(924 句 / 10,554 行 dump)四载具全绿,split(84 文件 / 998 句)三载具通过(rs 余 2 处 IndexAccess 镜像位点类型错),parse/alias/typedesc 三载具通过;rs 遗留与镜像归一方案见 Plans/bootstrap-plan.md §3.7
        • 修复:js 后端 import 内联不去重,同一模块多处导入各内联一份,共享状态模块(arena)跨模块断裂——现以 resolvedPath 为键收集模块定义并统一提升到入口顶部,import 位点只留引用
        • 修复:rs 后端 switch/multicase 对原生类型化局部判等误用强类型 eq_bool,改 truthy(&eq_v(..));rustValueArgs(runtime::any 归一)与原生数组 raw rustVecArgs 分离
        • 修复:rs 后端 splitComma 按全部逗号切分形参类型串,[String, ...] 被切碎致 fn 误入 Value 模式;改括号深度感知
        • 修复:rs 后端 IndexAccess 默认分支只看声明类型,运行期存储容器误走原生 .get()/.chars();原生 Vec.push(Value) 未归一;模块 import 内联缺语句终结符;joinNativeArgs 收到种类名 'Vec' 无法解包(现按实参类型补全,不可补全时退回注册表分发;AliasObjectCall 参数类型改取 def.pattern)
        • 修复:内核 _nativeReturnTypeOf 对 Variable 尾语句只看 _checkedTypeName,value-mode fn 返回值按错类型回转;Variable 尾优先取 ctx.varTypes
        • 修复:Bootstrap/typesmain.alia 的 readInt6 双形参按三实参调用(解释器/nodejs 静默丢弃多余实参,rs 原生调用编译失败),统一为三形参 readIntN
        • 更新:Bootstrap/Tests/{Tokenize,Split,Parse,Alias,TypeDesc,CheckerDiff}System.js 统一接入四载具 runner;含增补平面字符的句子/文件按语料过滤(rs 运行时无法表示孤立代理项)
    Downloads