本文是凹语言发起人之一丁尔男,受 OSDT 组织邀请做的“凹语言项目起源及现状”的报告讲稿整理。完整的视频已经上传到 B 栈: https://www.bilibili.com/video/BV1EY411i7Tt/?buvid=0b2292c44489d352f3de21b6058a05a6 。
大家好,很荣幸受吴老师的邀请参加 OSDT2022 大会,借此机会跟各位介绍一下 凹语言 项目的起源、发展过程和目前所取得的一些进展。
事情得从 2018 年开始说起,因为工作的缘故,在工程实践中,需要一门具备这些特征的编程语言:
当时满足这些条件的语言不说寥寥无几吧,至少也是屈指可数。于是在 2018 年底,柴树杉和我启动了凹语言项目,项目名称有这些寓意:最显著的是音形双关,wa 字的发音是 WASM 的前半段,字型和 WASM 图标非常相似;从字形的角度上还可以解读成平台的 C 等等。
2019 年我们开始了语法定义之类的前期准备工作;
2020 年的重大进展是我们邀请到了 Go 编译器和 LLVM 的代码贡献者史斌加入创始团队。他的到来大大的提高了团队信心。5 月我们举行了第一次工作组会议,把“不做玩具车,要做可以跑的车”作为项目目标给确定了下来。
2021 年,我们合作出版了《 Go 语言定制指南》这本书。其实在这个时候,凹语言 的技术路线已经成型了:前端部分以 Go 语法为蓝本,删除与并发相关的特性,然后创建一个后端和运行时,显然,后端部分需要针对 WASM 进行针对性的设计。
2022 年 1 月,凹语言 项目的开发正式启动,在规划中,它将支持 wa 语法和 wago 语法,经过基于 Go1.17 修改的前端处理为 AST ,然后通过 3 个不同的后端输出 C++代码、LLVMIR 以及 WASM 模块。
2022 年 7 月对凹语言来说是一个里程碑。编译器的框架搭起来了,C 后端取得了一些阶段性的成果,验证了 RC 等运行时行为,于是我们启动了 WASM 后端的开发工作。更重要的是,7 月 20 号我们开源了,并且公布了线路图。
开源动作给项目的带来了两个变化,一是无形中对创始团队形成了压力,二是有更多身怀不同技能的小伙伴加入,二者结合使开发进度有了显著的提升。
于是在 9 月份的时候,结合 WASM 后端的阶段性成果,我们上线了一个纯网页的编译和运行环境 Playground ,里面内置了一些简单的凹语言的例子程序;是一个很直观、便捷的了解凹语言语法的入口。
11 月迎来了一波小高潮。原本计划在 2023 年春节开始的 LLVM IR 后端提前启动,点亮了 AVR 单片机;经过开发组多轮讨论确定了使用 AGPLv3 协议,并且把主库迁移到了 gitee ;官网网站改版了;通过 Arduino-wasm 项目点亮了 Arduino Nano33 ;增加了 VIM 、Fleet 的语法高亮插件; WASM 后端支持切片、结构体、方法、闭包、自动 RC 等等,从大特性角度来说,除了接口之外,WASM 后端基本已经覆盖了语言设计目标。
近期我们准备用凹语言写一个网页版的贪吃蛇,其中涉及图形显示、UI 交互操作、和 js 宿主环境交换数据等一些功能,把这个能实际运行的小游戏作为年底的一个小里程碑。另外,在明年年初,接口支持有望完成,这样就补全了 WASM 后端的大特性列表。
凹语言官网地址是 https://wa-lang.org 。
这是凹语言目前的开发组成员,所有人在项目中都是业余参与用爱发电。我们大多都不是编译器从业者,因此从理论水平角度来说非常需要各位大佬的指正和支持,谢谢大家!