Go语言的掌门人辞职后,一门国产语言的诞生心生不甘。有意思的是,国内的一些Gophers(自称是Go语言爱好者)也对Go语言有了新的想法。例如,中国第一批围棋爱好者柴树山、长期位列全球围棋贡献者榜TOP50的石斌等Gophers,决定以围棋为蓝本,推出一种新的编程语言:ConcaveLanguage?(凹语言发音为“Wa”)。目前,ConcaveLanguage?的代码已经在Github上开源,并提供了简单的可执行示例。据其仓库介绍,AULanguage?的设计目标如下:1.C++语言覆盖Go和Rust语法2.AULanguage?源代码文件后缀为.wa3,兼容AULanguage?编译器使用WaGo语法,Concave文法在AST层面与WaGo文法一致(两者可以生成相同的AST并相互转换无损)4.ConcaveLanguage?支持中/英双语关键词,即任意关键词同时具有中文和英文版本。作者展示其在语法层面等同于GoLanguage?,图片来自@GitHub在柴树山、石斌等人看来,Go语言的“克制”风格是他们审美的最大共同点编程语言。因此,当ConcaveLanguage?项目开始时,它大量借鉴了Go的设计思想和实现。当然,他们也表示,选择Go语言作为最初的蓝图,是在有限的投资下不得不做出的妥协。他们希望随着项目的发展,积累更多的原创设计,为自主创新的浪潮贡献一点力量。柴树山、史斌等人虽然是资深Gophers,但他们偏爱Go语言不难理解,但我们不禁要问:Go语言到底有多神奇,让他们如此迷恋Go语言?为什么选择Go语言很多使用过Go语言的开发者对Go进行评价,Go语言在设计上有以下四个特点。1.易用性不同于主流编程语言(如C++、Java等)通过相互引用不断增加新特性,Go的设计者在语言设计之初就拒绝走语言特性集成的道路,并选择“做减法”。他们把复杂性留给了语言本身的设计和实现,留给了Go核心开发团队,把简单易用、清晰的留给了使用Go语言的开发者。因此,Go语言呈现:简洁、规则的语法(无需解析符号表),仅25个关键字;没有头文件;明确的依赖关系(包);没有循环依赖(包);常量只是数字;字母大小写决定可见性;任何类型都可以有方法(没有类);没有子类型继承(没有子类);没有算术转换;没有构造函数或析构函数;赋值不是表达式;在分配和函数调用之间定义的评估顺序(无“序列点”概念);没有指针运算;内存总是初始化为零值;无类型注解语法(如C++中的const、static等)...2.偏好组合C++、Java等主流面向对象语言,通过庞大的自上而下的类型系统、继承、显式接口实现等耦合程序各个部分的机制,但在Go语言中我们找不到经典的面向对象语法元素、类型系统和继承机制。那么Go语言是如何将程序的各个部分耦合在一起的呢?是一个组合。在语言设计层面,Go使用正交语法元素,包括Go语言的无类型体系,类型相互独立,没有子类型的概念;每个类型都可以有自己的方法集,类型定义和方法实现是正交独立的。通过各种类型之间的类型嵌入,将实现的功能嵌入到新类型中,快速满足新类型的功能需求。在新类型的实例上调用方法时,方法匹配取决于方法名称,而不是类型。另外,通过在接口定义中嵌入接口类型,形成一个大接口,实现接口行为的聚合。这种方法在标准库中特别常用,也成为了Go语言的常用用法。这是Go语言的一个创新设计:接口只是方法的集合,与实现者的关系是隐式的,这样可以将程序各部分之间的耦合度降到最低。3.并发和轻量Go语言的三位设计者RobPike、RobertGriesemer和KenThompson曾认为C++标准委员会的思维是短视的,因为硬件很可能在未来十年发生重大变化,而且语言会和那个时候不一样。将现有的硬件紧耦合是非常不明智的,在编写大型并发程序时也不能给开发者带来太大的帮助。因此,他们将多核和原生内置并发支持作为新语言的设计原则之一。Go原生支持并发的设计理念体现在以下两点。(1)Go语言采用轻量级的协程并发模型,使得Go应用在面对多核硬件时更具可扩展性。(2)Go语言为开发者提供了支持并发的语法元素和机制。4.面向工程的Go语言设计者在Go语言的初始设计阶段,将解决工程问题作为Go的设计原则之一,进而考虑Go语法、工具链和标准库的设计。面向学校和面向研究的编程语言在设计思想上存在重大差异。这使得Go语言的规范足够简单灵活,有其他语言基础的程序员也可以快速上手。更重要的是,Go自带了完整的工具链,大大提高了团队协作的一致性。比如gofmt自动排版Go代码,很大程度上消除了不同人写的代码排版风格不一致的问题。配置编辑器编辑存档时自动运行gofmt,这样写代码的时候可以随意放置代码,存档时自动变成正确排版的代码。此外,还有一些非常有用的工具,例如Gofix和Govet。总之,Go在语言层面的简单性,让Go获得了不逊色于C++/Java等的表现力,同时也获得了更好的可读性、更高的开发效率等软件工程领域更重要的元素。ConcaveLanguage?的未来虽然在今天,Go凭借其优越的性能已经成为主流编程语言之一(超过75%的CNCF项目,包括Kubernetes和Istio都是用Go编写的,Go也是一个主要的cloudapplication编程语言之一),Go语言在国内也颇为流行,但我们还是不禁担心,脱胎于Go的凹语言?,未来是否会大放异彩?Go语言搜索热度,图片来源@GoogleTrend预测未来一直很困难,但幸运的是,在ConcaveLanguage?面前有一个先行者——Go+语言。我们不妨根据Go+未来的发展来推测一下ConcaveLanguage?的发展。Go+是七牛云CEO徐世伟发明的一种编程语言。于2020年7月正式发布,1.0版本将于2021年10月发布,最新版本为今年6月13日发布的1.1版本。也就是说,从正式发布到现在,经过将近两年的时间,Go+还处于起步阶段,距离大规模应用还有一定距离,因此可以预见ConcaveLanguage?不会进入未来很长一段时间都在互联网上。在广大开发者眼中。另外,根据徐世伟在ECUGCon2022大会上所表达的观点,虽然大家都看重编程语言的性能,但单从性能上来说,徐世伟认为Python只能算是二流脚本语言,而Python其实并不快。在徐世伟看来,对于一门新语言来说,最重要的是它选择的目标群体。Go+选择的目标群体是全民。许世伟称其为“连孩子都能掌握的语言”。因此,Go+从工程与STEM教育的融合入手,奠定用户基础。正是Go+的这些特性,让一些开发者看好Go+的未来。对Go+的积极期待,将成为Go+进一步发展的助力。这个原则同样适用于AuLanguage?:AuLanguage?开发的重点可能不在性能上,而是在选择哪些人作为目标受众以及如何获得种子用户。如果未来AuLanguage?的项目组公布这些消息,那么AuLanguage?的未来还是可以期待的。
