• v0.8.0 ee3f9e0bd0

    Serendipity released this 2026-06-07 18:29:59 +08:00 | 1 commits to main since this release

    L Language v0.8.0 — 闭包与引用参数

    新功能

    in/out 参数 — 引用传递语义

    fn swap(out x: i64, out y: i64) -> void { ... }
    fn increment(out x: i64) -> void { x = x + 1; }
    

    闭包/lambda — 匿名函数表达式

    let double = fn(x: i64) -> i64 { return x * 2; };
    let r = double(21);  // 42
    

    变量捕获 — 闭包自动捕获外层变量

    let base = 100;
    let adder = fn(x: i64) -> i64 { return x + base; };
    adder(50);  // 150
    

    Bug 修复

    • for 循环同名变量作用域隔离
    • 列表推导任意元素数量 (修复 element_type/size=0 crash)

    测试

    • 209 单元测试 (41 lexer + 54 parser + 86 sema + 28 codegen)
    • 44 集成测试程序

    安装

    下载 l_lang.exe 放到 PATH 中即可使用。
    需要 LLVM 22.x 运行时库。

    Downloads
  • v0.6.0 de91886712

    Serendipity released this 2026-06-05 22:12:12 +08:00 | 40 commits to main since this release

    0.6.0 (2026-06-05)

    Added

    • 新类型: i32 (32位有符号整数), u64 (64位无符号整数), char (单字符) + 字符字面量 'A'
    • guard 语句: guard x >= 0 else { return -1; } (parser 去糖为 if-else)
    • 命名参数: draw_rect(width: 10, height: 20) 任意顺序传参,sema 重排序
    • 管道 |>: 10 |> double() |> add(5)add(double(10), 5) (F#/Elixir 风格)
    • 字符串插值: "Hello, \(name)!""Hello, " + name + "!" (Swift 风格)
    • 4 个新集成测试: 25_new_types ~ 29_interp

    Changed

    • 语法差异化: let mutvar, [T; N]T[N], ..to, implextend
    • 类型隐式转换: can_implicit_convert() 加宽规则 + codegen coerce_int()
    • 符号表扩展: Symbol.param_names 支持命名参数匹配
    • AST 扩展: CALL_EXPR/METHOD_CALL 增加 arg_names 字段
    • 测试: 158 单元 (41+15+74+28) + 29 集成
    Downloads