计算机语言c是什么,C是命令式还是陈述式编程语言

买者

我有很多泛泛的写,所以请多多包涵。

理论上

C是势在必行,因为代码读取像如何做一个配方。但是,如果您为多态使用了许多有名的函数和函数指针,那么可以使C代码看起来像声明式语言。

在命令式语言中,您将重点放在算法/实现上。工程本质上是必要的,因为你专注于一个过程的效率:在时间或金钱(或CS中的内存)方面所需要的成本。

相反,数学通常为声明(但写证明更趋于势在必行)。在数学中,你更关心正确性和定义不变的关系/操作,而不是你多快得到答案。

请注意,许多功能语言本质上倾向于是声明性的(例如R,Lisp)。

z = x + y是什么意思? (语义)

在势在必行语言,它从存储器位置x和y读出装置,添加这些值加在一起,并把结果存入存储器位置z和现在就做。如果为x指定了不同的值,则必须再次使用z = x + y语句来重新计算z。

在声明式(惰性)语言中,它表示z是一个变量,其值是另外两个变量x和y的值的总和。直到您尝试读取z的值时才会执行加法操作。这意味着什么?如果你从z中读取,那么这个值总是在那个时刻x和y的总和;你不需要重新发表声明。在纯声明性语言中没有变量,重发可以实际上被捕获为一个错误!

记住这个例子,你会明白为什么数学家倾向于更喜欢声明式语言。例如,我可以定义斜边= sqrt(高度^ 2 +长度^ 2),从不担心必须重新发布该声明。这种关系是永恒不变的,就像数学真理一样。

在现实生活中(和我为什么要在乎?)的声明性语言要求

支持者:一个有效的解决方案,是错误的(越野车)是没用的。他们希望无bug的无状态函数没有副作用,可以不加修改地重复使用。的命令式语言

支持者要求:正确的解决方案,需要永远跑也没用。他们想要控制内存/速度的权衡。他们希望能够根据物理和时间限制进行​​优化。

当然,没有什么是100%强制性的或声明性的。 命令性的正确且写得很好的代码暗示了某些关系。 OTOH,声明性的代码,足够深入并且与语言规范一起,描述了足够好的编译器/解释器将这些关系转换为一系列CPU指令的代码。

因为我们正在处理计算机,所以编译器/解释器必须足够聪明,以便在时间和内存之间进行权衡,而在命令式语言中,则需要程序员更明确地做出这些决定。

所以a 声明式语言要求程序员专注于定义变量和其他不变量之间的关系。编译器/解释器可以将这些关系转换为CPU的一系列指令/操作。大多数声明性编译器/解释器都足够聪明,可以处理大多数现实世界的情况,但在边缘情况下可能会遇到问题。不幸的是,在这些情况下,你将不得不哄编译器/解释器。

哪一个更好?

支持者陈述式声明这样的语言声称这样的语言允许程序员专注于域并且编写对非程序员来说更容易读取的代码。要求正确的代码比较容易,声称拥护者。然而,权衡是哄骗编译器/解释器来做出正确的内存与速度权衡可能需要一些复杂的语言知识。如果您使用像R或SQL或LISP这样的声明性语言,您会理解这个问题。定义一种与计算机无关的新声明性语言当然是可能的(但这样做可能会使解释器/编译器的编写者更难)。许多数学家和纯粹的CS研究人员喜欢声明式语言。

命令式语言倾向于给你机器上更细粒度的控制权。毫无疑问,你正在编写一台计算机。陷阱是,我们最终可能会过早地关注不必要的速度优化,这会损害代码维护和可读性。在计算初期,速度或内存严重受限,您需要使用命令式语言来完成有用的工作,并根据您的情况正确进行优化。工程师和修理工倾向于使用命令式语言。

你可能感兴趣的:(计算机语言c是什么)