凹语言™我的项目主页 https://wa-lang.org/
本我的项目的发起人(柴树杉、丁尔男、史斌)均是 Gopher,在开发实际中,因为不同的起因,先后萌发了倒退一门新语言的想法,Go 语言克服的格调是咱们对于编程语言审美的最大公约数,因而抉择它作为初始的底本。不用讳言:本我的项目启动时大量借鉴了 Go 的设计思维和具体实现——这是在无限投入下不得不作出的折衷,咱们心愿随着我的项目的倒退,积攒更多原创的设计,为自主翻新的大潮奉献一点力量。
纵观编程界,没有哪门被宽泛应用的通用语言诞生于 KPI 制度之下。本我的项目作为集体业余我的项目,不存在明确的指标,从成绩分类的角度,咱们心愿在第一阶段实现以下指标:
- 确定凹语言™语法规定
- 实现可用的凹语言™编译器
- 应用凹语言™创立一个网页利用
凹语言™个性——预期
凹语言™蕴含两套互相等价的语法:凹语法与 WaGo 语法,这里“等价”的含意是:二者可生成雷同的 AST 并无损的相互转换。应用凹语法编写的源文件后缀为 .wa
,应用 WaGo 语法编写的源文件后缀为 .wa.go
。WaGo 语法是 Go 语法的真子集,换句话说:一个非法的 WaGo 包必然是非法的 Go 包。
网页利用是咱们很器重的指标场景,这与 Go 语言把服务端作为主战场截然不同,WaGo 裁减掉的局部多半与此相关:
- WaGo 没有
go
关键字,不反对 goroutine/ 并发 - WaGo 没有
chan
关键字,不反对与之相干的管道操作 - WaGo 没有全局 GC——但 可能 会提供主动 RC 以尽可能简化内存治理
- WaGo 没有内置规范库——即便有,规模也极其无限
WaGo 的数据类型如下表:
字符串(string) | 数组(array) | 切片(slice) | 复数(complex) | 哈希表(map) | 构造体(struct) |
---|---|---|---|---|---|
有 | 有 | 有 | 可能有 | 可能有 | 有 |
WaGo 的其余个性如下表:
多返回值 | 办法 | 办法值 | 接口 | 闭包 | 反射 |
---|---|---|---|---|---|
有 | 有 | 可能无 | 有 | 可能有 | 可能有 |
各个性的实现可能性从高到底排列为:有 > 可能无 > 可能有 > 无
通过以上形容,大抵能够勾画出 WaGo 的轮廓。凹语法在 AST 层面与 WaGo 等价的同时,最显著的变动是减少了中文关键字。对于凹语法未来的倒退,咱们持凋谢态度。
凹编译器实现——路线
凹编译器的工作过程如下图所示:
凹编译器反对 C/C++、LLVM IR、WASM 等多种输入以满足不同的指标场景。以后阶段的次要工作:
- 创立编译器框架
- 确定前中后端模块间的接口
- 设计能满足语法个性基线的运行时模型
每种后端的进度相互独立,但显然指标代码越底层,须要思考的细节也越多,因而在落地语法个性时,采纳先高级指标后低级指标的程序有利于问题的逐渐降解。
各后端可能的利用场景:
- C/C++:凹语言™与 C/C++ 混合开发
- LLVM IR:间接编译为 Native Code
- WASM:间接编译为 WebAssembly 模块
当任一后端模块笼罩“可用最小集”,咱们将尝试开发一些简略的网页示例,待选的方向有交互式图形图像、在线编译等。
2022.7.23