首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编程语言的差异和效率,有关系吗?

编程语言的差异和效率,有关系吗?
EN

Software Engineering用户
提问于 2011-04-13 20:20:25
回答 5查看 6.1K关注 0票数 6

我对编程相当陌生,我在大学里学了3年的计算机科学,但你知道,学校仅仅是真正使一个人成为一个成熟程序员的2%。

我很难理解为什么人们说x语言比y语言更高效,我只理解在预编译和运行时编译的时候。我理解定义数据类型(如代码中的常量)肯定比让计算机/语言解决它(比如php或ruby)更快,但是当涉及到使用C或Java时,是什么使C更快呢?它们不是都将以最有效的方式被编译成机器语言吗?

在我看来,使用C或Java这样的语言的唯一区别似乎是;像java这样的高级语言更容易组织和编写/维护具有类和继承的大型应用程序。但我觉得,一旦编制好了,就真的不应该有什么区别。有人能解释一下吗?

顺便说一下,我只知道更高级的语言,如php、java、ruby、vb、c#。也许这就是我难以想象的原因?我想要探讨的下一种语言很可能是C

EN

回答 5

Software Engineering用户

发布于 2011-04-13 21:15:42

虽然性能实际上是实现而不是语言的结果,但实际上有一些更快、更慢的语言。

C通常是比较最快的。C编译器相对成熟,C程序只需要最少的运行时支持.C程序通常会被编译成可以加载和执行的程序,而计算机只需要做一点准备就可以了。(这里有C型口译员,他们的速度和你预期的一样慢。)

Fortran通常不在这些计算中,但在大多数方面是相似的。Fortran在大规模浮点计算中天生比原始标准的C更快,因为Fortran编译器可以假设,比方说,传递给乘法程序的三个矩阵是不相交的,并且可以在此基础上进行优化。C编译器不能假定这一点。

Java程序通常被编译成一种人工机器语言,而这通常是动态编译的(即实时编译)。理论上这可能比C风格的编译更快(它可以更好地猜测执行流程,并且可以根据使用中的确切系统定制编译),但实际上并非如此。Java还需要更多的运行时支持,例如垃圾收集器,JIT编译器和运行时必须加载并运行。这会增加启动时间,这是值得注意的。

Python程序通常被编译成一种人工机器语言,然后解释,这是比较慢的。可以存储已编译的文件(".pyc"),但通常只存储源代码,因此执行必须先编译,然后解释,这是缓慢的。此外,Python还具有动态类型,这意味着编译器并不能预先知道所有类型,因此Python函数必须能够在运行时接受不同的数据类型,这是效率低下的。

总是有让人惊喜的空间。在一个著名的场合,一个CMU通用Lisp程序--数字处理--破解了一个Fortran程序.常见的Lisp需要垃圾收集,这显然不是应用程序中的问题,而且通常是动态类型的,但是可以静态声明所有类型。Fortran编译器效率较低,CMU通用Lisp编译器没有,随后得到了适当的改进。

票数 8
EN

Software Engineering用户

发布于 2011-04-13 20:39:27

在您确定X语言比Y语言更有效之前,您需要知道"X比Y“以哪种方式更有效。

有些语言在运行时执行速度上更高效,有些语言在内存占用方面更高效,有些语言在类型化文本行中更有效。有可能是你关心的效率和你不太关心的效率。针对那些你所关心的有效率的语言。

记住,语言就像一种工具,你的注意力不应该放在工具的效率上,而应该放在选择合适的工具上。钉枪比手握锤子更有效地建造房子的框架。钉枪比手持式锤子挂一个画框的效率低得多。为作业选择合适的工具。

票数 4
EN

Software Engineering用户

发布于 2011-04-13 20:38:37

首先,没有。无所谓。您并不是在为严重受限的环境编写代码,因此您应该使用高级语言编写代码,并按照分析器的指示进行优化(包括编写奇怪的C模块)。

其次,由于Java实际上不是一个正常意义上的编译语言,所以它与C的比较很差。一个更合适的比较应该是与另一种编译语言进行比较,比如C++、Ada、D、Go,甚至是OCaml。

您关于高级编译语言能够像低级编译语言一样快速的结论是正确的,也是错误的。在限制条件下,可以优化代码以尽可能快地完成任务。然而,足够聪明的编译器是一个神话。人类可读的代码和机器代码之间的抽象层越少,翻译就越直接.这意味着编译器不必那么聪明,这意味着他们可以做得更好。

这并不是说用C编写的程序比用更高级语言编写的程序更快。使用高级语言特性的好处在于,其他人(通常更聪明)已经考虑过如何优化您所做的工作。因此,例如,在Python上调用Python的内置sort函数将比在C中实现冒泡排序更好。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/67945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档