我知道它们是什么:
在命令式编程语言中,您逐步告诉编译器您想要发生什么,而在声明性语言中,您编写描述结果但不一定如何实现所需结果的代码。
但是,我不知道使用任何一种编程语言的优化。除此之外 - 是否有任何并发症?例如,运行以任何一种语言开发的程序时需要空间/时间。
我知道它们是什么:
在命令式编程语言中,您逐步告诉编译器您想要发生什么,而在声明性语言中,您编写描述结果但不一定如何实现所需结果的代码。
但是,我不知道使用任何一种编程语言的优化。除此之外 - 是否有任何并发症?例如,运行以任何一种语言开发的程序时需要空间/时间。
编程范例比较维基百科页面的性能比较部分几乎涵盖了您以一般方式提出的问题。
纯粹就总指令路径长度而言,以命令式编码的程序,根本不使用任何子例程,计数最少。然而,这样一个程序的二进制大小可能比使用子程序编码的相同程序(如在函数式和过程式编程中)更大,并且会引用更多的“非本地”物理指令,这可能会增加缓存未命中并增加现代指令获取开销处理器。
因此,广泛使用子例程(包括函数式、过程式和面向对象)并且不使用显着内联(通过编译器优化)的范例将在子例程链接本身上使用更大比例的总资源。不故意直接改变程序状态的面向对象程序,而是使用 mutator 方法(或“setter”)来封装这些状态更改,作为直接结果,将具有更大的开销。这是因为消息传递本质上是一个子程序调用,但多了三个额外的开销:动态内存分配、参数复制和动态分派。从堆中获取内存并复制用于消息传递的参数可能涉及大量资源,远远超过状态更改本身所需的资源。仅返回私有成员变量值的访问器(或“getter”)也依赖于类似的消息传递子例程,而不是使用更直接的赋值(或比较),从而增加总路径长度。
......它继续