簡體   English   中英

靜態和動態編程語言之間的區別

[英]Difference between static and dynamic programming languages

靜態和動態編程語言有什么區別? 我知道這都是關於類型系統的,但我正在尋找更明確的說明。

靜態打字

靜態類型意味着在運行程序之前已知類型並檢查其正確性。 這通常由語言的編譯器完成。 例如,在運行程序之前,以下 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

靜態和動態之間的區別在於,在運行程序之前,如果每個變量的數據類型都經過檢查和驗證,那么它就是靜態類型編程語言(例如:-在 C++ 的情況下,它是由編譯器完成的)。 在運行時的動態編程語言中,如果存在違反其數據類型的變量的無效賦值,則會為此給出錯誤。

摘要 - 靜態類型語言在運行程序之前檢查任何違規,而在動態類型語言中,在程序運行時會給出錯誤並轉到已完成違規的部分。

靜態類型語言在運行程序之前檢查任何違規,而在動態類型語言中,當程序運行並且進入部件時發生錯誤已經完成。

  • 靜態語言是一種像動態語言一樣工作但工作量較少的語言,而這種工作就是編寫代碼。

  • 在靜態語言中,與動態語言相比,我們必須編寫更少的代碼。

主要觀點是:

  • 在靜態語言中,我們可以在不聲明變量的情況下編寫和使用變量:
# Example in Python
i = 12
print(i)
  • 在動態語言中,如果我們必須使用變量,我們必須聲明它:
// Example in C
int i;
int i = 21;
printf(i);

結構體

靜態變量具有預先確定的不可變類型。 它們只能在轉換后操作。

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

動態變量的類型自動決定。 它們可以隨時操作,因為它們可以根據需要進行轉換:

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

好處

使用動態變量編程更容易、更快、更清晰

然而,所有類型猜測都需要 CPU 能力,而且往往要慢幾個數量級。

因此,兩者之間的選擇取決於您的設備的 CPU 密集程度。

靜態類型語言:

  • 您需要事先聲明變量的“類型”。
 NSString *string = @"Hello"; 
  • 您不能在同名變量中保存其他類型的對象(具體或原始)
 NSString *string = @"Hello"; int string = 9; // Not legal, compile type warning 

例如靜態類型語言: Java,Objective-C等。

動態類型語言:

  • 無需聲明對象類型。 它將在運行時計算出來。

string ='你好'

  • 我們被允許更改同一變量的對象類型,因為名稱綁定到具有賦值運算符的對象。
  string = 'Hello' string = 9 // Allowed 

例如動態類型語言: Python等

所有語言都旨在將人類可讀的代碼翻譯成機器指令。 動態語言(Lisp、Perl、Python、Ruby)旨在優化程序員的效率,因此您可以用更少的代碼實現功能。 靜態語言(C、C++ 等)旨在優化硬件效率,以便您編寫的代碼盡可能快地執行。

如果任何編程語言允許在編譯時完成內存分配,則該編程語言稱為靜態編程語言。 示例:C、C++...等。

如果任何編程語言允許在運行時完成內存分配,則該編程語言稱為動態編程語言。 示例:Java、Python...等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM