2

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

 1 year ago
source link: https://www.v2ex.com/t/921024
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  程序员

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

  chai2010 · chai2010 · 16 分钟前 · 16 次点击

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

st0022-01.png

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

st0022-02.png

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

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

当时满足这些条件的语言不说寥寥无几吧,至少也是屈指可数。于是在 2018 年底,柴树杉和我启动了凹语言项目,项目名称有这些寓意:最显著的是音形双关,wa 字的发音是 WASM 的前半段,字型和 WASM 图标非常相似;从字形的角度上还可以解读成平台的 C 等等。

st0022-03.png

2019 年我们开始了语法定义之类的前期准备工作;

st0022-04.png

2020 年的重大进展是我们邀请到了 Go 编译器和 LLVM 的代码贡献者史斌加入创始团队。他的到来大大的提高了团队信心。5 月我们举行了第一次工作组会议,把“不做玩具车,要做可以跑的车”作为项目目标给确定了下来。

st0022-05.png

2021 年,我们合作出版了《 Go 语言定制指南》这本书。其实在这个时候,凹语言 的技术路线已经成型了:前端部分以 Go 语法为蓝本,删除与并发相关的特性,然后创建一个后端和运行时,显然,后端部分需要针对 WASM 进行针对性的设计。

st0022-06.png

2022 年 1 月,凹语言 项目的开发正式启动,在规划中,它将支持 wa 语法和 wago 语法,经过基于 Go1.17 修改的前端处理为 AST ,然后通过 3 个不同的后端输出 C++代码、LLVMIR 以及 WASM 模块。

st0022-07.png

2022 年 7 月对凹语言来说是一个里程碑。编译器的框架搭起来了,C 后端取得了一些阶段性的成果,验证了 RC 等运行时行为,于是我们启动了 WASM 后端的开发工作。更重要的是,7 月 20 号我们开源了,并且公布了线路图。

st0022-08.png

开源动作给项目的带来了两个变化,一是无形中对创始团队形成了压力,二是有更多身怀不同技能的小伙伴加入,二者结合使开发进度有了显著的提升。

于是在 9 月份的时候,结合 WASM 后端的阶段性成果,我们上线了一个纯网页的编译和运行环境 Playground ,里面内置了一些简单的凹语言的例子程序;是一个很直观、便捷的了解凹语言语法的入口。

st0022-09.png

11 月迎来了一波小高潮。原本计划在 2023 年春节开始的 LLVM IR 后端提前启动,点亮了 AVR 单片机;经过开发组多轮讨论确定了使用 AGPLv3 协议,并且把主库迁移到了 gitee ;官网网站改版了;通过 Arduino-wasm 项目点亮了 Arduino Nano33 ;增加了 VIM 、Fleet 的语法高亮插件; WASM 后端支持切片、结构体、方法、闭包、自动 RC 等等,从大特性角度来说,除了接口之外,WASM 后端基本已经覆盖了语言设计目标。

st0022-10.png

近期我们准备用凹语言写一个网页版的贪吃蛇,其中涉及图形显示、UI 交互操作、和 js 宿主环境交换数据等一些功能,把这个能实际运行的小游戏作为年底的一个小里程碑。另外,在明年年初,接口支持有望完成,这样就补全了 WASM 后端的大特性列表。

st0022-11.png

凹语言官网地址是 https://wa-lang.org

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK