Han:用 Rust 编写的韩语编程语言
今天在 Hacker News 上看到一个有趣的项目——Han,这是一个用 Rust 编写的编程语言,所有关键字都是韩语。这让我想起一个老生常谈的问题:编程语言为什么必须是英语?
用母语写代码
Han 的核心想法很简单:如果代码能用母语阅读和书写,对非英语母语的开发者会更友好。项目作者选择了韩语作为实验对象,毕竟 Hangul(韩文字母)本身就是世界上最科学的文字系统之一。
看看 Han 的 “Hello World”:
출력("안녕하세요, 세계!")
출력 就是 “输出” 的意思。这种直观的语义表达,比记忆 print、printf、console.log 这些词汇对韩语使用者来说更自然。
语言特性
Han 不是玩具语言。作为一个静态类型、编译型语言,它的功能相当完整:
类型系统
정수(整数)실수(实数/浮点数)문자열(字符串)불(布尔值)없음(空/void)
控制流
만약(如果)用于条件判断반복(重复)用于循环맞춰(匹配)用于模式匹配시도/실패(尝试/失败)用于错误处理
函数与结构
함수定义函数구조定义结构体가져오기用于模块导入- 支持闭包、泛型、LSP 服务器
编译流程是 Han → LLVM IR → clang → 本地二进制,这意味着性能不会比 C/C++ 差多少。
代码示例
Han 有一个词频统计的示例程序,可以看看语法风格:
변수 텍스트 = "hello world hello han world hello"
변수 단어들 = 텍스트.분리(" ")
변수 단어목록 = []
변수 개수목록 = []
반복 변수 i = 0; i < 단어들.길이(); i += 1 {
변수 찾음 = 거짓
반복 변수 j = 0; j < 단어목록.길이(); j += 1 {
만약 단어목록[j] == 단어들[i] {
개수목록[j] = 개수목록[j] + 1
찾음 = 참
}
}
만약 찾음 == 거짓 {
단어목록.추가(단어들[i])
개수목록.추가(1)
}
}
반복 변수 i = 0; i < 단어목록.길이(); i += 1 {
출력(형식("{0}: {1}", 단어목록[i], 개수목록[i]))
}
虽然是韩语,但结构清晰,对有编程经验的人来说完全可以猜出含义。
意义与局限
Han 的出现提出了一个有趣的问题:编程语言的普及是否过度依赖英语霸权?
支持者认为,使用母语关键字可以降低编程门槛,让更多非英语背景的人进入技术领域。反对者则指出,这会造成代码的可移植性和协作成本问题——毕竟英语仍是技术界的通用语。
现实可能介于两者之间。Han 或许不会成为主流语言,但它证明了编程语言的语法完全可以本地化。对于教育场景、特定领域的内部工具,或者纯粹的文化实验,这类语言都有其价值。
技术实现
值得一提的是 Han 的技术栈:
- Rust:编译器 toolchain 完全用 Rust 编写
- LLVM:通过 LLVM IR 生成高效机器码
- LSP:内置 Language Server Protocol 支持
- REPL:提供交互式解释器模式
用 Rust 写编译器是个明智的选择——Rust 的类型系统和内存安全特性让编译器开发更少出错。项目还提供了 REPL 和 LSP 服务器,说明作者确实在认真构建一个可用的工具,而非只是概念验证。
结语
Han 让我想起了易语言——那个曾经在中国市场流行过的中文编程语言。虽然易语言因为各种原因逐渐式微,但”母语编程”的想法从未消失。
在全球化时代,我们习惯了用英语写代码、读文档、参加技术会议。但 Han 提醒我们:技术可以有不同的面孔。也许未来的编程教育会从本地语言开始,再逐步过渡到英语;也许特定领域会出现更多本地化 DSL;又或者,IDE 的实时翻译会让关键字语言变得无关紧要。
无论如何,Han 是一个有趣的技术实验。它用 Rust 和 LLVM 证明了构建非英语编程语言并不困难,困难的是改变人们的习惯和观念。
如果你感兴趣,可以在 GitHub 上查看源码,或者试试 hgl repl 体验一下用韩语写代码的感觉。