计算机编程语言作为计算机科学领域一门“古老”的学问一直以来发展缓慢,由于承担着人与机器的对话中介,深受终端的形态固化制约;同时这门学问的使用者——开发者是一个特殊的群体,其行为、习惯种种也影响着编程语言的技术进程。去年10月华为开发者大会上,华为方面表示将发布自研编程语言仓颉,为HarmonyOS生态基础设施补上最后一环。消息一出旋即引起业界热议,编程语言在国内的设计虽有先例但实属小众,由大公司主导的深程度的开发或尚属首例。●“仓颉”热议之一,中文编程与否?由于“仓颉”一词源于华夏文化“仓颉造字”,故而外界对之第一反应是仓颉为中文编程与否。计算机高级语言中任何标识都可使用中文字、词、句的语言文法,又有与中文相匹配的语法规则可称为汉语编程语言,使用这种语言编写程序的过程就是中文编程。中文编程在国内的呼声由来已久,对其尝试与探索也行之有年。比如上世纪80年代的中文cobol、年的易语言以及之后的类文言文编程语言等等。不得不说,中文编程对国内编程语言技术的发展,特别是代码编译技术的发展有不小的贡献。仓颉语言是否有可能为中文编程,华为方面目前暂无回应。今年3月,华为编程语言实验室面向部分开发者发布了华为新语言的试用报名问卷,据悉从中遴选部分开发者参与仓颉语言内测。有测试人员初步透露,仓颉语言目前并非中文编程,但也有观点认为仓颉未来可能会设计中文编程版本。事实上仓颉的起步是不是中文编程并不重要,这也是大多数开发者所认可的观点,重要的是一个编程语言的设计是否具备编程思想的逻辑创新,而不是重复造轮子。●自研编程语言讲求什么?现代意义上的编程语言,区别于机器语言与汇编语言,作为计算机语言中的高级语言,其发展至今已形成了庞大的技术格局。现代编程语言讲求语法精炼、执行高效、语言特性标准友好、环境IDE配套齐全、有大的底层软件或是系统作载体,此外框架延展丰富、使用文档规范、有方便的各种库等等。历史上各类编程语言的起源不一而足,但主要是为开发某一软件/系统而生,或是为解决某个问题而生。譬如C语言起初为开发Unix系统而被创造,后因使用日渐广泛而逐渐标准化,发展成为通用型过程式高级编程语言,其设计也影响了后来的众多编程语言;当下风靡一时的Python当时为解决新的脚本解释编程问题而生,如今支持多种编程范型,包括函数式、指令式、反射式、结构化和面向对象,也成为了一款通用型高级语言。自研编程语言用今天的话来说,其有着相当明确的目的和依附性,即为了某一大平台、大生态而生,否则其高成本(人力、时间、资金)会淹没自研的价值。这方面显著的先例比如苹果的Swift,为解决之前Objective-C长期致力于桌面开发的固化缺陷问题而取代之,现为iOS/MacOS生态服务;再比如微软的C#,由C和C++派生出来的面向对象编程语言,以.NET框架类库作为基础,为Win平台而生。因HarmonyOS而生的仓颉将引入什么样的编程思想,追求什么样的编程风格,未来会不会有中文关键字,目前都尚不可知。有开发者推测,仓颉可能会定位于类似Swift、Kotlin和Dart的应用层开发,或许走的是带GC的路线,而非Rust/C++的系统级编程。可见国内的开发者们对这样一种自研编程语言的诞生是饱含了期待的。●当今编程语言现状带来的启示业界曾有人预言:编程语言的未来有两个选择,其一是成为一门伟大的编程语言;其二则作为任一操作系统、软件系列精耕细作的工具而发扬光大。二者都是非常好的结果。编程语言的现状经过历史演进已不再像上世纪80年代那么单一纯粹,这方面的影响包括了商业需求、市场变数、科技巨头的垄断以及开发者习惯等等。总的而言,C语言依然是这个文明的底层基础。不久前有国外开发者撰写的一篇文章《C不再是一种编程语言》在技术社区引起热议,文中表达C被上升到了一个具备相当声望和权威的角色,这是这种伟大编程语言所带来的历史包袱。当然并非所有计算机语言都能成为所谓的“伟大的编程语言”,但是它们在技术的历史进程中都能够做好自己的事,比如py的胶水特性、js的前端流行性依赖等等。自研编程语言则更多为解决特定问题,致力于平台开发者生态,提高应用程序质量而设计。因而对自研编程语言来说,使用的开发者数量和在开发者群体中的流行程度是至关重要的,让问题曝光在足够多的眼睛之下,这对于PL本身的迭代有着巨大影响。另一个启示在于软件工程方法论带来的开发者环境的剧变。当前软件行业无论是人(开发者)还是物(工具)的因素,都是“唯快不破”的,这是敏捷时代对抗需求膨胀形成的结果,以至DevOps思想大行其道。当Docker、Kubernetes这类流水线式的工具大量运用于软件工程领域之后,敏捷就成了一把双刃剑,它给出了迭代效率,也能惰化开发者思想。因而一种新的编程语言能为现状做些什么,也值得深思。文/陈徐毅高级工程师,科技专栏作者,中国计算机学会会员。本文刊发于《中关村》第期
转载请注明:http://www.aierlanlan.com/rzfs/6183.html