通过实际创建一门新的编程语言,可以学习到该编程语言的设计思想和实现方法。随着开源的流行,创造新的编程语言的门槛降低了很多。创建一种编程语言不仅可以增加您作为技术专家的价值,还可以让您从中获得很多乐趣。大家都知道我是编程语言Ruby的作者,但其实我是一个编程语言狂热分子。没有人比编程语言更着迷了。Ruby是我对编程语言兴趣的结晶,将其称为我兴趣的副产品可能更恰当。副产品能火到这种地步,看似了不起,但与其说是自己的实力,倒不如说是运气更重要。Ruby已经存在了20多年,如果没有这些年来发生的所有事件和遭遇,Ruby是不可能出现的。进入创建编程语言的世界您有创建编程语言的经验吗?对于有过编程经验的人来说,编程语言是很亲切的,但他们往往认为编程语言是现成的东西,也许从来没有人想过自己创造一门新的编程语言。这也是情理之中的事情。与人们所说的语言(自然语言)不同,世界上所有的编程语言都是某个人在某个地方创造的。它们不是自然产生的,而是出于明确的意图和目的而设计和实施的。所以,如果过去没有创造编程语言的人(编程语言的作者),那么我们今天可能还在用汇编语言编程。当人们刚开始编程时,就出现了编程语言。可以说编程的历史就是编程语言的历史。有的读者可能会想:“现在发明一种编程语言有什么意义呢?”稍后我会回答这个问题,现在让我们先看看编程语言的历史。个人创造的编程语言的历史早期的编程语言是由在工作中实际和编程语言打交道的人创造的,这些人大多在企业研究所工作(比如FORTRAN、PL/1的发明)、大学(如LISP)和标准委员会(如ALGOL、COBOL)等。也就是说,设计和开发编程语言是专业人士的工作,但随着1970年代计算机的普及,这一传统开始改变.一些计算机爱好者在拥有了自己的计算机后,出于兴趣开始编程,甚至开始开发新的编程语言。其中最具代表性的是BASIC语言。BASIC语言最初是美国达特茅斯学院用于教学的编程语言。它的语法非常简单,用很少的代码就实现了最基本的功能,因此在20世纪70年代深受编程爱好者的喜爱,并被广泛使用。这些编程爱好者也开始开发自己版本的BASIC语言。当时,个人计算机[1]最多只有几千兆字节的内存,而他们开发的语言BASIC是一个小型版本,可以在内存如此小的机器上运行。这些小型BASIC程序的大小不到1KB,但它们占用大约4KB的内存,这与当今语言处理器的大内存需求相比是惊人的。在微机杂志时代,以个人开发的BASIC为代表的小型语言(Tinylanguage)处理器很快以各种形式面世。当时,一些软件以dumplist的形式刊登在计算机杂志上,一些程序数据被转换成音频记录在杂志所附的sonosheet中。现在的人可能不知道电影唱片。胶片唱片是一种用塑料制成的薄唱片,尽管唱片这个词几乎不再使用了。据说当时的电脑爱好者使用唱机连接电脑读取数据,而不是使用录音机这种最常见的外接存储设备。70年代和80年代是计算机杂志(当时称为微型计算机杂志)的鼎盛时期,以下4种杂志在日本竞争激烈。RAM(广济堂出版)、我的电脑(电报新闻)、I/O(学社)、ASCII(ASCII公司)4个杂志中,只有I/O还在刊,但大不如前。作为了解当时情况的人,我的内心充满了无限的感慨。之后,MyComputer杂志催生了MyComputerBASICMagazine,发生了很多事情。再说下去,恐怕会成为旧人的回忆,就此打住吧。如果问起30多岁、40多岁的程序员,相信很多人都会兴致勃勃地谈起那个时代的事情。当时的微机杂志包括了一部包含BASIC的影片记录,此外还介绍了其他几种小型语言,如GAME、TL/1等,这些语言都体现了那个时代的特点。个人创建编程语言的现状为什么个人创建编程语言从20世纪70年代末到80年代初开始兴起?我觉得最大的原因是当时很难搞到开发环境。20世纪70年代后期广泛使用的微型计算机是像TK-80这样的单板机,主板是裸露的,而且很多都是半成品,需要自己焊接。这样的机器不可能有自己的开发环境之类的,软件只有自己进入机器语言后才能运行。TK-80PC-8001和MZ-80等“现成计算机”出现于1970年代后期。但是,这种计算机最多只有BASIC开发环境,所以人们很难自由选择开发语言。市面上虽然有商用语言处理器,但一个C编译器的价格是19万8000日元,不是一般人能轻易买得起的。于是,人们就有了创建自己的编程语言的热情。但现在获得语言开发环境不再是一件麻烦事。各种编程语言和开发环境都作为开源软件发布,即使不开源,也可以通过互联网轻松获得免费版本。这样一来,现在创建自己的编程语言不是没有意义了吗?在我看来,这个问题的答案是“不”。即使是现在,自己创建一种新的编程语言也是有意义的,而且意义重大。而且,很多广泛使用的编程语言,都是在开发环境容易获得的情况下,由个人设计开发的。如果个人开发编程语言真的没有意义的话,像Ruby、Perl、Python、Clojure这样的语言也就不会存在了。即便如此,我认为像Java、JavaScript、Erlang和Haskell这样的语言也可能会以其他形式出现,因为它们是作为业务和研究的一部分而开发的。为什么要创建一种新的编程语言那么今天个人设计和开发编程语言的动机是什么?回顾自己的经历并参考其他语言作者的意见,我认为有以下几个原因。提高编程能力提高设计能力建立个人品牌获得自由首先,编程语言的实现可以说是计算机科学的综合艺术。作为语言处理器的基础,词法分析和文法分析也可以应用于网络通信中数据协议的实现。实现语言特性的库和实现它们的数据结构正是计算机科学所做的。尤其是编程语言的应用范围很广,很难提前预知它们会用来做什么。因此,库和数据结构的实现更难,但也更有趣。此外,编程语言也是人与计算机的接口。设计这样的界面需要深入研究人们如何思考问题以及他们在潜意识中有什么期望。重复这样的检查有利于应用程序编程接口(API)设计、用户界面(UI)设计,甚至超越编程语言的用户体验(UX)设计。有些人可能会对提高个人品牌感到惊讶。其实在IT行业,对编程语言感兴趣的人不在少数。这是毋庸置疑的,因为编程与编程语言有着千丝万缕的关系。以编程语言为主题的活动和会议往往会吸引很多人参与,因此我们也能感受到编程语言的魅力。正因为如此,许多人在网上发现一门新语言后便开始尝试。以Ruby为例,它在1995年在线发布后,在短短2周左右的时间里就吸引了200多人加入邮件列表,这真是太神奇了。然而,虽然很多人愿意尝试使用一种新的编程语言,但几乎没有人会去设计和实现一种编程语言,而且是超越杂志中提到的“小儿科语言”的实用编程语言。但我保证,你会因为设计一种实用的编程语言而受到尊重。在这个开源时代,技术人要想生存,在技术社区的存在是非常重要的。虽然技术人员只要将软件开源就可以站稳脚跟,但编程语言的“特殊感”会进一步提升其品牌效应。FunFirstPlus,编程语言的设计和实现比什么都有趣。确实如此。与计算机科学相关的具有挑战性的工程也是如此。非常有趣的是,设计一种编程语言还可以帮助使用该语言的程序员思考,甚至??影响他们的思维。总的来说,编程语言有一种从别处获得的不可侵犯感。如果您创建自己的编程语言,则完全没有这样的问题。可以根据自己的喜好进行设计,如果不满意或者有更好的想法,也可以自由修改。从某种意义上说,这就是终极的自由。编程在某种意义上是对自由的追求。通过自己编程,我们获得了使用其他人的软件时无法享受到的自由。至少对我来说,这是编程的重要动力。对我来说,创建一种编程语言是获得更高自由度的一种手段,也是乐趣和快乐的源泉。为什么没有很多人创建新的编程语言虽然自己创建编程语言有很多好处,但并不是每个人都这样做。如上所述,虽然有一些人对编程语言感兴趣,但几乎没有人着手创建编程语言。说是“有些人有兴趣”,但从占总人口的比例来看,其实少得可以算一个误差范围,更何况是有动力去创造新的编程语言的人。就算没有人,也不足为奇。我自己在关注了几年编程语言之后就着迷了,但是直到我进入大学主修计算机科学之后,我才发现并不是每个人都对编程语言感兴趣。这是因为我在偏僻的地方长大,周围没有热爱编程的人可以与我相提并论。我不知道这对我来说是幸运还是不幸。“我和别人不一样吗?”当我意识到这一点时,我震惊了。因为当时在微机杂志上发表了很多关于TL/1等编程语言的文章。我本以为对编程感兴趣的人(比如我)可能也会对编程语言着迷,但事实并非如此。不用说,对编程语言不感兴趣的人,即使有兴趣,也很难走到自己设计和实现编程语言这一步。这个问题的原因我想了很久。作为一名编程语言设计者,我在参加编程语言相关的活动时,也以过去人的身份鼓励别人尝试一下,但结果总是不尽如人意。当然,万事开头难,开始新的事情需要很大的勇气。但即便如此,反响也很差。无需苦思冥想。问了很多人,才知道为什么大家都不去尝试。那是因为即使你有兴趣创造一门新的编程语言,在开始之前你很可能会有某种心理障碍,即你觉得“编程语言是现成的,你不需要设计并自己开发。”很少有人没有这种心理障碍,却觉得语言的实现似乎很困难。换句话说,他们觉得编程语言很有趣,他们想自己做,但不知道如何实现。仔细想想,虽然出乎意料地出版了很多关于程序设计语言实现的书籍,但作为大学教科书,大部分都很难看懂。此外,与编译原理相关的“语法类型”、“遵循集合”等晦涩难懂的术语也频频出现。但是仔细想想,我们的目的是出于兴趣创造自己的编程语言,而不是掌握编程语言实现所需的所有知识。如果你认为没有完全掌握正确的知识就不能开始创建编程语言,那你就大错特错了,你的热情会逐渐被磨灭。要想成就大业,首先要有热情,没有热情是不行的。一旦有了创建编程语言的热情,就应该尽早开始,然后根据需要慢慢掌握所需要的知识。
