化疗病人吃什么好| 睾丸是什么东西| package什么意思| 左边头疼是什么原因怎么办| 蜈蚣最怕什么| 淋巴结是什么病严重吗| 脂肪有什么作用| 阳历5月20日是什么星座| 子宫肌瘤是什么病| 什么是西米| 高血压吃什么助勃药好| 共青团书记是什么级别| 碳酸钠呈什么性| 梦到高考是什么意思| 鼻炎吃什么药最好| 医保和社保有什么区别| 发呆是什么意思| 男性左下腹疼痛是什么原因| 一人一口是什么字| 铁低的原因是什么| hcmv是什么病毒| 刚愎自用是什么意思| 观音菩萨叫什么名字| gap是什么品牌| 梦到数钱代表什么预兆| 火红的什么| 头晕应该挂什么科| 血糖偏高会有什么症状| maga是什么意思| 七月十三日是什么日子| 灰指甲用什么药膏| 男人本色是什么意思| 幡然是什么意思| 降钙素原检测是什么| 什么什么若狂| 虎父无犬子什么意思| 尿隐血是什么原因引起的| 黑t恤搭配什么裤子| 绿茶是什么茶| 嘴唇起白皮是什么原因| 酸菜鱼可以放什么配菜| 甘油三酯高是什么意思| 橄榄绿是什么颜色| 太子是什么意思| 手指麻是什么原因| 为什么叫六小龄童| 舌苔很厚很白什么原因| 什么是党的根本大法| 梦到自己生孩子了是什么预兆| 87岁属什么生肖| 花肠是母猪的什么部位| 儿童尿频什么原因引起的| 孕妇什么体质容易晚生| 胃疼胃胀吃什么药好| 下眼袋大是什么原因引起的| 爱有什么用| 什么是红肉| 排湿气最快的方法吃什么| pu什么意思| 余的部首是什么| o型阴性血是什么意思| 腱鞘是什么| 吊丝是什么意思| 22度穿什么衣服合适| 夕火念什么| 五月七号是什么星座| 看诊是什么意思| 官杀旺是什么意思| 制动是什么| 背部疼痛是什么原因引起的| 9月1号什么星座| 猎德村为什么那么有钱| 痔疮不能吃什么食物| 动爻是什么意思| na是什么牌子| 为什么牙齿会发黑| 美人尖是什么| 保外就医是什么意思| 1975年五行属什么| 阑尾在人体的什么位置| 花漾是什么意思| 花生对胃有什么好处| 肝阴虚吃什么药| 编外人员是什么意思| 红肉指的是什么肉| 眼睛干痒用什么眼药水比较好| prr是什么意思| 右边偏头痛什么原因| 电压mv是什么意思| 寂是什么意思| 结肠炎吃什么药治疗效果好| 舌头溃疡吃什么药| 内脂是什么| 做肺部ct挂什么科| 什么是褪黑素| 知见是什么意思| 梅毒早期什么症状| kj是什么意思| 腿凉是什么原因引起的| 风风火火是什么生肖| 殿试是什么意思| 女孩缺金取什么名字好| 破财免灾什么意思| 尿蛋白是什么原因造成的| 白萝卜煮水喝有什么功效和作用| 长水痘可以吃什么菜| 皮炎用什么药膏| 什么是香云纱| 来大姨妈血块多是什么原因| 开五行属性是什么| 印第安纹是什么| 什么既什么又什么| 鼻息肉是什么症状| 养老保险什么时候开始交| 碧是什么颜色| 月经为什么来了一点又不来了| 什么是粗粮食物有哪些| 珠是什么生肖| 梦见长豆角是什么意思| pretty是什么意思| 什么样的人容易得心梗| 左膝关节退行性变是什么意思| 强迫症是什么意思| 甘肃天水有什么好玩的地方| 临床医生是什么意思| 甲鱼吃什么的| 小儿割包皮挂什么科| 犀利是什么意思| 李世民是什么民族| 痛风该吃什么药好得快| 补是什么偏旁| 8月26是什么星座| 副鼻窦炎症是什么意思| 附件炎是什么引起的| 美缝什么时候做| comeon什么意思| 甜字五行属什么| 乳晕是什么| 阿玛施属于什么档次| 大腿为什么会长妊娠纹| 午餐吃什么好又能减肥| 发高烧是什么原因引起的| 反馈是什么意思| kdj是什么意思| 地藏王菩萨是管什么的| 梦见耗子是什么预兆| 跑步配速什么意思| 你的书包里有什么英文| 冬天可以干什么| 怀孕初期可以吃什么水果| act是什么意思| only是什么牌子| 5月份什么星座| 低血糖挂什么科| 刚出生的小猫吃什么| 什么又什么| 什么身什么骨| 鱼加它是什么字| 有容乃大是什么意思| 低筋面粉适合做什么| ups是什么快递公司| 沙金是什么| 蛾子吃什么| 生物医学工程专业学什么| 增生是什么| 冒昧打扰是什么意思| 痱子吃什么药| 灰指甲是什么原因引起| 1935年属什么生肖属相| 托是什么意思| 总胆红素高是什么病| 祯字五行属什么| 吃了紧急避孕药会有什么反应| 橙子和橘子有什么区别| 羊肉配什么菜好吃| 阿联酋和迪拜什么关系| pg什么意思| 霸道是什么意思| 心慌心跳吃什么药| 通宵是什么意思| pu是什么元素| 左肖是什么生肖| 腰突挂什么科| nasa是什么意思| 射手座跟什么星座最配| 肠道易激惹综合症是什么症状| 胖大海和什么搭配最好| 尿气味很重是什么原因| 为什么日语怎么说| 缺钙会导致什么| 什么叫埋下伏笔| 芦荟有什么好处| 风湿什么药好| 临聘人员是什么意思| 这是什么车| 羲字五行属什么| shit什么意思中文| 尼麦角林片治什么病| 适当是什么意思| 为什么门牙突然有缝了| 口干口苦口臭是什么原因引起的| 卵巢囊肿吃什么药好得最快| 小孩小腿疼是什么原因引起的| 377是什么意思| 宋美龄为什么没有孩子| 梦到血是什么意思| 护理主要学什么| 鱼眼睛吃了有什么好处| 中水是什么水| sars是什么意思| 牙冠是什么意思| 流虚汗是什么原因| 心慌气短吃什么药| 水光针是什么| 荷兰豆为什么叫荷兰豆| 腊肉配什么菜炒好吃| 艾滋病简称什么| 凉粉是什么做的| 没有什么过不去| 什么颜色加什么颜色是红色| 为什么会长扁平疣| 为什么有| 石家庄为什么叫国际庄| 青霉素过敏不能吃什么药| 牛在五行中属什么| 根是什么意思| 什么样的女人不能娶| 柠檬水喝多了有什么坏处| 生气吃什么药可以顺气| 喝鲜牛奶有什么好处和坏处| 腱子肉是什么意思| 梦见抓鸟是什么征兆| 装是什么意思| 颈椎病应该挂什么科| 为什么总打嗝| 疱疹性咽峡炎吃什么药最管用| 月经期间吃什么对身体好| 长脸适合什么短头发| 什么的海底| 稽留流产是什么意思| 烧仙草粉是什么做的| 笑什么| 巧克力囊肿是什么意思| 屏保是什么| 全麦粉和小麦粉的区别是什么| 女人梦到火是什么预兆| 血小板太高会导致什么| 腹腔多发淋巴结是什么意思| 母亲过生日送什么礼物| 属蛇适合佩戴什么饰品| 尿常规检查挂什么科| 一生辛苦不得财是什么生肖| 破伤风是什么| 穷途末路什么意思| 贫血吃什么可以补血| 宫颈纳囊什么意思| 吃什么能增强免疫力| 克是什么单位| 贱痣是什么意思| 性冷淡吃什么药| 结肠炎不能吃什么食物| 茯苓的作用是什么| 什么是周记| 嚣张是什么意思| 百度跳转到内容

2018年“中国-加拿大旅游年”开幕式在多伦多举行

本页使用了标题或全文手工转换
维基百科,自由的百科全书
Pascal
编程范型指令式结构化
语言家族Wirth Pascal
设计者尼克劳斯·维尔特
发行时间1970年,?55年前?(1970
当前版本
  • ISO/IEC 10206:1991 Stage: 90.93 (29 июля 2008 года)
编辑维基数据链接
类型系统
作用域词法
主要实现产品
派生副语言
受影响于
影响语言
百度 原标题:“威马逊”或将成41年来登陆华南最强台风(图)  18日中午,广州上空乌云盖天。

Pascal是一个指令式编程面向过程编程语言,由尼克劳斯·维尔特在1968年9月设计,在1970年发行,作为一个小型的和高效的语言,意图鼓励使用结构化编程数据结构进行良好的编程实践。

称作Object Pascal的一个派生是为面向对象编程设计的。

历史

[编辑]

Pascal基于ALGOL编程语言,为纪念法国数学家和哲学家布莱兹·帕斯卡而命名。维尔特后来开发了类似Pascal的Modula-2Oberon。在开发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应用。 [4]

简要描述

[编辑]

维尔特的意图是,基于结构化编程,创建一个高效(无论是编译速度还是生成代码)的运行速度。Pascal植根于Algol 60语言,但是也引进了一些概念和机制,使程序员(在Algol的标量和数组之上)能定义他们自己的复杂(结构化)数据类型,也使建立诸如lists、trees和graphs这样的动态和递归数据结构更容易。这些重要的特性包括记录、枚举、子范围、使用关联指针去动态分配变量和集合。为了使这些有可能和有意义,Pascal在所有对象上有一个强类型,意味着如果不使用显式转换,一种数据类型不能转换或解释成另外一种。类似的机制是今天许多编程语言的标准。影响Pascal开发的其它语言是COBOLSimula 67和维尔特自己的Algol-W

Pascal,像今天的许多编程语言一样(但是不像C家族的绝大多数语言),允许任意层次的嵌套过程定义,也允许过程和函数内部的绝大多数种类的定义和声明。这使得一个非常简单和一致的语法,能让一个完整的program与一个单独的procedurefunction语法上近似相同(当然除了关键字本身外)。

实现

[编辑]

第一个Pascal编译器是在ZurichCDC 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产生,包括一个为“虚拟”堆栈机(即引导本身合理有效解释的代码)生成代码的编译器,一个解释这些代码的解释器——Pascal-P系统。虽然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 IIApple III计算机,以提供一个随着机器而来的BASIC解释器的结构化替代品。

Apple Computer在1982年为Lisa Workshop创建了自己的Lisa Pascal,在1985年将该编译器移植到Apple Macintosh和MPW。在1985年,经咨询维尔特,Larry Tesler定义了Object Pascal,这些扩展合并进Lisa Pascal和Mac Pascal编译器。

在1980年代,Anders HejlsbergNascom-2编写了Blue Label Pascal编译器。为IBM PC编写的该编译器的重实现在Borland收购之前以Compas Pascal和PolyPascal的名称销售。重命名为Turbo Pascal后,它变得广受欢迎,一方面由于一个积极的定价策略,一方面由于是第一个全屏集成开发环境之一,以及快速的周转时间(只需要数秒编译,链接和运行)。另外,它用汇编语言编写,并整体高度优化,使它比许多竞争对手更小和更快。1986年Anders将Turbo Pascal移植到Macintosh,并将Apple的Object Pascal扩展合并进Turbo Pascal。这些扩展然后加回到Turbo Pascal v5.5的PC版本中。与此同时Microsoft也实现了Object Pascal编译器。[5][6] Turbo Pascal 5.5给在1980年代后期开始主要关注于IBM PC的Pascal社区带来巨大影响力。许多研究BASIC结构化替代品的PC爱好者使用该产品。它也开始被专业开发人员接受。几乎同时,为了让Pascal程序员直接使用Microsoft Windows的基于C的API,许多概念从C语言引入。这些扩展包括空终止字符串指针算术运算函数指针,address-of运算符和非安全类型转换

然而,Borland后来决定需要更多精细的面向对象特性,并在Delphi里使用Apple提议的Object Pascal草图标准作为基础重新开始。(该Apple草图仍然不是一个正式的标准。)Delphi编程语言的第一版相应地命名为Object Pascal。与老的OOP扩展相比较,主要的增加是基于参考对象模型,虚拟构建器和析构器,以及属性。几个其它编译器也实现了该方言。

Turbo Pascal,和其它有单元或模块概念的派生物是模块化语言。然而,它不提供一个嵌套模块概念或合格的导入和导出指定符号。

Super Pascal是一个增加了非数字标签,作为类型名称的返回语句和表达式的变异。

ZurichKarlsruheWuppertal大学已开发了一个EXtension for Scientific Computing(Pascal XSC),为有控制精度的数字计算编程提供了一个自由的解决方案。

语言结构

[编辑]

最初形式的Pascal是一个纯粹的过程化语言,包括有诸如ifthenelsewhilefor等等保留字的类Algol控制结构的传统数组。然而,Pascal也有许多最初Algol60不包括的数据结构工具和其它抽象概念,像类型定义记录指针枚举集合。这些结构部分从Simula67Algol68尼克劳斯·维尔特自己的Algol-WC. A. R. Hoare的建议继承或获得灵感。

Hello world

[编辑]

Pascal程序开始于外部文件描述符作为参数的program关键字;然后跟着beginend关键字封装的主要分号分割语句,句点终结整个程序(或单元)。Pascal源代码不区分大小写

这里是一个非常简单的“Hello world”程序示例的源代码: (注:在实际编程中,通常可以省略第一行的output甚至program行)

Program HelloWorld(output);
begin
  writeln('Hello, world!')
 {程序块的最后一条语句后不需要";" - 
   如果添加一个";"会在程序中增加一个“空语句”}
end.

数据类型

[编辑]

Pascal和几种其它流行编程语言的类型以定义变量能存储的值的范围的方式定义一个变量,也定义了一个允许在该类变量上执行的操作符集。预定义类型是:

数据类型 变量能存储的值的类型 包括的种类
integer 整数 包括shortint,byte;integer,word;longint,longword;int64,qword。其中int64和qword类型不能做循环变量。
real 浮点数 包括real;comp;single;double;extended。其中comp类型的实质是整数型。
boolean TRUE或FALSE 只有boolean一种。
char 来自有序字符集的一个单独字符 只有char一种。

每种类型(除了boolean)允许的值的范围是定义实现的。为一些数据转换提供了函数。为了将real转换成integer,下面的舍入函数可用:使用四舍五入取整的roundroundto(非标准);分别向上和向下舍入的ceilfloor;向零舍入的trunc。注意在strfloattostr函数(非标准)中转换成十进制的输出,和write命令不使用银行家舍入。[来源请求]

程序员可以使用Pascal类型声明工具以预定义类型,自由地定义其它常用数据类型(例如,byte,string等等。)。 例如:

type
  byte = 0..255;
  signedbyte = -128..127;
  string = packed array [1..255] of char;

(注:实际上,常用的数据类型如byte,string等在很多实现中已经定义过)

标量类型

[编辑]

Pascal的标量类型是realintegercharacterboolean和引进Pascal的新类型枚举

var
  r: Real;
  i: Integer;
  c: Char;
  b: Boolean;
  e: (apple, pear, banana, orange, lemon);

子范围类型

[编辑]

可以构造任意有序类型(除了real的简单类型)的子范围:

var
  x: 1..10;
  y: 'a'..'z';
  z: pear..orange;

集合类型

[编辑]

不同于同时期的其它编程语言,Pascal支持集合类型:

var
  set1: set of 1..10;
  set2: set of 'a'..'z';
  set3: set of pear..orange;

集合是现代数学的基础概念,可能在很多算法中使用。这样一个特性是非常有用的,可能比不支持集合的语言的同等结构更快。例如,对于许多Pascal编译器:

if i in [5..10] then
...

比以下代码执行更快:

if (i>4) and (i<11) then
...

同时,非连续值的集合可能有利于性能和可读性:

if i in [0..3, 7, 9, 12..15] then
...

对于像这些涉及小域上集合的例子,性能的提高通常是编译器将集合变量看作位掩码实现的。集合操作符然后可以作为按位机器码运算有效实现。

然而,对于值范围显著大于本地字长的例子,集合表达式比使用关系运算符的同等表达式可能导致更糟的性能和更多的内存使用。

类型声明

[编辑]

使用类型声明,可以从其它类型定义新类型:

type
  x = Integer;
  y = x;
...

更进一步,复杂的类型可以从简单的类型构建:

type
  a = Array [1..10] of Integer;
  b = record
        x: Integer;
        y: Char
      end;
  c = File of a;

File类型

[编辑]

正如上面的例子所示,Pascal的文件是组件序列。每个文件有一个用f^表示的缓冲变量。过程get(读)和put(写)移动到缓冲变量的下一个元素。引进了读,使得read(f, x)与x:=f^; get(f);相同。引进了写,使得write(f, x)与f^ := x; put(f);相同。打印的文字作为字符文件预定义了。当缓冲变量能用于检查下一个字符可用(读一个整数前检查一个数字)时,这个概念导致了早期实现的交互程序的严重问题,但是后来用“lazy I/O”概念解决了。

在Jensen & Wirth的Pascal里,字符串用封装的字符数组表示;因此有固定长度和通常是空间填充。有些方言有一个自定义字符串类型。

指针类型

[编辑]

Pascal支持指针的使用:

type
  a = ^b;
  b = record
        a: Integer;
        b: Char;
        c: a
      end;
var
  pointertob: a;

这里变量pointertob是数据类型记录b的一个指针。指针在声明之前可用。这是前向声明,一个使用之前必须声明的规则的例外。创建一个新记录,将值10和字符A分配给记录的域a和b,将指针c初始化为nil,命令是这样的:

new(pointertob);
pointertob^.a := 10;
pointertob^.b := 'A';
pointertob^.c := nil;
...

也可以如下面这样使用with语句来做:

new(pointertob);

with pointertob^ do
begin
  a := 10;
  b := 'A';
  c := nil
end;
...

with语句范围内,a和b指记录指针pointertob的子域,而不是记录b或指针类型a。

通过在记录里包含一个指针类型域(c,参见nilnull),可以创建链表队列

与许多以指针为特性的语言不同,Pascal只允许指针引用匿名的动态创建的变量,不允许引用标准的静态或本地变量。另外,指针是类型绑定的,即字符指针与整数指针是类型不兼容的。该净效果是Pascal指针是“安全的”,远离其它指针实现固有的类型安全问题。

控制结构

[编辑]

Pascal是结构化编程语言,意味着控制流被结构化成标准语句,理想地没有“go to”命令。

while a <> b do writeln('Waiting');

if a > b then writeln('Condition met')
else writeln('Condition not met');

for i := 1 to 10 do writeln('Iteration: ', i:1);

repeat
  a := a + 1
until a = 10;

case i of
  0: write('zero');
  1: write('one');
  2: write('two')
end;

过程和函数

[编辑]

Pascal将程序结构化成过程和函数。

program mine(output);

var i : integer;

procedure print(var j: integer);

  function next(k: integer): integer;
  begin
    next := k + 1
  end;

begin
  writeln('The total is: ', j);
  j := next(j)
end;

begin
  i := 1;
  while i <= 10 do print(i)
end.

过程和函数可以嵌套任意深度,“program”构造是逻辑上最外层的块。

每个过程或函数可以有自己的正确顺序的goto标签、常量、类型、变量和其它过程和函数声明。 此顺序要求最初的本意是允许高效的单通编译。然而,在一些方言里声明节严格的顺序要求是不必要的。

分号作为语句分割符

[编辑]

Pascal从ALGOL语言里吸纳了许多语言语法特性,包括使用分号作为语句分割符。这与其它诸如PL/IC等的语言是不同的。它们使用分号作为语句终止符。正如上述例子演示的,记录类型声明、块或case语句的end关键字之前,repeat语句的until关键字之前,if语句的else关键字之前,不需要分号。

在Pascal的早期版本里,不允许存在额外的分号。然而,1973年的修订报告,后来成为ISO 7185:1983里的额外的类ALGOL空语句现在允许这些情况的绝大多数可选地使用分号。例外是仍然不允许分号立即出现在if语句的else关键字之前。

在一些情况下,真正需要空语句:

(* skip blanks *)
while GetChar() = ' ' do ;

然而,滥用可能会产生问题。虽然下面语句是语法正确的,但是结果不大可能是想要的:

if alarm then;
begin;
  SendMayday;
  EjectPilot;
end;

资源

[编辑]

编译器和解释器

[编辑]

几个Pascal编译器和解释器可供一般公众使用:

  • Delphi是Embarcadero(前身为Borland/CodeGear)的旗舰RAD(快速应用开发)产品。它使用继承自Pascal的Object Pascal语言(Borland称作“Delphi编程语言”)为Windows平台创建应用。从Delphi 8到Delphi 2007就存在的.NET支持已终止,被一个不完全向后兼容的语言(Prism,更名为Oxygene,参见下面)所替代。最新版本(Delphi XE5)支持 iOSAndroidMac OS XMicrosoft Windows平台的开发。
  • Free Pascal是一个Pascal编写的多平台编译器(它是自举的)。它旨在提供一个方便而强大的编译器,既能编译遗留应用又是开发新应用的手段。它在GNU GPL下发布,而包和运行时库遵守一个修改的GNU LGPL。除了Turbo Pascal、Delphi和Mac Pascal的兼容模式,它也有自己的过程和面向对象语法模式,以支持诸如操作符重载的扩展特性。它支持许多平台和操作系统。
  • Lazarus是一个RAD(快速应用开发)的类Delphi的可视跨平台IDE。基于Free Pascal,Lazarus可用于包括LinuxFreeBSDMac OS XMicrosoft Windows的无数平台。
  • Dev-Pascal是一个以Borland Delphi设计的,支持Free Pascal和GNU Pascal作为后台的Pascal IDE。与它的C++兄弟相反,多年来还没见到它的重要发布。
  • Oxygene(前身是Chrome)是一个.NETMono平台上的下一代Object Pascal编译器。它由RemObjects Software页面存档备份,存于互联网档案馆)创建和销售,最近由Codegear/Embarcadero作为Prism开发和出售。它试图将Pascal的精神带到.NET,但不是很兼容其它Pascals。
  • KylixDelphi的一个后代,支持Linux操作系统,有一个改善的对象库。其编译器和IDE现已用于非商业用途。Borland不再支持该产品。
  • GNU Pascal编译器(GPC)是GNU编译器集(GCC)的Pascal编译器。编译器本身是用C编写的,运行时库绝大多数用Pascal编写。在GNU通用公共许可下自由发布,它运行在许多平台和操作系统上。它支持ANSI/ISO标准语言和部分Borland/Turbo Pascal语言支持。比较痛苦的疏漏之一是缺乏100% TP兼容的字符串类型。可能除了Mac Pascal,对Borland Delphi和其他语言版本的支持是非常有限的,不过对它们的支持在快速增长。
  • Virtual Pascal是作为一个兼容Borland Pascal语法的本地OS/2编译器由Vitaly Miryanov在1995年创建的。然后,由fPrint进行商业开发,增加了Win32支持;在2000年成为了自由软件。今天它可以为Win32、OS/2和Linux编译,主要兼容于Borland Pascal和Delphi。该编译器的开发在2025-08-07终止了。
  • P4编译器页面存档备份,存于互联网档案馆),许多后来的包括UCSD p-System的用Pascal实现的Pascal编译器的基础。它实现了完全Pascal的一个子集。
  • P5编译器,是一个P4的ISO 7185(完全Pascal)适应。
  • Turbo Pascal是1980年代和1990年代早期,PC的主要Pascal编译器,由于强大的扩展和极短的编译时间而流行。Turbo Pascal是紧凑编写的,可以完全从内存编译、运行和调试,而不需要访问磁盘。那时慢速软盘驱动器对程序员来说是常见的,进一步放大了Turbo Pascal的速度优势。目前,Turbo Pascal的老版本(直到5.5)可从Borland的站点免费下载。
  • Turbo51是一个8051家族微控制器上的自由Pascal编译器。(使用Turbo Pascal 7语法)
  • IP Pascal页面存档备份,存于互联网档案馆)实现了语言“Pascaline”(后来命名为Pascal计算器),是一个兼容ISO 7185原始Pascal的高度扩展Pascal。它具有命名空间控制模块,包括并发任务模块、信号、对象、在运行时分配的任意维数组、重载、覆盖和许多其它扩展。IP Pascal有一个对Pascal语言自定义定制的内置可移植库。例如,1970年代原始Pascal的一个标准文本输出应用可以重编译以运行在一个窗口里,甚至可以添加图形结构。
  • Pascal-XTSiemens为他们的主机操作系统BS2000SINIX创建的。
  • PocketStudio是一个Pascal子集编译器和RAD工具,针对Palm OS和MC68xxx处理器,有一些自己的扩展以辅助与Palm OS API接口。它仿制Delphi和Lazarus,有一个可视表单设计器,一个对象查看器和一个源代码编辑器。
  • MIDletPascal——一个生成小而快的专门设计来为手机创建软件的Java字节码的Pascal编译器和IDE。
  • Vector Pascal页面存档备份,存于互联网档案馆)是一个针对诸如MMX和AMD 3d Now的SIMD指令集的语言,支持所有Intel和AMD处理器,以及Sony Playstation 2 Emotion Engine。
  • Morfik Pascal允许Web应用的开发全部(服务器和浏览器端)用Object Pascal编写。
  • web Pascal是一个在线IDE和Pascal编译器。
  • WDSibyl——win32和OS/2的可视开发环境和Pascal编译器。
  • PP编译器页面存档备份,存于互联网档案馆),直接运行在手持计算机上的Palm OS的编译器。
  • CDC 6000 Pascal编译器页面存档备份,存于互联网档案馆)第一个(CDC 6000)Pascal编译器的源代码。
  • Pascal-S[永久失效链接] - "Pascal-S: A Subset and Its Implementation", N. Wirth in Pascal - The Language and Its Implementation, by D.W. Barron, Wiley 1979.

一个非常广泛的清单可以在Pascaland页面存档备份,存于互联网档案馆)上找到。该站点在法国,但是它基本上是一个编译器的URL清单;对不讲法语者没有障碍。站点Pascal Central页面存档备份,存于互联网档案馆),Mac中心的一个有文章档案的丰富集合的Pascal信息和宣传站点,加上许多编译器和教程的链接。

标准

[编辑]

1983年,该语言标准化为国际标准IEC/ISO 7185,以及一些当地国家的具体标准,包括美国ANSI/IEEE770X3.97-1983和ISO 7185:1983。这2个标准的区别仅在于ISO标准包含一个conformant数组的“级别1”扩展,而ANSI不允许对原始(维尔特版本)语言扩展。1989年,对ISO 7185进行了修正(ISO 7185:1990),纠正了原始文档中找到的各种错误和模糊。

1990年,一个扩展的Pascal标准作为ISO/IEC 10206创建。1993年,ANSI组织用ISO 7185:1990标准代替了ANSI标准,有效地终结了作为一个不同标准的状态。

ISO 7185被说成是对《用户手册和报告(Jensen和维尔特)》详述的维尔特的1974年语言的澄清,但是引人注意的是增加了作为标准级别1的“Conformant Array Parameters”,级别0是没有Conformant Array的数组。该增加是在C. A. R. Hoare的请求下,得到了维尔特赞同。该变动的原因是Hoare想创建数学算法库(NAG)的一个Pascal版本,该库最初用FORTRAN编写,发现如果没有允许变长数组参数的扩展就无法实现该库。出于同样的考虑,ISO 7185包含了指定过程和函数参数的参数类型的工具。

注意维尔特自己将1974年的语言当作“标准”,以将其与CDC 6000编译器的机器特定特征相区别。该语言记录在“Pascal用户手册和报告”的第二部分报告”

在Pascal起源的大型机(主机和微计算机)上,这些标准普遍遵循。在IBM-PC上,这些标准不被遵循。在IBM-PC上,Borland标准Turbo Pascal和Delphi有最大量的用户。因此,了解一个特别的实现符合原始Pascal语言还是Borland方言非常重要。

该语言的IBM-PC版本开始区别于UCSD Pascal,以对该语言的几个扩展以及几个遗漏和变化为特性的解释型实现。许多UCSD语言特性今天仍然存在,包含于Borland的方言。

Divisions

[编辑]

Pascal的维尔特的Zurich版本在ETH之外以2个基本形式发布,CDC 6000编译器源和一个称作Pascal-P系统的移植工具。Pascal-P编译器遗漏了完全语言的几个特性。例如,作为参数使用的过程和函数,无区别变体记录,包装,处理,过程间的goto方法和完全编译器的其它特性被忽略。

Kenneth Bowles教授的UCSD Pascal是基于Pascal-P2包的,因此有几个共同的Pascal-P语言限制。UCSD Pascal后来作为Apple Pascal被接纳了,并持续有几个版本。虽然UCSD Pascal实际上扩展了Pascal-P2包的Pascal子集,通过添加回标准Pascal结构,它仍然不是一个完整的Pascal标准安装。

Borland的Turbo PascalAnders Hejlsberg用汇编语言独立于UCSD或Zurich编译器编写。然而,它与UCSD编译器一样接纳了许多相同子集和扩展。这可能是因为UCSD系统是适于在当时可用的资源限制的微处理器上开发应用的最常见Pascal系统。

相关标准清单

[编辑]
  • ISO 8651-2:1988 信息处理系统——计算机图像——图像核心系统(GKS)语言邦定——第二部分:Pascal

评论

[编辑]

Pascal在计算社区产生了广泛的响应,包括批评和赞美。

批评

[编辑]

尽管非常流行(尤其在八十到九十年代),依据维尔特的对这种语言的定义来构建Pascal,使它不适合非教学的使用,这遭到了广泛的批评。 推广了C语言布莱恩·柯林汉(Brian Kernighan)早在1981年就在他的论文Why Pascal Is Not My Favorite Programming Language对Pascal提出了严厉的抨击。[7]

参看

[编辑]

延伸阅读

[编辑]
  • Niklaus Wirth: The Programming Language Pascal. 35-63, Acta Informatica, Volume 1, 1971.
  • C A R Hoare: Notes on data structuring. In O-J Dahl, E W Dijkstra and C A R Hoare, editors, Structured Programming, pages 83–174. Academic Press, 1972.
  • C. A. R. Hoare, Niklaus Wirth: An Axiomatic Definition of the Programming Language Pascal. 335-355, Acta Informatica, Volume 2, 1973.
  • Kathleen Jensen and Niklaus Wirth: PASCAL - User Manual and Report. Springer-Verlag, 1974, 1985, 1991, ISBN 0-387-97649-3 and ISBN 3-540-97649-3[1]
  • Niklaus Wirth: Algorithms + Data Structures = Programs. Prentice-Hall, 1975, ISBN 0-13-022418-9[2]
  • Niklaus Wirth: An assessment of the programming language PASCAL 23-30 ACM SIGPLAN Notices Volume 10, Issue 6, June 1975.
  • N. Wirth, and A. I. Wasserman, ed: Programming Language Design. IEEE Computer Society Press, 1980
  • D. W. Barron (Ed.): Pascal - The Language and its Implementation. John Wiley 1981, ISBN 0-471-27835-1
  • Peter Grogono: Programming in Pascal, Revised Edition, Addison-Wesley, 1980
  • Richard S. Forsyth: Pascal in Work and Play, Chapman and Hall, 1982
  • N. Wirth, M. Broy, ed, and E. Denert, ed: Pascal and its Successors页面存档备份,存于互联网档案馆) in Software Pioneers: Contributions to Software Engineering. Springer-Verlag, 2002, ISBN 3-540-43081-4
  • N. Wirth: Recollections about the Development of Pascal. ACM SIGPLAN Notices, Volume 28, No 3, March 1993.

参考资料

[编辑]
  1. ^ About Microsoft's "Delegates". (原始内容存档于2025-08-07). We looked very carefully at Delphi Object Pascal and built a working prototype of bound method references in order to understand their interaction with the Java programming language and its APIs ... Our conclusion was that bound method references are unnecessary and detrimental to the language. This decision was made in consultation with Borland International, who had previous experience with bound method references in Delphi Object Pascal. 
  2. ^ TechMetrix Research. History of Java (PDF). Java Application Servers Report. 1999. (原始内容 (PDF)存档于2025-08-07). The project went ahead under the name "green" and the language was based on an old model of UCSD Pascal, which makes it possible to generate interpretive code 
  3. ^ A Conversation with James Gosling – ACM Queue. [11 August 2015]. (原始内容存档于16 July 2015). 
  4. ^ CodeGear Delphi#Products developed with Delphi
  5. ^ Jon Udell, Crash of the Object-Oriented Pascals, BYTE, July, 1989.
  6. ^ M.I.Trofimov, The End of Pascal?, BYTE, March, 1990, p.36.
  7. ^ Brian W. Kernighan (191). Why Pascal is Not My Favorite Programming Language 存档副本. [2025-08-07]. (原始内容存档于2025-08-07). 

外部链接

[编辑]
肺结核可以做什么运动 乙肝e抗体阳性什么意思 6月15是什么星座 男生适合什么职业 尿潴留吃什么药
马头琴是什么族的乐器 离婚需要带什么证件 梦见发洪水是什么征兆 肝斑一般在脸上的什么地方 带状疱疹不能吃什么
什么样的智齿需要拔 射手女喜欢什么样的男生 epa和dha是什么 硝酸咪康唑乳膏和酮康唑乳膏有什么区别 乙肝病毒表面抗体阳性是什么意思
愚钝是什么意思 武夷岩茶是什么茶 海尔洗衣机e3是什么故障 男性hpv检查挂什么科 梦见什么是怀孕的征兆
ipmn是什么意思hcv8jop8ns8r.cn 属猪男和什么属相最配hcv9jop3ns5r.cn 心电图t波改变什么意思hcv7jop6ns7r.cn 2.26是什么星座hcv9jop0ns1r.cn 海贼王什么时候出的hcv7jop7ns3r.cn
莆田荔枝什么时候成熟hcv9jop3ns3r.cn 碗莲什么时候开花hcv7jop4ns7r.cn 脉压差小是什么原因imcecn.com 化疗后吃什么补身体hcv8jop8ns7r.cn 什么币最值钱hcv8jop3ns8r.cn
腹泻吃什么好hcv7jop5ns5r.cn 金庸原名叫什么hcv7jop7ns4r.cn 梦见缝被子是什么意思hcv8jop2ns1r.cn 甲功五项是什么意思hcv8jop8ns5r.cn 邓字五行属什么hcv9jop7ns4r.cn
射手和什么星座最配hcv8jop9ns6r.cn 吃什么补蛋白质最快bfb118.com 经期可以喝什么hcv7jop4ns7r.cn 大熊猫的尾巴是什么颜色hcv8jop1ns3r.cn ck香水属于什么档次hcv9jop0ns8r.cn
百度