从丹麦编译器到博兰产品

Turbo Pascal的首版于1983年11月推出,由博兰国际公司销售。它把Pascal编译器、屏幕编辑器和程序运行功能放进同一个交互式系统,面向使用CP/M或DOS的微型计算机用户。程序员可以修改源代码、编译、查看错误,再返回编辑,而不必为每一步重新组织一套分散的工具。

核心开发者是丹麦程序员安德斯·海尔斯伯格。他参与创办PolyData,曾为英国Nascom微型计算机编写装入只读存储器的Pascal子集,随后发展出CP/M上的实现。1995年《EXE》的访谈与附带年表记载,他向尼尔斯·亚历克斯·延森、奥勒·亨里克森、莫根斯·格拉德和菲利普·卡恩等博兰创办人介绍了带集成编辑器的编译器方案,形成了Turbo Pascal的产品方向。

参考:[1] [3]

49.95美元的整套工具

1983年11月《BYTE》第129页刊登的博兰广告,明确把IBM PC、MS-DOS、CP/M-86与CP/M-80用户列为销售对象,报价为49.95美元,另收每份2美元运费。广告强调全屏编辑、快速编译,以及光标直接定位错误的位置。它销售的是可以在个人微机上反复试写、修改程序的整套工具。

资源占用也是早期设计的重要条件。1984年2月第二版手册说明,运行盘上必需的核心文件是TURBO.COM;基本系统约占28K磁盘空间,16位系统为33K。错误说明文件可以省略,以节约约1.5K内存,但用户随后只能看到错误编号并查手册。这样的选择反映了软件必须在有限内存与磁盘容量中安排便利功能。

参考:[1] [2]

编辑、编译与运行相连

用户输入TURBO后进入主菜单,先选择工作文件,再用E进入编辑器、C启动编译、R运行程序、S保存。没有写扩展名时,系统默认源文件使用.PAS。保存新版本时,旧文件改名为.BAK,保留一次备份。编译结果默认放在内存中,也可以按选项生成供操作系统执行的程序文件。

这种衔接在修改错误时尤其具体。一个程序若包含其他源文件,用户可以保留主文件设置,同时编辑其中某个文件。编译发现错误后,含错文件会成为当前工作文件;改好后重新编译,系统再回到主文件。编译器与编辑器共享工作流程,缩短了从错误信息回到源代码的距离。

参考:[1]

用求和程序理解早期Pascal

例如,要计算1到10的和,可以先用var i,total: Integer声明两个整型变量,在begin与end之间写total := 0,再写for i := 1 to 10 do total := total + i,最后用Writeln(total)输出55。变量声明、初始化、循环和输出各有明确位置;循环由for语句表达,不需要用行号组织反复跳转。

这里的:=表示赋值,Integer规定数值类型,Writeln在输出后换行。早期手册给出的Integer范围是−32768到32767,占两个字节,并说明整数算术溢出不会自动检测。因此,这个小例子可以工作,但把循环上限不断放大时,程序员还须考虑中间结果是否超出类型范围。结构清楚并不等于所有数值错误都会被系统阻止。

参考:[1]

方便实用,也有平台边界

Turbo Pascal依据Pascal的结构化编程体系,同时提供适合微机应用的扩展。以字符串为例,string[80]声明最大长度为80的字符串,实际长度可随赋值改变;系统另用一个字节记录当前长度。早期字符串最大长度须明确写出,允许的上限为255,不能把后来的默认字符串规则直接套进来。

它还提供随机访问文件、包含文件和直接访问内存、数据端口的能力。通过包含指令,程序员可以把常用过程保存在独立源文件中,再在编译时装入,缓解编辑器只在内存中处理源代码的限制。不过,直接操作硬件的程序会依赖具体机器:手册把三种系统共有的语言部分与各平台附录分开,提醒用户区分可移植代码和机器相关代码。

参考:[1]

后续发展与早期版本的区别

博兰后来继续发展Pascal工具,但1983年的产品不应被赋予后续版本全部功能。1995年接受访谈时,海尔斯伯格把Delphi描述为结合可视化开发、客户机服务器数据库支持和本机代码编译的新产品,并明确说它不是简单改名的“Borland Pascal 8.0”;当时Turbo Pascal 7仍用于DOS及扩展DOS开发。

早期Turbo Pascal最鲜明的贡献,是把有类型的结构化语言与一个可以迅速编辑、编译、运行的微机工作环境结合起来。它的低价广告、紧凑文件组织与错误定位功能,分别回应了购买成本、机器资源和日常编程操作中的实际问题。

参考:[1] [2] [3]