命令式和声明式编程语言之间的区别?

问题描述:

我知道他们是什么:命令式和声明式编程语言之间的区别?

在命令式编程语言,你告诉你希望发生的事情一步步什么编译器,而在说明性语言编写,它描述了结果代码,但不一定如何实现期望的结果。

但是,我不想知道使用任何一种编程语言的优化。除此之外 - 是否有任何并发​​症?例如,需要空间/时间来运行以任一种语言开发的程序。

+1

我想说这个问题的答案会占用一整本书,或者几个。 – biziclop

+0

@biziclop我只需要一些小例子来帮助将整个想法包围在我的头上.haha – madcrazydrumma

+0

您需要缩小它,无论是在语言方面还是在问题方面,最好是两者。 – biziclop

The 性能对比部分Comparison of programming paradigms WikiPedia页面几乎涵盖了您所要求的一般方法。

纯粹在总指示路径长度而言,程序在 编码势在必行的风格,而无需使用任何子程序可言,将具有 最低计数。然而,这样的程序的二进制大小可能大于使用子程序编码的相同程序(如功能 和程序编程)并且会引用更多“非本地” 物理指令,这些物理指令可能增加缓存未命中并增加 指令在现代处理器中获取开销。

该广泛使用的子程序的范例(包括功能, 程序和面向对象),并且不同时使用显著 内联(通过编译器优化)将,因此,使用总资源的 更大百分比的子程序的联系 自己。面向对象的程序不会直接改变 程序状态,而是使用增变器方法(或“setters”) 来封装这些状态改变,直接的结果是, 会有更大的开销。这是因为消息传递 本质上是一个子例程调用,但是还有三个额外的开销:动态内存分配,参数复制和动态调度。从堆中获取内存并复制消息传递的参数可能涉及远远超过状态更改本身所需的大量资源。仅仅返回私有成员变量的值的访问器(或“获取器”) 在类似的消息传递子例程上也取决于 ,而不是使用更多的 直接分配(或比较),增加到总路径长度。

......如此下去

+0

而且在所有情况下都不是这样。 – biziclop

+0

@biziclop总体来说它不适用于哪种情况? – madcrazydrumma

+1

@madcrazydrumma这就是我想说的:没有“一般”,这两种语言家族太多元化了,无法在这个层面上得出任何有意义和普遍的差异。这完全取决于具体的语言和具体的环境。 (例如,大多数现代Java虚拟机**都会使用广泛的内联,这使得很多这个段落在Java的情况下大多不相关。但是你可能会在JIT编译更好或者不存在的平台上编写代码。) – biziclop