Pascal是一个有影响的面向对象和面向过程编程语言,由尼克劳斯·维尔特在1968年9月设计,在1970年发行,作为一个小型的和高效的语言,意图鼓励使用结构化编程和数据结构进行良好的编程实践。
称作Object Pascal的一个派生是为面向对象编程设计的。
Pascal基于ALGOL编程语言,为纪念法国数学家和哲学家布莱兹·帕斯卡而命名。维尔特后来开发了类似Pascal的Modula-2和Oberon。在开发Pascal之前,维尔特开发了语言Euler,然后开发了Algol-W。
最初,Pascal在很大程度上但不是完全地为了教授学生结构化编程。很多代学生已使用Pascal作为本科课程的入门语言。Pascal的变种也逐渐地用于从研究项目到PC游戏和嵌入式系统的所有领域。更新的Pascal编译器存在于广泛使用它的领域。
GCC,Gnu C编译器,最初是用Pascal的一种方言Pastel编写的(见GCC#概观)。Pascal是Apple Lisa和早期Mac开发使用的高级语言;最初Macintosh操作系统的部分是从Pascal源代码手工翻译成Motorola 68000汇编语言的。流行的排版系统TeX是由高德纳使用基于DEC PDP-10 Pascal的最初文学编程系统WEB编写的,而像Total Commander的应用是使用Delphi(即Object Pascal)编写的。
Object Pascal仍然广泛用于开发像Skype这样的Windows应用。
维尔特的意图是,基于结构化编程,创建一个高效(无论是编译速度还是生成代码)的运行速度。Pascal植根于Algol 60语言,但是也引进了一些概念和机制,使程序员(在Algol的标量和数组之上)能定义他们自己的复杂(结构化)数据类型,也使创建诸如、和这样的动态和递归数据结构更容易。这些重要的特性包括、、、使用关联去分配变量和。为了使这些有可能和有意义,Pascal在所有对象上有一个强类型,意味着如果不使用转换,一种数据类型不能转换或解释成另外一种。类似的机制是今天许多编程语言的标准。影响Pascal开发的其它语言是COBOL、Simula 67和维尔特自己的Algol-W。
Pascal,像今天的许多编程语言一样(但是不像C家族的绝大多数语言),允许任意层次的嵌套过程定义,也允许过程和函数内部的绝大多数种类的定义和声明。这使得一个非常简单和一致的语法,能让一个完整的program与一个单独的procedure或function语法上近似相同(当然除了关键字本身外)。
第一个Pascal编译器是在Zurich为CDC 6000系列大型计算机家族设计的。维尔特报道,在1969年第一次使用Fortran实现的尝试没有成功,由于Fortran不足以表达复杂的数据结构。第二次尝试以Pascal语言本身来制定,并在1970年代中期实施。由于许多Pascal编译器已类似地自托管,即编译器本身是以Pascal编写的,因此在新特性加入语言或编译器移植到一个新环境时编译器通常能重编译其本身。用C编写的GNU Pascal编译器是一个显著的例外。
1972年,Welsh和Quinn在贝尔法斯特女王大学,第一次将CDC Pascal编译器成功地移植到另外一个主机。目标主机是ICL1900系列。这个编译器反过来说是ICS Multum微计算机Pascal编译器的父母。以一个使用Pascal作为系统编程语言的视角,Glasgow University计算机科学系的Findlay,Cupples,Cavouras和Davis开发了Multum接口。完成于1973年夏季的Multum Pascal被认为是第一个16位实现。
一个全新的编译器由QUB的Welsh et al.在1977年完成。它提供了一个由Glasgow University的Findlay和Watt实现的源语言诊断特性(结合分析,跟踪和类型识别格式化事后转储)。该实现在1980年由南安普敦大学和Glasgow University的一个小组移植到ICL 2900系列。标准Pascal模式实现也基于该编译器,曼彻斯特大学的Welsh和Hay在1984年已将其改编,以严格检查与BSI 6192/ISO 7185标准的一致性,以及为可移植抽象机生成代码。
在北美洲为PDP-11编写的第一个Pascal编译器在Donald B. Gillies的伊利诺伊大学厄巴纳-香槟分校构造,并生成了本地机器代码。Pascal在整个1970年代和1980年代大受欢迎。
为了迅速地传播该语言,一个编译器“移植工具包”在Zurich产生,包括一个为“虚拟”堆栈机(即引导本身合理有效解释的代码)生成代码的编译器,一个解释这些代码的解释器——系统。虽然SC(堆栈计算机)代码的主要意图是在至少一个系统上编译成真实的机器代码,著名的UCSD实现使用它创建了解释性UCSD p-System。P-系统编译器被称作P1-P4,P1是来自于Zurich的第一个版本,P4是最后一个。
P4编译器/解释器仍然可以在兼容最初Pascal的系统上运行和编译。然而,它本身只是Pascal语言的一个子集。接受全部Pascal语言和包含ISO 7185兼容性的一个P4版本创建了,称作P5编译器,它在源形式上可用。
一个为IBM System/370大型计算机产生本地二机制代码的P4编译器版本由澳大利亚原子能委员会发布;缩写该委员会的名称后,它被称作“AAEC Pascal编译器”。从1975年6月起,一个包含编译器源代码和二机制代码,以及PDP-10主机运行时库文件的P4版本可以从这里下载。
在1980年代早期,也是为IBM System 370开发的Watcom Pascal开发了。
IP Pascal是一个使用Micropolis DOS的Pascal编程语言的实现,但是被迅速地移植到运行于Z80上的CP/M。在1994年它被移植动80386类型机器上,今天作为Windows/XP和Linux实现存在。在2008年,该系统达到一个新层次,该结果语言称作“Pascaline”(Pascal的计算器之后)。它包括对象,名字空间控制,动态数组和许多其它扩展,以及与C有相同功能和类型保护的通用特性。它仅是也兼容最初Pascal实现(作为ISO 7185的标准)的这样一个实现。
在1980年代早期,UCSD Pascal移植到Apple II和Apple III计算机,以提供一个随着机器而来的BASIC解释器的结构化替代品。
Apple Computer在1982年为Lisa Workshop创建了自己的Lisa Pascal,在1985年将该编译器移植到Apple Macintosh和MPW。在1985年,经咨询维尔特,Larry Tesler定义了Object Pascal,这些扩展合并进Lisa Pascal和Mac Pascal编译器。
在1980年代,Anders Hejlsberg为Nascom-2编写了Blue Label Pascal编译器。为IBM PC编写的该编译器的重实现在Borland收购之前以Compas Pascal和PolyPascal的名称销售。重命名为后,它变得广受欢迎,一方面由于一个积极的定价策略,一方面由于是第一个全屏集成开发环境之一,以及快速的周转时间(只需要数秒编译,链接和运行)。另外,它用汇编语言编写,并整体高度优化,使它比许多竞争对手更小和更快。1986年Anders将Turbo Pascal移植到Macintosh,并将Apple的Object Pascal扩展合并进Turbo Pascal。这些扩展然后加回到Turbo Pascal v5.5的PC版本中。与此同时Microsoft也实现了Object Pascal编译器。 Turbo Pascal 5.5给在1980年代后期开始主要关注于IBM PC的Pascal社区带来巨大影响力。许多研究BASIC结构化替代品的PC爱好者使用该产品。它也开始被专业开发人员接受。几乎同时,为了让Pascal程序员直接使用Microsoft Windows的基于C的API,许多概念从C语言引入。这些扩展包括空终止字符串,指针算术运算,函数指针,address-of运算符和非安全类型转换。
然而,Borland后来决定需要更多精细的面向对象特性,并在Delphi里使用Apple提议的草图标准作为基础重新开始。(该Apple草图仍然不是一个正式的标准。)Delphi编程语言的第一版相应地命名为Object Pascal。与老的OOP扩展相比较,主要的增加是基于参考对象模型,虚拟构建器和析构器,以及属性。几个其它编译器也实现了该方言。
Turbo Pascal,和其它有单元或模块概念的派生物是模块化语言。然而,它不提供一个嵌套模块概念或合格的导入和导出指定符号。
Super Pascal是一个增加了非数字标签,作为类型名称的返回语句和表达式的变异。
Zurich、Karlsruhe和Wuppertal大学已开发了一个(Pascal XSC),为有控制精度的数字计算编程提供了一个自由的解决方案。
最初形式的Pascal是一个纯粹的过程化语言,包括有诸如if,then,else,while,for等等保留字的类Algol控制结构的传统数组。然而,Pascal也有许多最初Algol60不包括的数据结构工具和其它抽象概念,像类型定义、记录、指针、枚举和集合。这些结构部分从Simula67、Algol68、尼克劳斯·维尔特自己的Algol-W和C. A. R. Hoare的建议继承或获得灵感。
Pascal程序开始于外部文件描述符作为参数的program关键字;然后跟着begin和end关键字封装的主要块。分号分割语句,句点终结整个程序(或)。Pascal源代码不区分大小写。
这里是一个非常简单的“Hello world”程序示例的源代码:(注:在实际编程中,通常可以省略第一行的output甚至program行)
Program HelloWorld(output);begin writeln('Hello, world!') {程序块的最后一条语句后不需要";" - 如果添加一个";"会在程序中增加一个“空语句”}end.