哪些特征有助于Pascal的发展?


17

我正在编译Pascal语言的详细历史记录,而我缺少一些细节。

今天有太多功能让我们理所当然。哪些功能对Pascal的发展做出了重大贡献,为什么它们如此重要?

我在寻找语言功能,而不是平台或框架功能。因此,例如运算符重载或默认参数,而不是Linux支持或新的Rich Text小部件。

我知道Pascal有几种不同的口味(Delphi,Free Pascal,Oxygene,Quick Pascal,Apple Pascal等),它们在不同的时间并行地引入了相同的功能。那没问题。我期待在Pascal语言作为一个整体,并了显著的里程碑发生(日期,版本等)


@Jim您的问题要求提供日期列表,但没有要求输入为什么有人认为它们很重要。我已将您的问题改写为抓住这个方面,并重新打开了它。

2
您知道Turbo Pascal的产品彻底改变了Pascal的世界吗?实际上,IBM PC世界也是吗?特别是因为它固定了字符串。

4
别忘了UCSD Pascal!它在Java在Sun眼前一闪之前就引入了字节码(p码)。
Macneil

1
+1 @Macneil UCSD p代码和Smalltalk VM是我在谈论现代托管代码(Java,.NET)时经常要解释的东西。看到大量“现代”内容(例如Apps,这只是客户端服务器的一种新形式)时,拥有déjàvu很有趣。
Jeroen Wiert Pluimers 2011年

1
@Jeroen Pluimers:关于DVCS是“新”的说法我也感到很开心。我在Sun使用SCCS / Teamware,在Torvalds使用BitKeeper。当我看到CVS时,我知道它已损坏(Torvalds也是如此)。当我第一次听说SVN时,我以为“哦,他们终于解决了它”。但不是。OSS世界(以及Joel!)被CVS做错了一切所破坏,他们必须相信这是新事物!
Macneil

Answers:


10

从语言历史的角度来看,Pascal的最大贡献可能是强大的类型安全性。这场战斗现在大部分已经结束-帕斯卡尔(Pascal)赢得了胜利-而工业引爆点是Java。但是很长一段时间以来,C早已在Pascal之前得到了认为自己长大了编码人员的人们的青睐,这主要是因为:人们希望自由地操作指针,就好像它们是整数一样。但是,Pascal的实际实现存在漏洞,例如,工会没有动态检查判别字段,甚至没有对指针进行全面的类型转换,以至于所有对象都等同于C(Turbo Pascal是其中之一)。

这以及简化复杂的ALGOL 68 spec [1]可能是一个起点。

[1]尝试阅读ALGOL 68报告,这绝对是60年代的产物!网络上的一个站点提到了一些奇怪的行话:“公交车令牌”,“无形生产树”,“原始环境”,“乱伦联合”,“概念”,“原型概念”,“元符号”,“超概念”,“偏执”等。


15

我要说的是,整个Pascal历史上最重要的两个驱动力是:

  1. 类型安全性:Pascal开创了一种信念,即类型安全性在语言中至关重要。
  2. 编译器效率:Pascal一直被设计为单程语言,并且向世界展示了在不放弃功能的情况下编译器可以达到多快。构成快速编译器的因素还包括构成设计良好,易于阅读的语言的因素。Borland的精髓在于提供所有功能和性能。

PASCAL也不是使用PASCAL本身编写编译器的第一语言吗?当时的另一件事是P代码-虚拟Pascal机器的代码。在另一台机器上实现PASCAL所需要做的就是为P代码编写解释器或汇编器。
Ingo

我要补充一点,类型安全性还包括大多数pascal编译器中称为运行时检查的机制。(几乎吗?)每个编译器都有它们,这与C编译器偏爱的LINT方法根本不同。
Marco van de Voort,

11

您确实需要追溯到起源-查找Niklaus Wirth的一些历史。帕斯卡(Pascal)最初是一种教学语言。“算法+数据结构=程序”是一个很好的起点。

当时,Pascal比Algol 68和PL / 1更为简单。它不像Fortran4那样强制结构和声明,并具有强大的类型安全性(Fortran 77在那里有一些改进,但您仍然可以快速松口地玩)。与COBOL相比,编写程序更短,更简单,更容易。(Hello world大约有6行而不是600行)。

当它起源时,Pascal中就有诸如字符数组之类的东西-就是用于字符串处理的。多年来,情况有所改善。

如果您真的想研究Pascal的历史,则必须考虑以下几点:

  • 沃思的原著(标准帕斯卡)
  • Digital Equipment Corp(DEC)在Vax上的扩展
  • UCSD p-System(在许多机器上,尤其是在Apple-2上)
  • 涡轮帕斯卡
  • Apollo Domain Pascal(用于编写Domain / OS操作系统,也称为Aegis)
  • 带有对象和单元的Turbo Pascal(版本5.5及更高版本。编辑:刚刚找到TP 5.5 OOP PDF
  • 德尔菲

早在1980年代,帕斯卡(Pascal)和C(C)之间就发生了一场巨大的杀。

结果,诸如Bliss-32,Algol和PL / 1之类的怪异而奇妙的东西几乎消失了-但是这些想法的想法进入了Pascal。

编辑:字符数组可以打包,这赋予了一些特殊的属性,但是如果您想要我们现在所知道的字符串处理,则需要自己进行扩展。


IIRC进行了一些特殊处理packed array[1..n] of char;,例如Read(ln)和Write(ln)
Gerry

是的,readln,writeln有点特殊,因为它们可以处理可变数量的字符的输入/输出。在1980年代后期,由于它们接受了可变数量的参数,它们还存在邪恶和罪恶并破坏了语言结构,这也引起了一些争议。纯粹主义者讨厌这一点。我们其余的人只是使用它而不必担心太多。
quick_now 2011年

也许来自“其他” Wirth语言Modula2的模块/单元系统。(尽管可能通过努力使之间接获得Pascal标准,但它最终成为Extended Pascal标准,尽管使用了不同的语法)
Marco van de Voort

5

面向对象的扩展!随着90年代中期Delphi(1)的发布,Object Pascal是最大的(非正式的)标准飞跃。很难仅选择一种语言,但是整个对象模型的整个核心有助于将语言提升到现代状态。不幸的是,直到今天,它还没有成为正式的统一标准,所有编译器都遵循该标准进行编码对称。

幸运的是,免费Pascal项目开发人员已经很好地适应了Borland和Embarcadero向Delphi添加的功能。RemObjects没有那么多,但至少在Delphi Prism下与Embarcadero有联系,因此任何与标准的偏离(使该语言更符合.NET要求)都将得到大量记录。


8
对象通过Turbo Pascal 5.5引入Pascal
mcottle 2011年

1
默认情况下,过程和功能是静态的。您必须使用virtual关键字使它们可以被子类覆盖。

1
在Delphi中,Virtual不是保留字。Delphi保留字和Prism关键字的列表可以在此处此处找到。
David I


2
@Carl-我忘了经典的Mac是用Pascal编程的,我不知道它是Wirth共同创建的Pascal的OO版本。
mcottle

4

我记得很早以前就将Pascal与MS-DOS结合使用时只有一两件事:

Turbo Pascal在80年代或多或少引入了一种IDE(与UCSD Pascal相比,编译性能得到了极大的提升。

在90年代中期左右,Borland将名字从Turbo改名为Borland Pascal。第一步是引入单元,该单元可以将大型项目拆分为单独的编译单元。

后来他们还添加了面向对象的编程。


Turbo Pascal是简单的产品。Borland公司帕斯卡尔有额外的东西一样装配了很多等等

2
Turbo Pascal(v4 IIRC)中引入的单位。这些文件已编译为.tpu(涡轮帕斯卡单位)文件,它们是当前dcu文件的前身。我相信它们是基于Wirth的Modula-2语言的概念。
格里

1
ISTR UCSD p系统也有单位,但我不知道它们是否早于Turbo Pascal。
TMN

有趣的是,1980年用于Atari 2600的“ BASIC PROGRAMMING”盒带提供了一个编程屏幕,该屏幕令人惊讶地类似于CodeView屏幕。可以在屏幕的一个区域中查看程序(突出显示当前执行点),在第二个区域中查看变量的值,并在第三区域中查看“ print”语句的任何输出。不幸的是,可供程序员使用的RAM的数量是如此有限,以至于它不仅限于“玩具”应用程序-甚至还不是玩具。对于具有...的平台,仍然是一项有趣的技术成就
supercat

...高达128 字节的RAM(包括屏幕指针所需的24字节),并且整个开发系统都适合4K ROM(包括字符形状)。考虑到这些限制,允许用户使用64个字节的RAM来保存其程序,变量和输出是一个很巧妙的技巧。不幸的是,雅达利(Atari)在开发“ SARA”芯片之前就发布了“基本编程”(将RAM从128字节增加到256倍)。能够为程序使用128字节的RAM,再为变量和输出使用64字节,要比为所有内容使用64字节要好得多。
2014年

4

帕斯卡(Pascal)的核心进化步骤之一是正确的弦乐概念。ISO 7185(“标准帕斯卡”)没有它们,这有点尴尬。但是,所有真正的程序员都需要它们,并且可行的Pascal实现(例如Borland / Turbo Pascal)确实提供了它们。


4

回顾Delphi的Pascal语言创新-我将为类添加属性,方法,事件(PME)模型和“已发布”部分。这使本机代码易于使用,并扩展了组件的构建。组件满足了Brad Cox对软件IC的承诺。



3

80年代和90年代初,帕斯卡(Pascal)的多种口味之间的斗争。

您有Apple PascalMicrosoft Pascal和QuickPascal以及Turbo Pascal

所有对象都以一种或另一种方式引入了对象Pascal(QuickPascal 1.0和Turbo Pascal 5.5在同一时间范围内)。苹果是因为他们的平台需要它,微软和Borland是因为OO变得“酷”(然后QuickPascal很快就死了,而Turbo Pascal 6.0添加了一个合理的OO框架,称为Turbo Vision)。

Rudy Velthuis在他的论坛帖子中对此做得很完整。

您可以使用DOS 6.22和该时代的一些DOS Pascal编译器下载ISO映像



2

我将添加匿名方法和泛型。


1
也许是最新版本的Delphi。我用完了Delphi 7,所以当然从不使用匿名方法或泛型!
2011年


2

对我来说,最大的两件事(在某些其他语言,如C ...之后)是不区分大小写和编译器速度。

之后,事实是使用芬兰语键盘更容易书写,因为我不需要经常使用{}或其他难以触及的键...

自从Delphi2以来,我就一直在这里工作,但是在几年的工作中使用了D1。


1

从Dahl,Dijkstra和Hoare撰写的“结构化编程”开始。即使在今天,Dijkstra的部分也很重要。Tony Hoare的数据结构部分为PASCAL奠定了很多基础。(Dahl的部分讨论了最终成为面向对象编程的内容。他描述了Simula 67中成为类的内容。)

研究一下Wirth对ALGOL-60变体的实现ALGOL-W。

您还需要同时了解PL / I和IBM 360链接编辑器(链接器)。这是一个普遍性的奇迹,其次要问题是,它在一月份在阿拉斯加朱诺的糖蜜跑得慢。PASCAL专门设计用于一次编译和链接,以提高速度。(这确实有助于该语言在具有大量内存的CDC 6400初级超级计算机上开始使用,使单遍编译器实用)。

实际上,苏黎世联邦理工学院有两个主要版本的PASCAL。当前每个人都知道的PASCAL语言实际上是PASCAL2,第二个版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.