它是什么
光明是一门编程语言,不是一个翻译层。它的思路借自中文本身:三千常用字足以覆盖各学科,那么一门语言也只需要少量稳定的核心字,再在其上叠加不同「文体」——给青少年的白话体,给工程的文言体,嵌在语言里的 SQL 与数学式。
核心字表 30 个字永久冻结,永不修改:若 否 当 遍 跳 过 返 / 设 段 类 承 接 配 / 试 捕 抛 终 / 自 之 并 从 是 / 且 或 非 真 假 空 / 导 出。所有高层语法都由这 30 字组合而成,早期的双字关键字(如「如果」「遍历」)作为别名永久保留。
四层语法,各管一段
- L1 白话体:19 个核心字、中文标点、类型自动推断。零基础者第一节课就能打印出东西。
- L2 文言体:全部 30 字、英文标点、显式类型标注。面向生产代码与多人协作。
- L3 领域嵌入:引 SQL: / 引 正则: / 引 数学: 块内直接写领域语言,编译器自动参数化,从语法层面堵住注入。
- L4 外语引用:引 Python: / 引 C: / 引 Go: / 引 MoonBit: 在独立命名空间沙箱里运行,用 出 显式导出,不污染主作用域。
这里的分层是语法层级(文体与方言),不是编译器的内部分层——编译器自己的结构是五段前端加代码生成。
写起来是这样的
引 数学 二次求根: x = (-b ± √(b²-4ac)) / 2a 打印 二次求根(a=1, b=-5, c=6) # [3.0, 2.0]
领域语言不是字符串拼接。上面这段里,数学式被解析成表达式树,参数名成为调用签名的一部分。
引 Python: import numpy as np 数据 = [1,2,3,4,5] 均值 = float(np.mean(数据)) 出 均值 打印 均值 # 3.0
- 当前版本
- v0.4.0
- 状态
- 活跃开发 · 缺陷账清零阶段
- 核心字
- 30(L0,永久冻结)
- 原生能力
- 711 项(内置 411 + 运行时 262)
- 标准库
- 14 阶段 · 60+ 模块
- CI 用例
- 9000+,失败 0
- 编译器
- 自举(用光明写光明)
- 许可
- 见仓库
为什么自举重要
编译器本体用光明重写了一遍(约 95 个段落、62KB 源码),能自举编译出约 525KB 的原生可执行文件。一门语言如果连自己的编译器都写不出来,就还没有资格谈「工程可用」——这是我们对它的最低验收线。
三个后端,三种代价
- src(默认):手写解析器,Python 解释执行。零额外依赖,改一行就能跑。
- antlr:兼容旧语法的解析器,用于回归对照。
- llvm-typed:编译成原生机器码,不依赖 Python 运行时;runtime C 层内置 TLS、SHA512、PBKDF2、对象池等能力。
AI 也能写它
配套的 AI Copilot 走的是「用户需求 → 通用模型生成 → 微调模型翻译为光明 → 后端兼容性检测」这条路,7B 以下的模型也能写出可运行的代码。仓库里有一份 1300 多行的 AI 编程指南,把高频错误和标准库函数名映射写死了——这是让 Agent 写代码不跑偏的关键。
明确的能力边界
- LLVM 后端能编译出原生 EXE,但不支持依赖 Python 生态的项目(例如 导入 asyncio 会报模块未找到)。
- 标准库覆盖面仍在补,不是「Python 有什么它就有什么」。
- 语法在 v0.x 阶段仍可能调整;L0 核心字不会动,其余不承诺。
- Windows 上需要 Python 3.10+;LLVM 后端另需 LLVM/Clang。