国产中文编程语言 zlang 发布:中文写代码,到底是噱头还是真需求
TL;DR 速览
- zlang 发布:国产编程语言新版本,主打中文关键字编程
- 中文编程:降低入门门槛,但生态和效率是硬伤
- 技术本质:语言难点在编译器,不在关键字用哪国文字
- 适用场景:教学、业务 DSL 可行,生产级仍需观望
昨天到今天的科技热榜上,有一条 20 万热度的讨论格外显眼:「国产编程语言 zlang v0.12.2.0 发布,支持中文编程,这意味着什么」。评论区吵成两派,一派觉得中文编程是国产软件的翻身仗,另一派觉得这纯属噱头。
吵归吵,真正把「中文编程」这件事从技术上讲清楚的人不多。这篇我想换个角度:不站队,先拆一下编程语言到底「难」在哪,再看中文在这件事里能解决什么、解决不了什么。具体到 zlang 的语法细节和版本特性,以官方文档为准,我只讲底层通用的逻辑。
中文编程:一条走了很多年的老路
先把话说清楚,zlang 不是第一个吃螃蟹的。国内「用中文写代码」的尝试,可以追溯到很多年前。
早期的代表是易语言,它用全中文的关键字和一套可视化的开发环境,让不少非科班的人写出了能跑的程序,一度在「灰产工具」和「入门教学」两个圈子里流传很广。再往后还有各种「中文版 Python」「中文版 C」的民间改造,以及用文言文语法写代码的「文言」项目——那个项目甚至把文言文编译成了 JavaScript 和 Python,一度在 GitHub 上爆火。
这些尝试的共同点是:都做成了「能跑」,但都没能撼动英文编程的主流地位。原因不在情怀,而在技术生态,这个我后面展开。
所以 zlang 今天再谈中文编程,本质上是在回答一个被反复问了很多年、却始终没被回答好的老问题:中文到底能不能、值不值得成为一门正经编程语言的第一语言。
技术拆解:中文关键字,难在哪
很多人以为「中文编程」就是把if换成「如果」、把for换成「循环」。真要这么想,就把问题看浅了。
一门编程语言要跑起来,至少要过三关:词法分析、语法分析、代码生成。词法分析器(Lexer)负责把源码切成一个个 token,if和「如果」在这里只是同一个 token 类型的不同写法——换句话说,把关键字本地化,在词法层面几乎零成本,就是一个映射表的事。
真正决定语言好不好用的,是后面两层,跟关键字用哪国文字没关系。
语法分析器(Parser)负责把 token 组织成抽象语法树,代码生成器再把语法树翻译成机器码或字节码。这两层的复杂度,取决于你设计的语法有多少特性、类型系统强不强、优化做得好不好——这些是「语言设计」的问题,英文中文一视同仁。
一个更现实的坑是「歧义」。中文没有空格分词,关键字和标识符之间如果处理不好,解析器很容易分不清哪个是关键字、哪个是变量名。英文靠空格天然分词,中文编程语言就得在词法层面额外处理分词问题。这不是不能解决,但它是实打实的额外工程成本。
所以结论是:中文关键字的成本主要在生态,不在编译器本身。编译器能用映射表解决的东西,从来都不是瓶颈。
中文标识符:其实主流语言早就能用
再说一个容易混淆的点:很多人以为「支持中文编程」就等于「关键字是中文」。其实这是两码事。
主流编程语言里,中文标识符(变量名、函数名用中文)的支持已经相当普遍。Python 里写def 计算总和(数据):是合法的,Go 和 Rust 也允许 Unicode 标识符,Java 和 JavaScript 同样支持。真正被锁死的,从来只有「关键字」和「标准库」这两块。
这意味着,一个团队完全可以在现有语言里用中文给函数和变量命名,把「代码可读性」这件事做到位,同时继续享受成熟语言的生态和工具链。这条路,比从零造一门中文语言务实得多。
那什么场景下,中文关键字才有不可替代的价值?我的观察是两类:一是教学入门,让完全没接触过编程的人第一眼能看懂代码在干嘛;二是面向业务人员的 DSL(领域专用语言),比如让运营、财务自己写规则,中文关键字能大幅降低他们的心理门槛。这两类场景里,中文是有真实价值的。
词法层面:中文分词才是真正的坑
其实中文编程最被低估的技术难点,不在关键字,而在分词。
英文代码靠空格天然分词,if x > 10一眼就知道if、x、>、10是四个独立的 token。中文没有空格,如果写成「如果x大于10」,解析器得自己判断「如果」是关键字、「x」是变量、「大于」是运算符、「10」是数字——这中间的分界点,机器并不天然知道。
更麻烦的是中文的多字词和歧义。「如果」是关键字,但如果有个变量叫「果汁」呢?「如果汁」这个连续串里,「如果」到底该不该被识别成关键字?这类问题,英文编程几乎不会遇到,中文编程却要正面处理。
解决方案其实也有,主要两条路。一是「关键字用全角标点或特殊符号分隔」,强制制造分界;二是「词法层面做最长匹配 + 关键字优先」的规则,让解析器在歧义时优先按关键字切分。这些方案都可行,但都会增加词法分析器的复杂度,而且稍有不慎就会出现「变量名被误判成关键字」的隐蔽 bug。
这也是为什么很多中文编程语言的实现,最终都选择了「关键字加前后空格」或「关键字用特定符号包裹」的妥协方案——不是不想更自然,而是分词歧义这个坑,深不见底。
一张表看懂中文编程的取舍
把上面的讨论压成一张表,方便你对号判断:
| 维度 | 中文编程的收益 | 中文编程的代价 |
|---|---|---|
| 入门门槛 | 关键字零翻译成本,新手看得懂 | 报错信息、文档仍是英文,学深了照样要过英文关 |
| 代码可读性 | 母语命名更直观 | 团队协作时命名风格难统一 |
| 生态工具 | —— | IDE 补全、语法高亮、静态分析几乎要从零做 |
| 执行性能 | 不影响(最终都编译成机器码) | —— |
| 社区规模 | —— | 提问、找库、招人都受限于小社区 |
这张表想说明的是:中文编程的收益集中在「入门」和「表达」这两点,而代价几乎全部落在「生态」这一侧。对一个要长期维护的项目来说,生态往往是决定生死的那一侧。
我的判断:语言的价值在生态,不在关键字
聊到最后,我给一个不讨好的结论:一门编程语言能不能活下来,决定因素从来不是它用英文还是中文,而是它周围长出了什么。
看 Python 就知道,它真正厉害的地方不是语法多优雅,而是背后那几万个第三方库、成熟的包管理、海量的教程和 Stack Overflow 上的答案。这些积累需要十年以上的时间,不是换个关键字语言就能绕过去的。
zlang 这类国产语言的真正价值,可能不在「替代英文编程」,而在两个更细的位置:一是把「中文编程」这件事继续往前推,沉淀出分词、歧义处理这些中文语言特有的工程经验;二是给特定人群——编程初学者、业务人员、国产化场景——提供一个更友好的入口。
如果你问我个人的建议:想正经做生产项目,还是用成熟语言配中文标识符;想验证中文编程的想法、想给团队做内部 DSL,那 zlang 值得你花一个下午试一下。它最大的意义,可能是让「中文编程」这个老问题,终于有了一个持续迭代的、现代化的新样本。