v3.1.0 MIT License Go 1.18+ LLVM 后端 WASM / WASI 100% 自举

Modern Pascal.
Compiled to Go & LLVM.

Kylix 是 Pascal 的现代化重构:双后端编译(Go 转译 + LLVM 原生)。
带类型推导、泛型、注解语法、KylixBoot Web 框架、WASM/WASI 支持,
以及完整 IDE 工具链 — Pascal 的清晰,Go 的速度,现代语言的力量。

hello_boot.klx
program HelloBoot;
uses boot;

begin
  boot.GET('/', procedure(req: TRequest; res: TResponse)
  begin
    var name := req.Param('name');
    res.Send($"Hello, ${name}!");
  end);

  boot.Use(boot.Logger());
  boot.Listen(':8080');  // 优雅停机内置
end.
32/34
教程示例通过
19
CLI 命令
20+
标准库模块
2
编译后端 (Go/LLVM)
450+
测试用例

经典 Pascal,现代灵魂

在保留 Pascal 清晰语法的基础上,注入现代语言的强大特性。从类型推断到泛型,从模式匹配到异步编程,Kylix 让 Pascal 焕发新生。

🎯

类型推断

编译器自动推导变量类型,告别冗长的类型声明,让代码更简洁优雅。

var x := 42;
λ

Lambda 表达式

简洁的匿名函数语法,支持闭包捕获和高阶函数,函数式编程触手可及。

(x: Integer) -> x * x
🧬

泛型

类型参数声明,编写类型安全的通用代码。支持泛型类和泛型函数。

TList<T> / TPair<K, V>
🔀

模式匹配

强大的 match 表达式,支持多值匹配、通配符和 when 条件守卫。

match x { 0 => 'zero', _ => 'other' }

Async / Await

基于 Goroutine + Channel 的异步模型,享受 Go 级并发性能。

async function FetchData(): String
🌐

Web 框架

内置 HTTP 服务器、路由、中间件、JSON 处理,开箱即用。

app.get('/api/users', handler)
🗂️

Map 类型

原生 map[K]V 字典类型,自动初始化,高效键值存储。

var m: map[String]Integer;
🔱

变体类型

Discriminated Union — 类型安全的联合类型,编译为 Go interface + struct。

variant IntLit: Integer; StrLit: String; end
🏛️

类与接口

完整的面向对象支持:继承、多态、属性、构造/析构函数。

class Dog inherits Animal
📝

字符串插值

现代字符串插值语法,表达式直接嵌入字符串。

$"Hello, ${name}!"
🛡️

异常处理

try/except/finally + ON 子句类型化异常捕获。

on E: Exception do WriteLn(E.Message)
🔄

多返回值

函数支持元组返回,解构赋值一步到位。

function Div(a,b: Real): (Real, Boolean)
🏷️

注解语法 NEW v3.1

[Attribute] 元数据语法,附加到类、类型、函数、字段,驱动声明式 API。

[Controller('/api/users')]
🚀

KylixBoot 框架 NEW v3.1

Spring Boot 式 Web 框架:路由 + DI 容器 + 中间件 + 优雅停机,开箱即用。

uses boot; boot.GET(...)
⚙️

LLVM 原生后端 v3.0+

绕过 Go 工具链,直接 AST → LLVM IR → 原生二进制。支持 --llvm-opt=N 优化。

kylix build --backend=llvm
🌍

WASM & WASI

编译到 WebAssembly(浏览器 / Node.js)或 WASI(Wasmtime、Cloudflare Workers)。

kylix build --wasm --tinygo
📦

包管理 + 注册中心

kylix add / publish 管理依赖,支持 git + 本地路径 + 嵌套依赖 + lockfile。

kylix add github.com/user/pkg

增量 & 并行编译

BuildCache 增量编译(55× 提速),goroutine 并行编译 + 死代码消除。

kylix build (增量自动启用)
🔍

类型检查 & 智能诊断

错误代码体系 KLX001–499、"你是否想用?" 建议、错误恢复,支持中英双语。

KYLIX_LANG=zh kylix check
🧪

测试 & 基准 & 文档

kylix test 自动发现 Test*bench --memdoc 提取代码示例。

Setup / Teardown / --filter
🛠️

完整 IDE 工具链

LSP(增量同步 + 跨文件 rename)、REPL(Tab 补全 + :type)、Delve 调试器、VS Code 扩展。

kylix lsp / repl / debug
♻️

100% 自举

Kylix 编译器用 Kylix 自己写:7 个 .klx 源文件可重新编译自身。

token / lexer / parser / generator

注解、Boot 框架与 LLVM 数组 🎉

2026-06-23 发布。KylixBoot 框架(路由 + DI + 中间件)、[Attribute] 注解语法、LLVM 数组与优化选项,以及 5 个关键编译器修复(KLX-C01..C05)。

🏷️

注解语法

顶层和类体内均可使用 [Name][Name(args)],附加到 ClassDecl / TypeDecl / FunctionDecl / VarDecl,是声明式 API 的基础。

[Controller], [Inject], [Entity]
🚀

KylixBoot 运行时

~700 行核心运行时,23 个单元测试。Router(含路径参数)、Server(含优雅停机)、DI 容器(Singleton/Transient)、内置中间件(Logger/Recover/CORS/Auth/RateLimit/RequestID)。

boot.GET / boot.Use / boot.Listen
📐

LLVM Milestone 2 Phase 1

静态数组 array[1..N] of Talloca [N x T],动态数组 array of T → slice 结构体。Pascal 1-based 自动转 LLVM 0-based。

kylix build --backend=llvm --llvm-opt=2
🛠️

5 个编译器修复

KLX-C01:var p: TClass 生成 *TClass。KLX-C02:单引号 ${...} 正确插值。KLX-C03:lambda 返回类型保留。KLX-C04:match codegen。KLX-C05:uses 模块符号注入 program。

KLX-C01..C05 全部修复

Pascal → Go,一目了然

Kylix 将 Pascal 源码编译为干净、可读、可直接运行的 Go 代码。没有黑魔法,没有运行时依赖。LLVM 后端则直接生成原生二进制。

Pascal 源码 (.klx)
program WebApp;
uses web;

var app: TServer;
begin
  app := web.createServer(8080);

  app.get('/hello',
    procedure(req: TRequest; res: TResponse)
    begin
      res.json(record
        message := 'Hello, Kylix!';
      end);
    end);

  app.listen();
end.
生成的 Go 代码 (.go)
package main

import "kylix/stdlib"

var app *stdlib.TServer

func main() {
  app = stdlib.CreateServer(8080)

  app.Get("/hello",
    func(req *stdlib.TRequest, res *stdlib.TResponse) {
      res.Json(struct {
        Message string
      }{Message: "Hello, Kylix!"})
    })

  app.Listen()
}

声明式 Web 开发,类似 Spring Boot

KylixBoot 把路由、依赖注入、中间件、优雅停机封装成一站式框架。23 单元测试、~700 行运行时,uses boot 即可使用。

全局快捷方式 (函数式)
program Quick;
uses boot;

begin
  boot.GET('/users/:id',
    procedure(req: TRequest; res: TResponse)
    begin
      res.JSON(record
        id := req.Param('id');
        name := 'Alice';
      end);
    end);

  boot.POST('/users',
    procedure(req: TRequest; res: TResponse)
    begin
      res.Status(201).JSON(req.Body());
    end);

  // 内置中间件
  boot.Use(boot.Logger());
  boot.Use(boot.Recover());
  boot.Use(boot.CORS());
  boot.Use(boot.RateLimit(100, 60));

  // 优雅停机内置 (SIGTERM/SIGINT)
  boot.Listen(':8080');
end.
声明式 (注解 + DI 容器)
[Controller('/api/users')]
type
  TUserController = class
    [Inject]
    UserRepo: TUserRepository;

    [Get('/')]
    function ListUsers(req: TRequest): TResponse;
    begin
      result := req.JSON(UserRepo.FindAll());
    end;

    [Post('/'), Authenticated]
    function CreateUser(req: TRequest): TResponse;
    begin
      var user := req.Body<TUser>();
      UserRepo.Save(user);
      result := req.Created(user);
    end;
  end;

[Entity('users')]
type
  TUser = class
    [Column('id'), PrimaryKey]
    Id: Integer;
    [Required, Email]
    Email: String;
  end;

3 步上手 Kylix

一分钟内从安装到运行你的第一个 Kylix 程序。

1

克隆 & 构建

从 GitHub 克隆仓库,一条命令构建编译器。

2

创建项目

使用 kylix new 创建项目模板,自动生成配置和入口文件。

3

编译运行

kylix run 一键编译并运行,即刻看到结果。

# 1. 克隆 & 构建
git clone https://github.com/astra-zhao/kylix.git
cd kylix && go build -o kylix cmd/kylix/main.go

# 2. 创建项目
./kylix new myapp && cd myapp

# 3. 运行
./kylix run
# → Hello, Kylix World!

19 个命令,覆盖全开发流程

从创建项目到编译运行,再到测试、文档、调试、包管理、跨平台编译——一个 CLI 搞定全流程,支持中英双语错误信息。

# 项目脚手架
kylix new myapp                       # 创建新项目 (含 kylix.toml)

# 编译 & 运行
kylix build                           # 编译项目或文件 (Go 后端,默认增量)
kylix build --backend=llvm            # LLVM 原生后端 (绕过 Go 工具链)
kylix build --backend=llvm --llvm-opt=2  # LLVM -O2 优化
kylix build --wasm                    # WebAssembly (~3 MB,Go 标准)
kylix build --wasm --tinygo           # WebAssembly (~30 KB,TinyGo)
kylix build --wasi                    # WASI (Wasmtime / Cloudflare Workers)
kylix build --target=darwin/arm64     # 交叉编译 (5 个原生目标)
kylix run                             # 编译 + 运行
kylix run --keep                      # 保留生成的 .go 文件

# 代码质量
kylix check                           # 项目级类型检查 (跨文件)
kylix fmt                             # 代码格式化
kylix fmt -w file.klx                 # 原地格式化
kylix test                            # 运行测试 (*_test.klx, Setup/Teardown)
kylix test --filter Add               # 按名称过滤
kylix bench                           # 性能基准测试
kylix bench --mem                     # 含内存分配统计
kylix doc                             # 生成 Markdown 文档 (含代码示例)

# 调试 & 交互
kylix debug                           # 启动 Delve 调试器
kylix repl                            # 交互式 REPL (Tab 补全 + :type + :load)
kylix lsp                             # LSP 服务 (增量同步 + 跨文件 rename)

# 包管理
kylix add github.com/user/pkg         # 添加依赖 (git / 本地路径)
kylix install                         # 安装锁定的依赖
kylix remove pkg                      # 移除依赖
kylix publish                         # 发布到包注册中心

# 信息 & 国际化
kylix version                         # 显示版本
kylix help                            # 帮助
KYLIX_LANG=zh kylix check             # 切换中文错误信息

一份源码,多个目标

Kylix 源代码可以编译到 5 种平台:Go 二进制、LLVM 原生、WebAssembly、WASI 和自举编译器。所有目标共享同一个 AST 与类型系统。

🐹

Go 后端(默认)

Pascal → Go 源码 → 原生二进制。利用 Go 内置的交叉编译,目标机器无需安装运行时。

kylix build --target=linux/arm64
⚙️

LLVM 原生后端

AST → LLVM IR → 目标文件 → 原生二进制。绕过 Go 工具链,支持 -O0/O1/O2/O3 优化。M2 Phase 1 已完成数组 + 优化。

kylix build --backend=llvm --llvm-opt=3
🌐

WebAssembly

编译到 wasm 在浏览器或 Node.js 运行。Go 标准(~3 MB)或 TinyGo(~30 KB)二选一。

kylix build --wasm --tinygo
🪐

WASI 运行时

Wasmtime、Wasmer、Cloudflare Workers 跨平台执行。完整的 stdin/stdout/env/args 支持。

kylix build --wasi main.klx
♻️

自举编译器(Kylix 写 Kylix)

7 个 .klx 源文件可重新编译自身。Diff 验证:Go 参考实现 vs Kylix 自举 — 语义等价。

token / lexer / parser / generator
📦

包注册中心

Registry 服务端(REST API + htmx 前端)。kylix publish 发布,kylix add 安装。即将部署到 packages.kylix.top。

SQLite / PostgreSQL 存储
# 同一份 hello.klx,五种目标
kylix build hello.klx                          # Go → 本地原生
kylix build --target=darwin/arm64 hello.klx    # → macOS Apple Silicon
kylix build --target=linux/amd64 hello.klx     # → Linux x86-64
kylix build --target=windows/amd64 hello.klx   # → Windows x86-64
kylix build --backend=llvm --llvm-opt=2 hello.klx  # LLVM 原生 (-O2)
kylix build --wasm --tinygo hello.klx          # WebAssembly (TinyGo ~30 KB)
kylix build --wasi hello.klx                   # WASI (Wasmtime)

20+ 模块,开箱即用

从 Web 框架到 ORM,从 LLVM 系统接口到正则表达式 — 全部由 LSP 自动补全。其中 7 个模块(strutil、mathutil、arrayutil、collections、jsonutil、regex、datetime、httpclient、wasi)是纯 Kylix 实现,证明语言的自举能力。

🚀

boot NEW

KylixBoot:路由 + DI + 中间件

uses boot
🌐

web

HTTP 服务器、路由、中间件

uses web
🗄️

orm

MySQL / PostgreSQL / SQLite + QueryBuilder

uses orm
📋

template

模板引擎、布局、片段

uses template
📦

container

依赖注入容器 (Singleton/Transient/Scoped)

uses container
⚙️

config / autoconfig

环境变量 + 多源自动配置

uses autoconfig
🛡️

middleware

CORS / Auth / RateLimit / RequestID / Logger

uses middleware

validation

请求数据校验流式 API

uses validation
🌐

httpclient v3.0+

HTTP 客户端,自定义 Header

uses httpclient
🪐

wasi v3.0+

WASI 系统接口(Wasmtime / Workers)

uses wasi
📁

sysutil

文件 I/O、目录、路径工具

uses sysutil
📊

jsonutil

JSON 编解码、类型安全访问(纯 Kylix)

uses jsonutil
📅

datetime

日期运算、格式化、解析(纯 Kylix)

uses datetime
🔍

regex

正则匹配、查找、替换(纯 Kylix)

uses regex
🔤

strutil

Reverse / StartsWith / PadLeft …(纯 Kylix)

uses strutil
🔢

mathutil

Pow / Gcd / IsPrime / Factorial(纯 Kylix)

uses mathutil
📚

arrayutil / collections

Sum / IndexOf / TIntList(纯 Kylix)

uses arrayutil
🔁

iter / stringbuilder / resulttype

迭代器、构建器、Result<T,E>(纯 Kylix)

uses iter

从入门到精通

34 个教程示例 + 8 个分模块的指南文档。无论你是 Pascal 老兵、Go 工程师还是新手,都能快速上手。

🚀 加入 Kylix 社区

Kylix 已 100% 自举,正在迈向 v3.2 — 自动装配、ORM 注解、LLVM 接口与泛型。
欢迎贡献代码、提交 Issue、完善文档,一起把 Pascal 带入 LLVM 时代。