我在造一个编程语言,叫 Free

我在造一个编程语言,叫 Free

最近朋友们问我都在忙什么,我说在写一个新的编程语言。他们通常先是一愣,然后问:"为什么?现在不是已经有Python、Go、Java这些了吗?"

说实话,这个问题我也问过自己很多遍。

为什么还要造轮子?

记得刚开始学编程的时候,用的是C语言。那时候总觉得,要是能有一门既保留C的性能,又有现代语言的开发体验,还能更符合中文开发者思维习惯的语言该多好。

十几年过去了,这个想法一直在心里。直到最近,终于决定把它实现出来,名字就叫Free

为什么叫Free?不是因为它免费,而是希望开发者在使用时能感受到那种"自由"------从繁琐的语法束缚中解放出来,从复杂的配置中解脱出来,当然它确实免费。

现在的进度

目前正处在早期最关键的语法分析阶段。这就像在教一个刚出生的婴儿理解人类语言:我要告诉计算机,当它看到class后面跟着一个单词时,那是在定义一个类;当看到fun时,是在定义函数。

有时候调试一个语法规则就要花上整个晚上。上周为了搞定函数调用链的解析(比如a.b().c()这种),喝了不下五杯咖啡。

技术选型的思考

选择 Kotlin/Native 来写初代编译器,是个经过很多纠结的决定。

Kotlin有着很现代的语言特性,它的扩展函数、空安全让编译器代码写起来很舒服。而且通过Native可以直接编译成机器码,不需要依赖JVM,这对一个编译器来说很重要。

后端选择LLVM,说实话是有点"站在巨人肩膀上"的意思。LLVM已经解决了最难的代码优化和跨平台问题,我可以专注于语言本身的设计。

宏大的自举目标

说出来可能有人会觉得不切实际,但我确实在规划一个很重要的里程碑:在2.0版本时,用Free语言本身来重写Free的编译器

这就像小鸡孵出后要自己下蛋一样。现在我用Kotlin在"孵"Free,等Free长大了,它就要学会自己"下蛋"。

这个过程会很难。想象一下,你要用一门还不成熟的语言去写它自己的编译器,这就像是拽着自己的头发想离开地面。但这也是最有魅力的地方------如果一个语言连自己的编译器都写不了,那它凭什么让别人信任呢?

在国内做这件事的难处

说实话,在国内做基础软件研发,氛围确实不如国外。

大家更关注的是"这个能马上带来业务价值吗?""能快速上线吗?",而对于编译器、操作系统这些底层技术,往往觉得"直接用现成的就好了,为什么要自己造?"

但我始终觉得,如果我们永远只在应用层打转,就永远只能在别人的技术地基上盖房子。什么时候能盖出自己设计的摩天大楼?

未来的想象

我理想中的Free,应该是个这样的语言:

  • 写起来像Kotlin一样舒服
  • 跑起来像C一样快
  • 错误提示像Rust一样友好
  • 生态像JavaScript一样丰富

我知道这个目标很远大,可能要好几年甚至几十年才能看到雏形。但每当想到未来可能有开发者用着我创造的语言去实现他们的创意,就觉得现在的一切辛苦都值得。

接下来的路

语法分析器完成后,还有语义分析、中间代码生成、LLVM IR生成、标准库建设......路还很长。

有时候晚上加班到很晚,看着满屏的编译器代码,也会问自己:"这么拼值得吗?"

但第二天早上起来,看到昨天卡住的问题有了突破,那种喜悦又是别的任何事情都无法替代的。

如果你也对编程语言设计感兴趣,或者只是想给我加个油,都很欢迎来交流。造语言这条路很孤独,但想到未来可能有人因为Free而爱上编程,就觉得一切都有了意义。


还在继续coding中,下次再聊

相关推荐
FunnySaltyFish8 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
Kapaseker15 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
Kapaseker2 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z3 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton4 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream4 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam4 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker5 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
糖猫猫cc5 天前
Kite:两种方式实现动态表名
java·kotlin·orm·kite
如此风景5 天前
kotlin协程学习小计
android·kotlin