为什么几种流行的编程语言会受到C的影响?[关闭]


23

根据TIOBE索引,排名前10位的编程语言似乎受C的影响很大:

1. Java

该语言的大部分语法源自C和C ++,但具有更简单的对象模型和更少的低级功能。- wikipedia.org

2. C

C是有史以来使用最广泛的编程语言之一,很少有计算机体系结构不存在C编译器。- wikipedia.org

3. C#

在.NET Framework的开发过程中,类库最初是使用称为简单托管C(SMC)的托管代码编译器系统编写的。1999年1月,安德斯·海斯伯格(Anders Hejlsberg)组建了一个团队,以建立当时称为Cool的新语言,该语言代表“类似C的面向对象语言”。- wikipedia.org

4. C ++

它由Bjarne Stroustrup于1979年在贝尔实验室开始开发,是对C语言的增强。- wikipedia.org

5. Objective-C

Objective-C是一种反射式的,面向对象的编程语言,它将Smalltalk样式的消息传递添加到C编程语言中。- wikipedia.org

6. PHP

他将这些脚本重写为C编程语言通用网关接口(CGI)二进制文件,对其进行了扩展以增加使用Web表单以及与数据库进行通信的能力,并将其称为“个人主页/表单解释器”或PHP / FI。- wikipedia.org

8. Python

Python是在1980年代后期构思的,它的实现是1989年12月由荷兰CWI的Guido van Rossum开始的,它是ABC编程语言(其本身受SETL启发)的继承者,该语言能够进行异常处理并与Amoeba操作系统进行接口。- wikipedia.org

ABC(编程语言)它的设计师声称ABC程序通常大约是等效Pascal或C程序的四分之一,并且更具可读性。- wikipedia.org

9. Perl

Perl借鉴了其他编程语言的功能,包括C,shell脚本(sh),AWK和sed。- wikipedia.org

10. JavaScript

JavaScript使用受C语言影响的语法-wikipedia.org

看来大多数人都从C借用了他们的语法和/或至少在开始时就受到了其他几种方式的严重影响。为什么?


15
具有类似c的语法与基于c的语法不同。
奥德

15
另外,TIOBE是一个垃圾索引。
DeadMG

3
相反,我能问为什么基于C的编程语言更流行吗?
Manoj R

3
@YannisRizos挽救了这个问题!现在,这实际上是一个很大的问题。
maple_shaft

16
因为C是ALGOL的后代,而ALGOL则是对命令式的隐喻进行了概括,亚伯拉罕对基督徒,犹太人和穆斯林是什么。
Ingo 2012年

Answers:


40

随着1970年代UNIX的兴起,其标准系统编程语言C迅速成为编程世界的通用语言。在相当长的一段时间内,C实际上对于每个程序员都是必需的。因此,C几乎以一种或另一种方式影响了其之后的每种编程语言,这一事实不足为奇,原因有二:

  • 在设计新语言时,在可能的情况下,将其语法基于可以被假定为常识的流行现有语言是有意义的。
  • 如果学习曲线浅,那么一种新语言更可能成功,并且类似于一种已知语言的语法通常更容易学习(除非在外观上有相似之处,除非表现出根本不同)。因此,从C语言中借用语法的语言通常比没有语法的语言获得牵引力更快。

但是还存在其他语言,并且它们仍然可以使用,其中有些甚至比C还要早-有LISP家族(CL,Clojure和Scheme是最受欢迎的现代方言),ML家族(有几种现代方言),还有一支由BASIC方言(VB.NET和VBA是现代实现),有Pascal及其亲戚(Delphi是最著名的一种)和许多“奇数”语言,它们受到了许多其他语言的影响,并且自己发明了一些东西。示例包括Go,Python,Lua,Haskell(及其前身Miranda),Prolog和Erlang。尽管这些语言(除Python外)均不在前10名之列,但其中许多语言都有稳定的用户群和活跃的社区。他们当然不会消失。

另外,应注意的是,这些语言对C的影响程度差异很大,从几乎100%与C兼容的语言C ++和Objective-C到Python(故意放弃许多C的语法功能)。这只是语法:就语义而言,该列表上的大多数语言与C并没有太多共同点。绝大多数语言都内置了内存管理功能,因此具有复制语义,参数传递等功能。 ,有很大的不同。例如,JavaScript受到Scheme的强烈语义影响,而其语法被设计为类似于Java(反过来,其点滴语法基于C而不是语义)。其他差异(C ++和Objective-C除外,它们大多与C向后兼容)包括错误处理,范围规则,#include),以及许多这些语言是“虚拟化”的事实,也就是说,它们在解释器,JIT编译器或虚拟机上运行。

顺便说一句,Python确实具有C的影响力,但是它肯定不是“基于” C的。语法和语义与C都有很大的不同,这是设计使然。Python仅从C借用了其他替代品同样“良好”的功能(如“ Zen of Python”- import this在python解释器中键入)。

至于编程的未来;预测各不相同。C的影响不会消失,但是硬件的最新发展(多核计算机变得司空见惯,功能强大的GPU,CPU不再是典型的性能瓶颈,快速可靠的网络连接等)要求采用完全不同的编程方法一般来说。曾经用命令式语言编写过多线程分布式应用程序的任何人都可以知道,这非常困难,而Haskell这样的语言具有可以消除大多数典型问题并为分布式,并发和并行处理提供更抽象和结构化方法的功能。 (在此情况下,纯度是一个重要的概念)。较新的编程语言(例如C#或D)已经包含许多支持这种习语的功能。任何状况之下,


好的答案,但是“ CPU不再是典型的性能瓶颈”?以我的经验,性能问题比比皆是-CPU,IO,随便问一下。如果不是这样,即使它们不是很有效,也不需要分析器。
Mike Dunlavey '02

6
@MikeDunlavey:通常,我遇到的瓶颈是由I / O,网络,CPU缓存性能,总线吞吐量和(低效的)进程间通信引起的。过去,CPU几乎不可避免地是瓶颈。这不再是真的了。
tdammers

1

这就像在问为什么英语在美国占主导地位。为什么不使用西班牙语或法语?他们控制着美国领土,而不是英国殖民地。为什么不荷兰语?美国的第一个首都在前荷兰殖民地。我不确定是否可能对此有一个“答案”。

但是,“计算机语言历史记录”时间轴(http://www.levenez.com/lang/)提供了所有可能的答案。


6
因为从1600年至1880年的英国大致是世界上主要的工业和金融强国,其次是从1880年至今的美国(<有争议的)。它成为国际商务的语言,全球超过20亿人能说流利的语言。那并且没人愿意说西班牙语或荷兰语:)
maple_shaft

6
@maple_shaft-“没人想说西班牙语”吗?...您甚至知道在多少个国家/地区使用该语言?en.wikipedia.org/wiki/Spanish_language
Rook

12
@ S.Lott:您的意思是大英帝国是有史以来最大的帝国,占据了整个世界的25%?那种“不强大”?
DeadMG

3
@DeadMG:我不是在谈论世界。我说的是1700年代的美国,当时法国人将英国人卷入了沿海的一小片土地。我说的只是英国人在这个战场上失去军事参与。法国人显然控制了他成为美国人的大部分。然而。美国结束讲英语。不是法语。相同的分析也适用于C。这是一个具有许多影响因素的复杂历史。没有微不足道的轻拍答案。
S.Lott 2012年

4
@ S.Lott法国人没有赢得每一次相遇。只看北美,他们就赢得了多数。但是在1559/60年间在北美地区的5场主要战役中输掉4场,导致剧院惨败。夺取提康德罗加堡和尼亚加拉要塞,亚伯拉罕平原和雷斯蒂古奇战役都是英国人的胜利。通过切断供应/增援,后者使法国在圣弗伊的胜利无关紧要。
Dan Neely'2

0

如果您使用的是新的编程语言,则其语法与现有的流行语言相似,从而使新用户的学习更加轻松。尤其是在语言之间有很多概念相似的情况下。

我也认为C风格的语法相对容易阅读。为了与Pascal进行比较,对代码块使用符号“ {”和“}”比“ begin”和“ end”(它们在光学上与标识符非常相似)更易读。Python更加清晰易懂,但是在语法中包含空格会带来一系列新的编辑问题。另一个例子:Lisp和JavaScript有一些共同点,但是用C风格的语法编写相同的东西时,它就不太模糊了。

我敢肯定,很多人会不同意第二段,因为每个人都有自己喜欢的语言,但是我认为C样式语法的流行在一定程度上是历史上的巧合,但在某种程度上也表明C的作者取得了一些成就。决定。


-1

编程语言会像自然语言一样随着时间的流逝而发展,某些较旧的语言以比其他语言更强的方式影响这种进化,而另一些则逐渐变得晦涩难懂,其影响很难从表面上(即语法)进行追溯。

C的影响力来自许多方面-它的水平低,分布广泛,在Unix和Microsoft圈子中都有支持。这也是最适度问题的生存之道-与1970年代和1980年代Pascal以及C的其他竞争对手的冗长的Algol派生语法相比,类似C的简洁语法更具吸引力。因此,它被后来的语言广泛采用。

当前,随着多线程编程和功能语言的重要性日益增长,特别适合它,我想我们将在未来看到它们的影响力增长。恰当的例子:Python,甚至在问题帖子中列出了该列表。

值得思考的一个不错的语言历史时间表视图


你理解错了。PASCAL和C都是ALGOL的后代。
Ingo 2012年

的确如此,但是Algol本身是Fortran的后代,并选择了我在那儿所指的一些构造(程序,结尾,子例程与c的括号相比)。尽管如此,我想到的实际上是类似Algol的语法。编辑。
scrwtp 2012年

类似于C的简洁语法比Pascal和C的其他竞争对手在70年代和80年代 +1的冗长的Algol派生语法更具吸引力开始,程序员也是人最终 开始 那些谁相信它的方便映射标点符号单词开始喜欢高端失去了战斗的大括号故事的结尾
蚊蚋

除了大多数开发人员都知道C或某种与C相关的语言之外,我看不出C语法不太模糊的证据,因此看起来更加熟悉。AFAICT的C架构赢得了Pascal的青睐,而且C的实现无需滚动自己的链接,而无需语法。
David Thornley,2012年

@ David-据我所记得,C之所以胜过其他语言,原因之一是因为访问C中的内存(即指针)相对容易。我知道它们现在已经被淘汰了,但是当1 KB RAM占用大量内存时,那是该语言的一项非常强大的功能。我知道提供的指针一样功能的其他语言,但没有一样容易C.
扣篮

-3

除了不相关的语法相似性外,您列出的大多数语言实际上与C无关。仅有的两个实际C派生对象是Objective-C和C ++。


如果我们不考虑语法,那么任何语言之间的唯一区别就是通用语言结构(循环,条件,变量,此类的抽象,例如类和闭包等)的可用性,并且它们都等同于机器的行为。码。在这一点上,所有低级语言都彼此相似,而所有高级语言都极其相似。
maple_shaft

2
您不应该将语言视为具有什么功能,而应该将其如何传达应用程序行为。源代码是文档的最低级别,并且是为人不是机器编写源代码。如果我们严格地为机器编写代码,那么我们所有人都将在汇编中进行编码。
maple_shaft

1
@maple_shaft:完全正确!我在一次采访中被要求解释机器语言(汇编器)和编程语言之间的区别。我的回答是:“机器语言用于机器,编程语言用于程序员。”
Treb '02

1
@maple_shaft:语法与人与人之间的交流无关。如果我将英语单词替换为不同的拼写,英语仍然是相同的语言。句法形式是无关紧要的,可传达的是语言语义。
DeadMG

3
@DeadMG:但问题是关于语法。您可以认为语法相似性是无关紧要的,但是提出问题的人想知道为什么这些无关紧要的相似性存在
Nicol Bolas 2012年
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.