暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基础|编程语言简史 S2E08

轻技术 2021-09-18
710

今天如果提及一门“跨平台”的编程语言。想必大家都能举出来无数的例子。毕竟在以 C/C++ 为系统级平台的基础之上,随着各种软硬件接口的逐渐统一和丰富,现代编程语言几乎都是能够跨越多个平台来运行和实现各种功能的。

早在五六十年前也不乏这种现象,比如前面我们提到的 SNOBOL,也正是因为其抽象了一套指令系统作为中间层,方便移植到其他平台,因而促使其更好的发展。

但是,迄今为止,所跨平台之广,持续年限之长的编程语言,几乎没有一个能比得过今天我们要提及的这一门:运行在数十亿设备上的 Java 毕竟需要庞大和沉重的运行时,无法触及极底层;C/C++ 虽然能够深入到底层但是灵活性和动态性又远不足;Atwood 定律虽然预言了 JavaScript 渗透各个角落的事实,但其终究资历尚浅,只是搭乘了互联网的春风。

今天我们要聊的这门编程语言,从六十年代的大型机、小型机,到七八十年代的家用机、PC 和 Mac,到游戏主机,到如今还在热销的 Nintendo Switch,到电子词典和计算器,从服务器到浏览器,到桌面脚本,到 Excel 和 Word 中嵌入的自动化宏,以及人教版高中数学的课本上。

没错,就是 BASIC。

初学者的全方位符式指令代码

与如今致力于收割各种焦虑人群的培训机构不同,达特茅斯学院的两位教授 John G. Kemeny 和 Thomas E. Kurtz 更希望从根本上能够创造一种适用所有人群的编程语言,让他们来接触计算机、学习各种编程思想。而 BASIC 就是在这套思路下的产物。这名字也是来自一个缩写,全称是 Beginners' All-purpose Symbolic Instruction Code(初学者的全方位符式指令代码)。

当然这条达成的路线并没有现在看起来这么简单。早在 1956 年,Kemeny 教授就设计了 DARSIMCO(Dartmouth Simplified Code)进行类似的尝试,后面升级为了 DOPE,但效果都不太好。随后也尝试过使用 FORTRAN 和 ALGOL 来进行实验,但这些为专业人士设计的工具充满了让普通人难以理解和记忆的诡异符号。于是最终 Kemeny 和 Kurtz 最终决定重新设计一门新的编程语言来干这事儿。

终于在一群人的努力之下,1964 年 5 月,BASIC 的第一版实现了出来。实现团队的其中一个非常重要的人物 Mary Kenneth Keller 是其中唯一的一名女性,也是第一个获得计算机科学博士学位的女性。这在当时整个都是男性群体的学界,是一个突破性的进展。

爆发

BASIC 的特色决定了其非常适合入门级使用,同时也就成了早期的计算机必备的系统程序。因其作为一门高级编程语言很适合入门使用,并且又有足够简单和小巧的核心方便实现,所以在 70 年代微型计算机出现以后,随即出现了爆发式的传播和发展。

当然推动其发展所功不可没的角色就是微软公司。第一个微型计算机版本的 BASIC,也是微软的第一个产品,出现在 Altair 8800 上。随后微软把 Basic 移植到了 MOS 6502 平台。6502 在七八十年代是几乎所有低成本家用机的必选,一系列的神机包括 Apple IICommodore 64Atari 2600 以及——没错——任天堂的红白机都是采用了这套硬件。以至于当时大部分的家用机(比如 Commodore 64)在 ROM 中内置 BASIC 成了标配,雅达利任天堂也分别推出了其对应平台的卡带和外设。

各位在文曲星卡西欧计算器中使用到的 BASIC,也大概率是这一时代版本的变种。

PC 和 Visual Basic 的时代

作为微软的发家生意,对 Basic 的投入一直在持续。随后与 IBM 合作设计的 PC 平台上加入了功能更加丰富的 GW-Basic 和后来的 QuickBasic,绑定了自家的 DOS 平台。

1991 年随着微软的 Windows 系统逐渐发展,推出了更进一步革新的 Visual Basic。在成功给这个近三十岁的老语言续命的同时,也开创了另外一个传奇。现在距离 Visual Basic 出现也已经 30 年过去了,依然还没有掉出 TIOBE 的前十。同时这样一门编程语言和其变种也因为其易用性被应用在各个角落:Windows 的 ScriptHost 支持 VBScript;IE 浏览器的 script 标签支持 VBScript;IIS Web 服务器支持 VBScript 编写的动态页面(ASP);Microsoft Office 应用中可以通过 VBA 来扩展宏和表单能力。

演变历程

50 多年来的发展过程,让 BASIC 有了非常大的变化。如今大部分的变种都已经不需要再指定行号,但这一特性在早期确是必需的,不可省略。也正因此,通常会遇到行号空余不够导致整个程序需要大规模重写的情况。Dijkstra 老爷子当年所吐槽的情形之一便有此。

但随着算力的提升,行号这个必需的标记已经可以由特定行首的标签来代替,于是更进一步地在八十年代演化出了结构化编程的能力。这个时候的 BASIC 更像是现在的非可视化版本,可以用来完成大部分程序性任务。同时期也有很多基于 BASIC 编写的游戏存在,也正是因为这部分能力的提升能够支撑较大规模的程序。

Visual Basic 出现后,更进一步的加入了异常处理和面向对象的能力。Visual Basic 依托于 Windows 系统,既支持桌面级应用的编程,又能够与系统接口交互,极大增加了其适用范围。同时,Visual Basic 能够被编译到一种中间指令(P-Code)执行,这也就成就了其便于作为扩展语言适用到不同应用程序中的情况。再加上微软本身一直在坚持的对于 Windows 后向兼容,一度让最后一个非 .net 版本的 Visual Basic 6.0 在其发布的第 18 年荣获 D.I.C.E. 最具影响力技术奖。

去年微软开源了 GW-Basic,并特定说明这部分的代码实际是转译成的 Intel 8088 汇编。由此可见当时的微软实际已经在工程领域有着非常黑科技的实践了。现在转译技术反倒是因为工具链和运行时的落后而不得不出现的一个过渡工具,想想也觉得挺搞笑的。

(待续)

感谢各位支持!
本期点赞和“在看”人数合计过 40,
三日内更新 S2E09 👇


文章转载自轻技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论