Jaithon 3:语法完美的快速编程语言
摘要
Jaithon 3是一种动态执行和垃圾回收的编程语言,融合了Java、Rust和Python的精华,并在开发中使用了AI辅助编码。
查看缓存全文
缓存时间: 2026/08/16 00:39
abhiramasonny/jaithon 源代码:https://github.com/abhiramasonny/jaithon
Jaithon
Java 的优点与 Python 融合
语言指南
Jaithon 是什么
Jaithon 是一种动态执行、具有垃圾回收机制的语言,运行于字节码虚拟机之上。它的架构深受 Java 结构启发,而其他部分则融合了 Rust 和 Python 的设计理念。除核心原生实现部分外,几乎所有功能都由 Jaithon 自身编写实现,这使得语言高度自举,且易于扩展新功能。
AI 使用情况
.jai 和 .c 文件中的大部分文档目前由 AI 生成以加快开发进度,但会随语言迭代逐步重写。README 和大部分 LANGUAGE.md 为人工撰写、经过仔细审核,当前内容完全准确。代码中的文档字符串可能仍存在不准确之处,因其由大语言模型生成。此外,本仓库中约 80% 的原始代码通过智能编程工具(Claude Code)生成。我的工作流程是:首先完全手动设计功能或修复缺陷,然后借助大语言模型协助完成代码、集成到代码库、在推送前发现额外错误、优化性能,或纠正我的错误假设。最终代码是我完全理解并认可的成果,完全属于我。架构设计也百分百由我个人原创,未借助 AI。我认为智能辅助编程是软件工程的未来。它让我能比独自开发更快构建 Jaithon 3,同时在重要决策中保持人类的主导地位。若无智能编程工具,Jaithon 3 可能不会存在,语言功能也会停留在初级阶段。整个代码库由我亲自审核,我不会称自己为“氛围程序员”,也不会视 Jaithon 为“AI 流水线产物”;这是与 LLM 协作的工程实践,LLM 作为效率倍增器提升了我的生产力。
快速开始
git clone https://github.com/abhiramasonny/jaithon
cd jaithon
make # 构建 ./jaithon
make test # (可选)运行基准测试和测试套件
./scripts/install.sh # (可选)安装到 /usr/local
运行 Jaithon 需要 C11 编译器和 make 工具,若系统存在 readline 库,REPL 将支持其功能。在 macOS 上,Metal 和 Cocoa 框架可启用 GUI 和 GPU 模块,其他功能无需这些框架即可编译运行。
jaithon run program.jai # 运行文件
jaithon # 启动 REPL
jaithon check src/ # 仅类型检查不运行
jaithon fmt . # 标准格式化(无参数)
jaithon test # 发现并运行测试
jaithon doc --out docs/api # 生成 API 文档
jaithon disasm program.jai # 字节码列表
REPL 可跨行保持绑定状态,在 ... 提示符下继续未完成的输入,并支持元命令。输入 :help 可查看所有命令。
.jai 代码示例
# let 为不可变绑定,var 为可变,const 为编译时常量
let name = "Jaithon"
var count = 0
const MAX = 1 << 16
# 类型可选,但若声明则会检查
let ratio: float = 0.5
let names: list[str] = []
let lookup: dict[str, int] = {}
let maybe: int? = null # T? 表示 T | null
if names.len() > 0 {
print(names[0])
}
print(maybe ?? -1) # 空值合并操作
# 循环与区间
for i in 0..10 {
count += i
}
'outer: for row in grid {
for cell in row {
if cell == target {
break 'outer
}
}
}
# 模式匹配
let kind = match code {
200 => "ok",
301 | 302 => "redirect",
400..=499 => "client error",
n if n >= 500 => "server error",
_ => "unknown",
}
enum Shape {
Circle(radius: float),
Rect(w: float, h: float),
}
fn area(s: Shape) -> float {
return match s {
Shape.Circle(r) => math.PI * r ** 2,
Shape.Rect(w, h) => w * h,
}
}
# trait 是带默认方法的接口,同时作为类型
trait Printable {
fn to_str(self) -> str
fn describe(self) -> str {
return f"<{self.to_str()}>"
}
}
# 错误作为类
fn load(path: str) -> str {
let file = io.open(path, "r")
defer { file.close() }
return file.read()
}
# 推导式与惰性迭代器
let squares = [x ** 2 for x in 0..10 if x % 2 == 0]
let first_ten = iter(source).map(parse).filter(is_valid).take(10).collect()
更多示例详见 LANGUAGE.md,也可查看 examples 目录。
包管理
可独立于 Jaithon 标准库分发的库位于 packages/。每个包包含独立的源码、测试、版本和依赖清单。Jaithon 从工作区目录和已安装的 share/jaithon/packages 目录中查找包。
jaiplot 是类 Matplotlib 的绘图库,支持文件和窗口后端。
jaitensor 提供基于 Metal 的 float32 张量和 Keras 风格 API,包含常用张量运算、格式无关的数据集、密集模型、ReLU/sigmoid/tanh/softmax 激活函数、动量 SGD、Adam 优化器、验证、预测及 JSON 权重文件。示例涵盖 MNIST 和 非线性螺旋分类器。
错误信息
所有错误均采用以下格式,便于调试:
error[E0301]: cannot assign to immutable binding `x`
--> examples/demo.jai:7:5
|
5 | let x = 1
| - `x` declared immutable here
...
7 | x = 2
| ^^^^^ assignment to immutable binding
|
help: change the declaration to `var x = 1`
错误代码含义:
| 代码 | 领域 |
|---|---|
E00xx | 词法分析 |
E01xx | 语法 |
E02xx | 名称解析 |
E03xx | 绑定规则 |
E04xx | 类型系统 |
E05xx | 模式匹配 |
E06xx | 函数 |
E07xx | 类 |
E08xx | 模块 |
架构
源码 → 词法分析 → 语法分析 → 名称解析 → 类型检查 → 代码生成 → 虚拟机
│ │ │ │ │ │ │
tokens AST 符号+类型+字节码 值槽位 类型转换+缓存+GC
贡献指南
make debug # -O0 -g,启用断言
make check # 类型检查整个代码树
make test # 运行完整测试套件
make bootstrap # 前端差异验证
jaithon fmt --check . # 格式检查
许可证
MIT 许可证。详见 LICENSE。
由 Abhirama Sonny 创建 (https://abhiramasonny.com/)。
相似文章
Jam 编程语言
Raphael Amorim 宣布了 Jam,一种旨在结合 Rust 的安全性和 Zig 的简洁性的新编程语言,解决了在 AI 生成代码时代现有系统语言的复杂性和验证开销。
编程语言中的一些好点子
本文讨论了三种编程语言特性:用于在Crystal和TypeScript等静态语言中实现动态感觉的流类型、用于确保Rust内存安全的借用检查,以及用于D语言中不变性检查的契约编程。
LuaJIT 3.0 提议的语法扩展
LuaJIT 3.0 提议的语法扩展已公布,为 Lua 的 LuaJIT 即时编译器带来潜在的新功能。
JIT编译代码在5μs内完成
文章探讨了AI辅助如何简化了创建具有亚微秒级编译时间的快速JIT编译器的过程,并通过一个基于Rust的正则表达式引擎示例进行了演示。
@QuixiAI: https://x.com/QuixiAI/status/2106986029383315840
With 是一门以人体工学/极简仪式感为先的系统编程语言,主打 Rust 级安全(单所有权、生成式引用)与 C 级可达性,通过强推断减少样板代码,并内建对 C 库的直接建模导入,可编译为原生单二进制、无需系统 LLVM。