凹语言?项目目标
凹语言?项目主页 https://wa-lang.org/
本项目的发起人(柴树杉、丁尔男、史斌)均是Gopher,在开发实践中,因为不同的原因,先后萌生了发展一门新语言的想法,Go 语言克制的风格是我们对于编程语言审美的最大公约数,因此选择它作为初始的蓝本。不必讳言:本项目启动时大量借鉴了 Go 的设计思想和具体实现——这是在有限投入下不得不作出的折衷,我们希望随着项目的发展,积累更多原创的设计,为自主创新的大潮贡献一点力量。
纵观编程界,没有哪门被广泛使用的通用语言诞生于KPI制度之下。本项目作为个人业余项目,不存在明确的指标,从成果分类的角度,我们希望在第一阶段完成以下目标:
- 确定凹语言?语法规则
- 实现可用的凹语言?编译器
- 使用凹语言?创建一个网页应用
.wa
,使用 WaGo 语法编写的源文件后缀为 .wa.go
。WaGo 语法是 Go 语法的真子集,换句话说:一个合法的 WaGo 包必然是合法的 Go 包。网页应用是我们很重视的目标场景,这与 Go 语言把服务端作为主战场截然不同,WaGo 裁减掉的部分多半与此相关:
- WaGo 没有
go
关键字,不支持goroutine/并发 - WaGo 没有
chan
关键字,不支持与之相关的管道操作 - WaGo 没有全局GC——但可能会提供自动RC以尽可能简化内存管理
- WaGo 没有内置标准库——即使有,规模也极其有限
字符串(string) | 数组(array) | 切片(slice) | 复数(complex) | 哈希表(map) | 结构体(struct) |
---|---|---|---|---|---|
有 | 有 | 有 | 可能有 | 可能有 | 有 |
多返回值 | 方法 | 方法值 | 接口 | 闭包 | 反射 |
---|---|---|---|---|---|
有 | 有 | 可能无 | 有 | 可能有 | 可能有 |
各特性的实现可能性从高到底排列为:有 > 可能无 > 可能有 > 无通过以上描述,大致可以勾勒出 WaGo 的轮廓。凹语法在AST层面与 WaGo 等价的同时,最显著的变化是增加了中文关键字。对于凹语法将来的发展,我们持开放态度。
凹编译器实现——路线 凹编译器的工作过程如下图所示:
文章图片
凹编译器支持 C/C++、LLVM IR、WASM 等多种输出以满足不同的目标场景。当前阶段的主要任务:
- 创建编译器框架
- 确定前中后端模块间的接口
- 设计能满足语法特性基线的运行时模型
各后端可能的应用场景:
- C/C++:凹语言?与 C/C++ 混合开发
- LLVM IR:直接编译为Native Code
- WASM:直接编译为WebAssembly模块
2022.7.23
推荐阅读
- FOC相关|FOC项目知识点总结一 | 概念扫盲——从有刷直流电机到PMSM和BLDC
- Go语言如何高效的进行字符串拼接(6种方式对比分析)
- 九章云极DataCanvas YLearn因果学习开源项目荣获“可信AI实践优秀案例”奖
- C语言实现飞机游戏(2)
- 新能源与纯电动技术|前次项目延期,35亿短债压顶,协鑫能科拟再发债扩产又补流
- Mac电脑下项目上传到Github
- 项目方案|【用户画像】从0到1掌握用户画像知识体系
- 初学Go|初学Go 值得深研的7大开源项目
- postgresql使用group|postgresql使用group by进行数据去重-2022新项目
- 笔记|链表的基本操作(增删改查)--C语言