为什么C胜过Pascal?[关闭]


67

我的理解是,在1980年代,也许也是在1990年代,Pascal和C在生产语言上几乎是一对一的。

帕斯卡的最终灭亡是仅由于Borland忽视了Delphi吗?还是还有更多的东西,例如运气不好或Pascal固有的错误(希望它复兴)。

我对可以支持的历史事实和观察感兴趣,而不是喜欢和不喜欢。


10
如果您基本上只有一家破产公司支持您使用的语言,那么它绝对无济于事(我说的是.Net Borland之前的版本)。
Let_Me_Be 2011年

48
一个字的答案:Unix。
SK-logic

4
嗯 什么C
Lieven Keersmaekers,2012年

8
最终pascal丢失,因为它使用基于1的字符串。
Pieter B'9

7
@jk:更不用说在ISO Pascal中,字符串可以具有任何长度,但是不同长度的字符串具有不同的类型。要大写任何字符串,您需要256个函数。要附加两个随机字符串,您需要成千上万个!
MSalters 2012年

Answers:


43

帕斯卡之战之所以失败,主要是因为:

  • 详细度(if ... then begin ... endvar A: array[0..15] of Integer
  • 相互无法理解的方言和官方标准
  • 不到令人印象深刻的面向对象扩展
  • 最成功,最实用的方言-Turbo Pascal-从未移植到DOS / Windows以外的平台。另外,Borland从未打开过编译器的源代码。
  • Paland的“最后希望”-Delphi-被Borland定位为针对企业环境的数据库开发平台。这是一个不幸的营销举动(我想是由营销人员做出的),因为创意工程师讨厌数据库和公司环境。然后,Delphi for Linux Kylix失败。
  • 苹果公司改用C语言,然后改用Objective-C,因此杀死了Pascal,并将其作为一种操作系统语言

19
苹果停止使用Pascal的时间很久,就转用了Objective-C。最初的Macintosh操作系统和库是使用Pascal编写的,但是Mac推出后不久,Apple就为C提供了良好的支持,并在90年代初切换到了C。苹果在收购NeXT时采用了Objective-C,这发生在90年代末史蒂夫·乔布斯(Steve Jobs)回归之后。
Caleb

36
我不认为冗长是一个相关的论点。随着代码的阅读,书面的详细程度会有所好处。
johannes

14
详细程度不是今天的语言(Python与Perl)所提倡的吗?
Rook

7
我认为冗长不是原因,相反,它是Pascal的强项之一。

9
这是不正确的。Turbo Pascal大获成功。主要的问题是您只能在DOS / Windows上使用它。

44

C是Unix的基础。在80年代和90年代,Unix受到越来越多的关注。今天,您的智能手机中出现了一些Unix风格。


15
不仅是UNIX。Windows及其内核主要是用C编写的。更不用说C ++的强大了,它一定也使C至少更流行了。
Yam Marcovic

2
@ SK-logic它于1984年问世。我不会说C那时已经占领了世界。您有Smalltalk,Pascal和其他公司到处都在使用(更不用说COBOL了)。
Yam Marcovic

3
@Yam:Unix和C已经在80年代广泛传播。当我在大学学习时(90年代初),Unix和C是每个认真的开发人员都希望从事的“平台”。Unix是用C实现的,因此如果没有C,就不会有Unix。Smalltalk,Pascal和COBOL并没有发挥如此重要的作用。
乔治

2
@Giorgio的确,在Dennis Ritche和Brian Kernighan使C稳定之后,他们用C重新编写了UNIX,从而使移植到其他类型的计算机变得容易得多。
Yam Marcovic

2
@ Steve314好点。但是,据我所知,早期的Windows内核也是由Assembler开发的。在汇编中,根据定义,调用约定不会以任何方式强制执行(因此,“约定”一词)。因此,似乎它具有“ Pascal调用约定”的名称并不一定意味着它是由Pascal编程语言的发明者开创的,或者Windows是用Pascal开发的。编辑:我刚刚读了您最近的评论。我想目前我们还没有什么要补充的。:)
Yam Marcovic

34

Brian W. Kernighan 撰写的《为什么Pascal不是我最喜欢的语言》论述了批评的要点。

C更加通用和可扩展。甚至有人发现如何使用C做(一种)面向对象编程!而且,内联汇编程序和其他低级功能使它成为系统编程的重要语言。


9
如果我还记得的话,Turbo Pascal(顺便说一句,我的第一种编程语言)支持嵌入式汇编程序。我以前看过Kernighan的文章。但是他的批评不是很快就过时了吗?
Konrad Morawski 2011年

2
@ Morawski,TP是80年代,C是70年代。它来晚了十多年。
SK-logic

9
@Morawski:此外,Turbo Pascal只是Pascal的一种实现。该标准描述了一种不是特别有用的语言,因此实现者必须添加自己的小扩展名,以便人们可以编写有用的程序。在这里,碎片化可能是一个问题。
David Thornley

@ SK-logic,PASCAL于1970年首次定义,然后出现了第一个编译器。Turbo Pascal出现了。1984年,吉姆·泰森(Jim Tyson)破产后,对JRT Pascal FAR的需求超过了他交付产品的能力。人们最初都对Turbo Pascal持怀疑态度,因为每个人都记得JRT Pascal,很多人都被它烧死了。
John R. Strohm 2012年

@ JohnR.Strohm,我一直在回答Konrad关于TP中的内联汇编程序的评论。
2012年

23

尽管这不是唯一的用途,但Pascal是为教编程而设计的,实际上并不用作主要语言。

Delphi和Object Pascal改变了这一点。但是那时,已经很晚了。


4
但是BASIC也不是为专业目的而设计的,但是它还活着而且充满活力
Konrad Morawski 2011年

11
@Morawski:真的吗?除了VB?

5
@Let_Me_Be我记得很多用Borland(对象)Pascal或Delphi编写的Windows应用程序。这是很多比C / C ++编写它们更容易。我认为C#和Java现在服务于该领域。
quant_dev

11
Pascal很快成为一种真正的通用语言。无需等待Delphi。我看不到如何在许多年轻人中教(或说教)编程语言如何导致其最终灭亡。恰恰相反。
Yam Marcovic

10
@Morawski今天仍在谈论和使用BASIC(嗯,VB)的唯一原因是Microsoft的第一个产品是BASIC解释器(很确定它不是编译器),并且他们一直在努力地努力。如果他们选择了Pascal,那么我们将谈论VP.Net。世界也将减少吸吮。
MetalMikester,2011年

18

我不认为C胜过Pascal。对于大多数程序员而言,Java胜过Pascal。过去使用Pascal进行编程的程序员类别现在会选择Java(或C#)来完成同一工作。那些以前用C进行编程的人对C(和C ++)一无所知。

Pascal的灭亡是恕我直言,主要是因为Borland坚持使用GUI的工作方式,而其客户却转而使用Web。Borland对于服务器端开发从来没有真正吸引人的报价。直到最近几年,由于Delphi出于所有实际目的而死亡,那些坚持使用Delphi的人才开始使用C#。我一直认为C / C ++与Pascal / Java / C#人群不同,因为C(++)的工作重点是技术/低级。


19
Borland的灭亡早于对Web开发的需求。他们的错误很简单:他们忘记了最初使他们成为领导者的原因(大众可用的廉价,快速,高效的编译器),而跳入了昂贵的公司工具(Microsoft和其他公司已经在其中取得了良好的开端)。传统人群不得不搬到其他地方。
MetalMikester 2011年

@MetalMikester,那就是那里的一些A级真理。他们在追求公司销售中的“巨额资金”的同时抛弃了小型独立开发商。不幸的是,即使有新的所有者,仍然还有一些剩余。
GrandmasterB

也就是说,他们不得不同时面对缺乏针对Web应用程序开发的好的选择(这源于长期以来对客户端/服务器的坚持,这是他们产品系列中所有内容的根源)。
jwenting 2012年

2
Java和C#具有C语法,与C非常相似,而不是Pascal。Java也面向C ++程序员。
m3th0dman

11

简而言之:C是便携式汇编程序,PASCAL是教育语言。

维基百科上的这一部分实际上涵盖了这一部分

编辑:
似乎有些人误解了我的答案。或者实际上是这个问题。
这个问题与受欢迎程度有关。而C最终比PASCAL更受欢迎的原因是,一种C语言是作为一种接近金属的便携式语言而设计和销售的,而另一种C语言是作为一种教育语言而设计和销售的,从而增强了许多安全性和清晰度。
最终,这两种语言是否都没有达到设定的目标或取得意想不到的成就甚至都没有关系。任何试图从C优于PASCAL的优势来推断流行度差异的人都是错误的。
这个问题的关键在于历史及其涉及的歇斯底里。


2
但是,即使您链接到的Wiki条目也承认这一点many major development efforts in the 1980s, such as for the Apple Lisa and Macintosh, heavily depended on Pascal (to the point where the C interface for the Macintosh operating system API had to deal in Pascal data types).
Konrad Morawski 2011年

@Morawski:尽管苹果当时可能已经进行了巨大的开发工作,并且可能已经在替代产品方面领先于其他产品,但它们的市场份额却很小。Apple或PASCAL都不坏(实际上PASCAL是我的母语,而且我仍然喜欢它)。但是两者都无法满足行业现实的需求。
back2dos

4
@ S.Lott很好,它是便携式PDP-11汇编程序。现在有什么关系?为什么我要在2011年关心PDP-11?无论如何,C都不是便携式x86汇编器。
quant_dev

1
Lisp是用于AI研究的语言,那又如何呢?
mojuba

1
@mojuba:“语言的原始目的可能相关,也可能不相关” –我完全同意这一点。我的意思是,在这种情况下,这很重要。;)
back2dos

5

在70年代到80年代初期,C编译器相对容易用于个人计算机,尽管大多数只使用C的子集(这就是为什么在较老的杂志上会看到如此多的“小巧的C”编译器广告的原因) )。过去,Pascal是一种更大,更笨拙的语言,当时只有最富有的计算机爱好者才有硬盘驱动器(而5兆的硬盘驱动器则要数百美元)。对于Apple 2(我的第一台计算机,甚至还不是“加号”),运行Pascal都需要购买一张额外的存储卡(它需要64k的RAM!)并花了几张软盘来加载,而“ Tiny C”编译器仅安装在一张软盘上(可能需要16k RAM)。

Pascal在计算机科学课程中任教,而C大部分是自学的(有时在电气工程课程中任教)。帕斯卡尔(Pascal)以其“束缚和纪律性语言”而在牛仔编码人员中享有盛誉,我认为这是不应该的,因为他们从未见过ADA

80年代Pascal的主要驱动力是Apple(因为API使用了Pascal调用标准)和Borland。Borland的“ Turbo”编译器可能是市场上可用的最佳编译器,并且“像书”许可使它们比具有更恶意许可的公司更受欢迎。

当微软雇用了他们的主要开发人员和项目经理(例如Hejlsberg,Gross和其他35个以上的人员),最终开发了.NET和Visual Studio时,Borland在开发市场上失去了领先地位。几年后,Borland和Microsoft解决了诉讼,但Borland从未从损失中恢复过来。在我看来,Delphi那时就开始枯萎(因为将精力和精力集中在那些人身上),而CEO的更换同时又使Borland从编译器公司转变为ALM(应用程序生命周期管理)公司。 ,几年后将其名称更改为Inprise。现在,Borland的骨灰归Micro Focus所有。


微焦点?什么时候发生的?我以为,至少在过去几年中,它属于Embarcadero(无论他们是谁)所有。如果Delphi的公司
因其

@ Steve314,该“CodeGear的”师被出售给Embarcadero公司于2008年,微距对焦买Borland公司的其余部分在2009年en.wikipedia.org/wiki/Borland#Later_Borland_years
Tangurena

1
好的,但是Borland开发了编译器,库和IDE(Delphi,Builders),并且开发了一些没人关心的东西。您是在告诉我有人在乎什么等等来火化吗?
2011年

5

神圣的烟气是一派胡闹,从这个站点开始的所有人中都有以Delphi为他们最喜欢的语言的人吗?

几乎每个人都提到了Borland,2/3的人认为Delphi发挥了作用。好吧,对不起大家,几年前,Embarcadero收购了Borland的CodeGear部门(是为了金钱,而不是慈善事业),他们一直在做一些非常了不起的事情,将一些非常令人惊奇的工具合并到了他们非常令人惊奇的IDE中,并创建了一个非常令人惊奇的平台用于对象跨平台的跨平台开发。更不用说在开源方面的Lazarus和FreePascal了。

因此,如果这是一个历史性的问题,为什么C胜过Pascal,那么好吧,这是一个可以接受的主张。但是Object Pascal中代码的编写量一直在增长,我不知道TIOBE索引对它有很大的意义,但是应该清楚的是,每当Embarcadero发布新工具时,人们仍然在用Object Pascal编写代码,并且兴趣激增,因此,对编写新的(而不只是维护旧的)代码感兴趣的实际人员对Delphi感兴趣。

我不确定您是否可以针对与C相关的任何事情说同样的话。


3
应该死了 唯一还有理由使用它的人就是像我这样的人,由于很多现有的VCL应用程序而坚持使用它。在过去的5年中,整个Delphi / C ++ Builder IDE已从最先进的状态逐渐发展成为一团糟,马车烂摊子。帮助文件和文档不存在。调试器令人尴尬。如果将IDE放在一边,除非您需要向后兼容,否则实际上没有理由在C ++上使用Object Pascal版本。在这种情况下,C ++的主要优点是它允许您移植代码以逃避糟糕的IDE。

1
关于C,首先,它是整个嵌入式领域中完全占主导地位的语言,并且所有新工具都为C 编写。整个Windows Linux都是C。所有智能手机绒毛都是用C绒毛编写的。在使用编程的几乎每个应用程序领域,C或C ++都占主导地位。C ++标准正在进行重大更新。C和C ++的新安全MISRA子集已成功应用于嵌入式应用程序,前者已成为行业实际标准。因此,没有……没有兴趣突增,有持续不断的兴趣。

2
@Lundin,您在开玩笑,过去四年来我一直在使用Delphi 7,最终更新到2009年,并且也在XE2中工作。最后,我不需要每5或6个构建就重新启动一次IDE即可保留断点。此外,Embarcadero创建了一种将Delphi Code用于Android和iOS程序的方法,该方法虽然很新颖,但是却很酷,其优点是它完全由一家私人公司管理,因此改进实际上使其进入了开发人员的手中。 。
彼得·特纳

1
尽管我并不是真正的PC程序员,但自90年代中期以来,我一直在使用Builder。直到进入Codegear的某个地方,它一直在稳步改善,然后显然出现了故障,因为现在的情况比十年前更糟。无论如何,这是不合时宜的,因为在Codegear / Embarcadero惨败之前,Delphi / Builder早就消失了。

1

我的看法是,Microsoft和Sun / Oracle等最大的软件公司以及各种开发堆栈都采用了C及其衍生的主要语言C ++,Java和C#。结果,它成为Windows,Apple OS和Unix的“母语”。

尽管Borland做出了最大的努力,而且常常被误导,但Pascal并没有达到那样的市场渗透率。


3
这似乎引出了一个问题:为什么C接管了大公司?MacOS从Pascal开始,并变得对C语言更加友好。是什么原因呢?
David Thornley

1
@DavidThornley-我认为这很大程度上与雇用顶尖的经验丰富的程序员有关。从1980年代中期开始,C语言与汇编语言融为一体,成为主流PC应用程序的首选语言。通过采用C库,它使雇用熟练的程序员变得容易又便宜(无需再培训等)。
jfrankcarr 2011年

3
但是您只是将问题推回了一层。为什么顶尖的经验丰富的程序员会转换呢?为什么选择C语言?克努斯(Knuth)在帕斯卡(Pascal)做过第一批识字编程程序,然后又改用C语言。为什么?确切找出导致转换的人员可能会很有用,但问题是有原因的。
David Thornley

我在80年代曾在两家软件公司工作,不是程序员,而是支持人员。根据我的回忆,我怀疑对于那些已经深入MASM编程的人来说,从MASM到C的过渡会更容易。我记得我不喜欢Turbo Pascal,我与之合作的程序员称之为玩具语言,而您不想让他们开始使用QuickBasic。由于同伴的压力,我首先学习了MASM和C。这也可能是一个因素,尽管并没有真正的起源。
jfrankcarr 2011年

在80年代末,即90年代末,C已经非常流行。您可以在任何UNIX实现中找到作为标准模块的编译器(而UNIX是大多数程序员都想使用的操作系统)。我并不是说它比Pascal更受欢迎,但它非常受欢迎。因此C ++,Java和C#之所以受欢迎,是因为C曾经是C,而不是相反。
Giorgio 2013年

0

Pascal仅在单个相当有限的PC / DOS环境中流行。

即使在那时,在PC上运行的MicroFocus COBOL应用程序与pascal应用程序一样多。

C是UNIX操作系统和所有MS / Windows操作系统的基础。

在有限的硬件上高效执行以及对底层OS和GUI库的本地访问的结合可能是C成功的主要原因。Pascal从未真正在Windows上破解过它,而Delphi来得太迟了,无法有所作为。


我认为您的评论“ ..和所有MS / Windows操作系统”可能实际上是错误的。Windows最初是在PASCAL中设计和编码的。来自en.wikipedia.org/wiki/Talk:X86_calling_conventions:“只是想在这里进行介绍。我在《 Watcom C / C ++用户指南》中查询了__pascal关键字,并且很明显:__pascal调用约定用于OS / 2 1.x和Microsoft Windows 3.x API“
John R. Strohm 2013年

@ JohnR.Strohm调用约定和实现语言不一定是相同的。微软可能已经在1993年使用C了一段时间(Windows 3.1在1992年发布)。一种来源
CVn

IIRC在80年代初,Microsoft在内部大量使用Xenix,并且很可能以这种方式开始使用C。那就是(涡轮增压)帕斯卡毕竟是危险竞争对手博兰德的杀手product。当时微软与其他大型软件公司(例如Lotus,Borland)之间的规模差异还不是很大。
wazoox 2014年
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.