查看原文
其他

这个国产编程语言,太可爱了吧!

The following article is from CSDN Author 凹语言技术团队

大家好,我是鲏。今天给大家分享一个新出的、国产的、开源的编程语言,我觉得还蛮有趣的。看看它经过了一个季度的开发维护后,完成了哪些功能、取得了哪些进展吧!

(注:本文转载自 CSDN 官方)


1、什么是凹语言

凹语言(凹读音“wā”)是 国内 Gopher 针对 WASM 平台设计的通用编程语言。凹语言作为WASM原生 的编程语言,天然对浏览器环境亲和,同时支持 Linux、macOS 和 Windows 等主流操作系统,此外通过 LLVM 后端对本地应用和单片机等环境提供支持。

  • 官网:https://wa-lang.org/

  • 仓库:https://github.com/wa-lang/wa/

  • Play:https://wa-lang.org/playground/

下面是凹语言的Logo(太可爱了吧哈哈):

从形状上看,“凹”字形似 WASM 图标(方块上部缺个口);从读音上看,“凹”正好是 WASM 的前半部;从结构上看,实心的“凹”字约等于字母“C”逆时针旋转 90 度——C 可以理解为 C 语言,也可以理解为 Coder,那么“凹”也可以暗示躺平的的 C/躺平的 Coder……


2、发起人

该项目的发起人柴树杉、丁尔男、史斌均是国内资深 Gopher。其中柴树杉是《Go 语言高级编程》等多本 Go 畅销书作者,目前在蚂蚁从事 KusionStack 和 KCL 语言的设计和开发工作。丁尔男是《WebAssembly 标准入门》等多本 WASM 专著作者,长年从事 3D 开发热衷于性能优化,目前在航天远景科技股份有限公司分管 3D 相关产品开发工作。史斌是编译器领域专家,曾为 Go 编译器提交过 127 个优化补丁,在 Go 全球贡献者排名中长期处于前 50 名,同时拥有 Go 与 LLVM 官方 Git 仓库的提交权限,同时也是《Go 语言定制指南》图书的作者。

在开发实践中,因为不同的原因,先后萌生了发展一门新语言的想法,Go 语言克制的风格是我们对于编程语言审美的最大公约数,因此选择它作为初始的蓝本。不必讳言:本项目启动时大量借鉴了 Go 的设计思想和具体实现——这是在有限投入下不得不作出的折衷,我们希望随着项目的发展,积累更多原创的设计,为自主创新的大潮贡献一点力量。


3、凹语言的设计哲学和开发计划

凹语言的整体设计,是围绕着“对开发人员友好”来进行的。字符串/切片作为基本类型、无需(也不能)手动管理内存、视觉上更显著的变量类型定义等均是这一核心思想的具体体现。

2022 年 7 月,凹语言正式开源,并公布了半年度的线路图:

随着项目的公开,有了更多的同学加入了凹语言开发组,讨论组社区也逐渐形成并保持活跃。感谢开发组的同学协同努力,第一季度的目标全部达成!

4、取得了哪些进展

首先,经过多次讨论,开发组慎重决定凹语言采用 AGPLv3 开源协议,并制定了对应的了凹语言贡献协议。目前已经有外部同学通过新的流程贡献了代码。此外还取得了以下重大进展:

发布第三版网站

从 2018 年起,网站经过 3 次较大更新。最开始第一版的网站只有一个静态页面(2018),第二版是刚开源时基于 MDBoo k构建(2022年7月),最新版本于 2022 年 9 月开发到 10 月底正式上线。

该版本网站由子项目负责人扈梦明开发,他还是凹语言 VSCode 插件和 Playground 的负责人。

发布纯浏览器环境的的 Playground

Playground 是一套在线编译凹源代码并执行的环境。该环境的编译、执行没有调用后端服务,完全在页面中运行;是一个非常便捷的体验、测试凹语言的入口。

Playground 地址:https://wa-lang.org/playground/

创建 VSCode/Fleet/Vim 等高亮插件

VSCode 插件提供了语法高亮、代码片段补全、补全建议等功能,支持纯 Web 环境安装:

9 月 JetBrains Fleet 发布了预览版本,凹语言第一时间开发了高亮插件:

当然,传统的 Vim 插件也不能少:

更多和插件和功能完善希望社区同学参与共建。

WASM 后端原型如期发布

WASM 后端原型如期发布,已支持数值/字符串基本类型、结构体、方法、数组、切片等常用特性,项目组开始着手以此为基础开发贪吃蛇等带有交互功能的网页小游戏。

可以通过以下方式测试:

 `go install github.com/wa-lang/wa@latest` `wa init -name=_examples/hi` `wa run _examples/hi`

或者创建以 `hello.wa` 文件,包含下代码

fn main { println("你好,凹语言!") println(add(40, 2))}
fn add(a: i32, b: i32) => i32 { return a+b}

运行并输出结果:

$ go run main.go hello.wa 你好,凹语言!42


程序默认会基于WAT后端编译并执行,看到以上输出表示一切正常!

作为嵌入 Go 程序脚本

凹语言也可以作为 Go 语言包被导入,然后以脚本方式执行:

package main
import ( "fmt" "github.com/wa-lang/wa/api")
func main() { output, err := api.RunCode("hello.wa", "fn main() { println(40+2) }") fmt.Print(string(output), err)}

LLVM 后端提前启动

原定于 2023 年春节后启动的 LLVM 后端,提前启动。LLVM 后端的主战场在本地和嵌入式环境,下面是凹程序翻译到 LLVM-IR 的效果:

目前已经支持素数例子的执行:

更新路线图


5、展望

目前,凹语言是一个爱好者共建的业余项目,没有设置 KPI。一门新语言真正达到实用化,所需的工作量极其巨大,团队也热切的期望更多有兴趣的同学能参与共建。也希望越来越多的同学可以参与到国产开源项目中,一起把属于我们国人自己的项目做大做强!

往期推荐

我的学习小圈子

这几个程序员必备画图工具,很实用!

我滴项目又完成啦!!!

1024,说说我这几年总结的小技巧!

字节实习转正了,这是我的秘诀

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存