Skip to content
On this page

OSDT2022分享: 凹语言项目起源及现状


本文是凹语言发起人之一丁尔男,受OSDT组织邀请做的“凹语言项目起源及现状”的报告讲稿整理。完整的视频已经上传到B栈:https://www.bilibili.com/video/BV1EY411i7Tt/?buvid=0b2292c44489d352f3de21b6058a05a6

大家好,很荣幸受吴老师的邀请参加 OSDT2022大会,借此机会跟各位介绍一下 凹语言 项目的起源、发展过程和目前所取得的一些进展。

事情得从2018年开始说起,因为工作的缘故,在工程实践中,需要一门具备这些特征的编程语言:

  • 首先对WebAssembly友好,能生成便于使用的WASM模块
  • 其次要对开发者友好,容易上手,使用的心智负担不能太重
  • 对团队开发友好,具备类似于包管理的模块化功能

当时满足这些条件的语言不说寥寥无几吧,至少也是屈指可数。于是在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

  • 碎碎念栏目记录了项目中一些有趣的事情和进展;
  • 社区栏目里有微信群和微信公众号二维码,以及开发组例会的会议纪要
  • Play栏目就是刚才提到的Playground,目前内置了helloworld、计算素数、用字符打印心形、图灵完备的brainfuck虚拟机的实现、和四种类型的闭包的例子。

这是凹语言目前的开发组成员,所有人在项目中都是业余参与用爱发电。我们大多都不是编译器从业者,因此从理论水平角度来说非常需要各位大佬的指正和支持,谢谢大家!