静态编程语言和动态编程语言的区别

63

静态动态编程语言有什么区别?我知道这与类型系统有关,但我正在寻找更清晰的解释。


see also - Bn.F76
1
你能把你的问题改成“静态类型和动态类型编程语言的区别”吗?实际上,静态和动态编程语言有一个与类型检查无关的定义。 - Hamish Willee
6个回答

88

静态类型

静态类型意味着在运行程序之前已经确定并检查了类型的正确性。这通常由语言的编译器完成。例如,以下Java方法将会在运行程序之前引起编译错误:

public void foo() {
    int x = 5;
    boolean b = x;
}

动态类型

动态类型意味着类型只有在程序运行时才能确定。例如,以下Python(版本3)脚本可以顺利运行:

def erroneous():
    s = 'cat' - 1

print('hi!')

它确实会输出hi!。 但是如果我们调用erroneous

def erroneous():
    s = 'cat' - 1

erroneous()
print('hi!')

当调用erroneous时,将在运行时引发TypeError


6
静态和动态的区别在于,在运行程序之前,如果检查和验证每个变量的数据类型,则它是静态类型编程语言(例如:对于C++,这是由编译器完成的)。在动态编程语言中,在运行时,如果存在无效分配违反其数据类型的变量,则会为其提供错误。摘要- 静态类型语言在运行程序之前检查任何违规行为,而在动态类型语言中,当程序正在运行并进入已发生违规的部分时,会出现错误提示。

-3
  • 静态语言是一种像动态语言一样工作但需要更少的代码编写工作量的语言。

  • 在静态语言中,相比于动态语言,我们需要编写较少的代码。

主要观点是:

  • 在静态语言中,我们可以编写和使用变量而无需声明它们:
# Example in Python
i = 12
print(i)

在动态语言中,如果我们必须使用变量,我们必须声明它:
// Example in C
int i;
int i = 21;
printf(i);

JavaScript呢?有var i = 21; i = 'X' - fcdt
难道不是相反的吗? - Alberto Salvia Novella

-4

结构

静态变量具有不可变类型,事先决定。只能在转换后进行操作。

int number = 1
string name = "joe"
string output = string(number) + name // = 1joe

动态变量的类型会自动确定。它们可以随时进行操作,因为它们会根据需要进行转换:

number = 1
name = "joe"
output = number + name // = 1joe

优点

使用动态变量进行编程更加简单、快速和清晰

然而,所有类型猜测都需要CPU功率,并且往往比较

因此,在两者之间的选择取决于您的设备有多么需要CPU资源。


有几个问题。1)OP的原始问题混淆了“静态与动态编程语言”和“静态与动态类型”,这是两个完全不同的概念。2)采用“静态类型”有很多原因,包括防止运行时错误(“可靠性”)。 “性能”并不一定是最重要的因素,“额外的CPU利用率”是“性能”的微不足道的方面。请考虑删除此回复。 - paulsm4
当代码清晰、简洁且经过测试时,我从未发现错误检测机制能够提供实质性的好处。此外,这些潜在的好处更可能归因于代码被编译而不是解释。另一方面,静态类型允许更好地优化编译和数据结构,因为类型比它们能够是任何东西和任何大小在内存中更可预测。这种更简单的情况使得代码更容易被编译。 - Alberto Salvia Novella

-4
如果任何编程语言允许在编译时进行内存分配,则该编程语言被称为静态编程语言。 例如:C、C++等。
如果任何编程语言允许在运行时进行内存分配,则该编程语言被称为动态编程语言。 例如:Java、Python等。

这个定义是不正确的:C和C++也允许使用malloc在运行时进行内存分配。 - Anderson Green

-4

所有编程语言都是为了将人类可读的代码转换成机器指令而设计的。动态语言(如Lisp、Perl、Python、Ruby)旨在优化程序员的效率,使您可以用更少的代码实现功能。静态语言(如C、C++等)旨在优化硬件效率,以便您编写的代码尽可能快地执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接