[英]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.