前几日,TIOBE 官方最新发布了 8 月的编程语言榜单:
除了“常青树”C语言以外,其他语言的排名及变化同样值得关注:Java 依旧流行,因为它是一种面向对象的语言,常用在 Android 应用程序开发,所以目前仍被许多大公司用于大量的交易应用程序的构建。但由于出现了像 Kotlin 这样的编程语言(也适用于 Android 开发),Java 的流行度正在下降;Python 的涨势更猛,根据谷歌趋势和 PyPI 流行指数,Python 俨然成为世界上最受欢迎的编程语言之一,尽管这离不开当下数据挖掘和人工智能行业的蓬勃发展;Go 语言在 7 月排名上升至第 13 名后,本月又降至第 18 名;于去年同期相比,Swift 今年以来的市场份额一直呈下滑趋势;而 PHP 已连续 3 个月维持第 8 名的位置。
诚然,这个排行榜只能反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。但业内关于到底什么是最好的编程语言的讨论,一直没有停过。这大可不必!虽然现如今编程语言多到遍地开花,可每一种编程语言的兴起都离不开它所适用的技术领域,二者相辅相成。与其非要争个排名的高低,不如我们去多看看多了解,努力提升眼界和实力,或许某天你自己实现的编程语言也有机会上榜。当然,你也可以泼我冷水,认为“计算机语言已经很多了,我们会用就行,干嘛要自己去实现,吃力不讨好!”,或者觉得,“计算机语言,我学起来都挺费劲,更别提去实现它了,简直是痴人说梦!”这些顾虑看起来都蛮有说服力,但为什么我们最好还是要自己去实现一门编程语言呢?我想从自身的体会来谈一下:首先,实现一门自己的语言的过程,对能力的提升大到你难以想象!据我的了解,在实现一门计算机语言的时候,我们有机会接触到编译技术、运行时技术、汇编语言、硬件架构和各种算法,基本上是从顶层到底层把技术做穿。有了这些硬功夫,只要你想,拿下 80% 左右的高层次的软件开发工作根本不是问题。如果你有关注国内的技术发展,相信你肯定知道我们目前正奋力在补基础技术方面的课,大家都在奔着能拥有我们中国自己的优秀基础软件这个目标努力,比如鸿蒙已经开始了他们的尝试。
但想实现大规模的突破,就需要更多具备底层编程能力的人才,同时还要能够深刻理解程序在计算机硬件和操作系统之上运行的基础机制,以及计算机语言编译和运行所需要的技术。而学习如何实现一门计算机语言的过程,是能带来明显提升的最快方法。说了这么多,不是想让大家头脑一热就盲目地跑去“闭门造车”,而是要给大家推荐一个人——宫文学,他是北京原点代码 CEO ,也是国内最早做 BPM(流程管理平台)和 BI 平台(大数据平台)的创业者之一,还研发过电子表单和低代码开发平台,是个经验十分丰富的研发老兵。他尤其专注于编译技术领域,熟悉各种语言编译器的实现机制,在编译技术之路上具有丰富的实践经验。之前在极客时间的专栏《编译原理实战》和《编译原理之美》,口碑非常不错,已经超过 15,000+ 订阅了。这次他带来了全新的《手把手带你写一门编程语言》专栏,希望能带大家深入到底层技术,手撸一套属于你自己的编程语言,大幅度提升个人开发水平,增加职业选择和眼界。
具体怎么来实现呢?宫老师已经为大家设计好了学习路径,不仅把整个编程语言的实现过程分阶段化了,还形成逐步递进的形式,哪怕只是学一部分,也会有一部分的成果。这样一方面能避免各种繁琐的编程工作,以及对理解原理带来干扰;另一方面又能保留足够多的技术细节,增强了实用性,可以说是“步步为营”。
最值得注意的是,这门课采用的技术是宫老师基于手头正在做的一门实用级语言为素材的,绝不是一门玩具级的语言,而且还会作为开源项目一直进行版本迭代,课程结束后是还能拿这个开源项目作为自己工作的基础。
课程主要分为了三个模块,每个单独的模块又分为三个阶段,具体如下:- 起步篇:主要选取少量的语言特性,带大家迅速实现从前到后的技术贯穿,这样就能对计算机语言涉及的各项技术有一个全局性的了解。而这一部分又被分成了三个阶段:
第一个阶段:用AST解释器把TypeScript跑起来,并在这个过程中掌握业界最常用的词法分析技术、语法分析技术和语义分析技术。 第二个阶段:升级解释运行的机制,带你掌握字节码技术和栈机。- 进阶篇:增加更丰富的语言特性,比如支持更多的数据类型、支持面向对象和函数式编程特性,等等。在这一部分,大家可以拓宽自己的知识面,从而有能力解决更多的基础技术问题,尤其是内存管理这个关键技术。
- 优化篇:主要介绍一下优化技术。通过比较浅显和直观的方式,让大家了解Java、JavaScript等语言所采用的前沿优化技术,洞悉它们最深处的奥秘,从而有能力去承担那些攻坚性的任务。
除了规划好目标和路线,宫老师还会在整个学习路途中,不断带我们补充“武器”和“弹药”,贴心地备好了有上万行实验代码的代码库,从而更好地去实践整个代码的运行。大佬的带领能帮我们摆脱“摸着石头过河”的窘境,也期待你通过一门个人专属编程语言的实现,能体会到自己技术上的蜕变。