去也 QUYE.COM

首页/技术资产/光明 light

光明 · 一门把「中文表达」和「工程强度」放进同一处语言

大多数中文编程语言停在「让初学者看懂」。光明想做的是另一件事:用少量稳定的核心字做内核,向上分出不同文体,让入门脚本和商用大工程共用一套语法地基。

想先跑通再读细节?两分钟上手

它是什么

光明是一门编程语言,不是一个翻译层。它的思路借自中文本身:三千常用字足以覆盖各学科,那么一门语言也只需要少量稳定的核心字,再在其上叠加不同「文体」——给青少年的白话体,给工程的文言体,嵌在语言里的 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 的原生可执行文件。一门语言如果连自己的编译器都写不出来,就还没有资格谈「工程可用」——这是我们对它的最低验收线。

GitHub 仓库 GitCode 镜像

三个后端,三种代价

  • 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。

相关

看它怎么撑起一个真实的 Agent 系统

lightharness 用光明 1:1 复刻了一个 Agent 框架——那是这门语言压力最大的一个用户。