凹语言特性

凹语言特性,第1张

 

在 HN 的热榜中,一篇题为《class="superseo">编程语言工具进展缓慢》的文章吸引了不少网友的注意,其写道,「当一个新工具被创新开发时,较新的编程语言就有足够多的机会将这种创新融入到他们的语言工具中,并使之标准化,最终让其自身比旧语言更具优势一些。如果把这些增量逐渐累积起来,那么旧的语言就会显得很痛苦和过时,甚至最终被淘汰。」

放眼编程榜单如 TIOBE,虽然排名靠前依然是我们熟悉的 PythonC、C++、Java 等语言,但是近日来,似乎是看到了文章伊始所述的趋势,我们见证了不少剑指老牌语言的新编程语言诞生,譬如有的是一群 Go 语言爱好者发起的凹语言,也有的是来自大厂的一线员工如 Oracle 核心团队成员创建的 Vely,还有的是科技巨头如 Google 自身研发的 Carbon。

接下来,我们将与大家一起了解一下最新诞生的编程语言,看其能否填补老牌语言们留下的遗憾。

 

国内 Gopher 发起的「凹语言」

凹语言(凹读 wa),作为一门刚刚起步的实验性编程语言,它是由国内的一群 Go 语言爱好者发起的,主要设计目标之一是「成为 Go 和 Rust 语法外衣的 C++ 语言」。

凹语言特性,e2b11ed0-1145-11ed-ba43-dac502259ad0.png,第2张

在创建伊始,柴树杉、丁尔男和史斌三位 Gopher 便决定以开源的方式来推动凹语言的发展,其开源地址为:https://github.com/wa-lang/wa。

具体的安装和测试方法如下:

安装 Clang,确保本地 clang 命令有效

go install github.com/wa-lang/wa@latest

wa init -name=_examples/hi

wa run _examples/hi

目前该项目提供了简单可执行的示例,如“打印 30 以内的素数”:

 

// 版权 @2021 凹语言 作者。保留所有权利。fn main() {    for n := 2; n <= 30; n = n + 1 {        let isPrime int = 1        for i := 2; i*i <= n; i = i + 1 {            if x := n % i; x == 0 {                isPrime = 0            }        }        if isPrime != 0 {            println(n)        }    }}

 

运行并输出结果:

 

$ go run main.go run _examples/prime2357111317192329

 

另一个 Demo 如下图所示:

凹语言特性,e2bea58c-1145-11ed-ba43-dac502259ad0.gif,第3张

现下,凹语言处于非常早期的实验阶段,该团队在凹语言特性和编译器实现方面都进行了预期设定。其中,凹语包含两套相互等价的语法,即凹语法与 WaGo 语法。这里“等价”的含义是:二者可生成相同的 AST 并无损的互相转换。使用凹语法编写的源文件后缀为 .wa,使用 WaGo 语法编写的源文件后缀为 .wa.go。WaGo 语法是 Go 语法的真子集,换句话说:一个合法的 WaGo 包必然是合法的 Go 包。对此,创建者之一柴树杉也在知乎上进一步表示,「等价不是最终目标,只是为了方便习惯 Go 的用户。」

在凹编译器方面,该团队发布了如下工作流程图,希望支持 C/C++、LLVM IR、WASM 等多种输出以满足不同的目标场景。

凹语言特性,e320eb0c-1145-11ed-ba43-dac502259ad0.png,第4张

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2710953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存