2012-03-23 172 views
6

我明白綁定類型的含義。如果我錯了,請糾正我 -靜態類型綁定與動態類型綁定

類型綁定是將聲明的變量'關聯'到特定類型的過程
(由編譯器完成)。

類型的結合可以被歸類爲 -
靜態類型的結合
動態類型的結合

靜態類型的結合可以通過兩種類型的聲明來實現 -

http://sankofa.loc.edu/CHU/WEB/Courses/Cosi350/Ch4/bound.2.gif

及其清晰直到這裏。
但是現在什麼是動態類型綁定? (不是定義),我知道這意味着一個變量與在運行時一個「類型」相關聯,

http://sankofa.loc.edu/CHU/WEB/Courses/Cosi350/Ch4/bound.3.gif

關於它的更多信息,例如 -

  1. 爲什麼動態類型綁定?
  2. 在哪些編程語言可用作功能?
  3. 靜態類型綁定有哪些優點和缺點?

通過賦值語句

指定你可以給它的更多信息。是否應僅在賦值語句中指定?

+1

這些幻燈片很糟糕。他們將隱式/顯式聲明與隱式/顯式類型混淆。您可以使用隱式(靜態)類型進行顯式聲明 - 例如大多數類型化的功能語言都具有完整的類型推斷。另外,靜態類型爲表達式分配類型,而不僅僅是變量。 (術語「類型綁定」也非常不標準。) – 2012-03-23 14:43:41

+0

@AndreasRossberg這些幻燈片是Robert Sebesta編寫的「編程語言概念」的支持筆記。 – jsp99 2012-03-24 04:36:35

+0

只是添加,碰到[this](https://cseweb.ucsd.edu/classes/sp05/cse130/lecture_notes/types_student.txt)這對我很有幫助! – Kulasangar 2017-09-19 20:14:57

回答

16

我將盡力爲您解答:

首先最簡單的在其編程語言是它可以作爲一個功能?

PHP,Python和Ruby,Perl和JavaScript的...

「什麼是動態類型的結合?」

使用此方法綁定變量類型(如PHP,Python,Ruby等)的編程語言通常是解釋性語言。所以,他們沒有編譯器。在這些語言中,你沒有指定變量類型,也沒有關於這個的隱含規則,所以在運行類型之前發現一個變量類型是「不可能的」。

爲什麼使用動態類型綁定?

要回答這個問題,我必須談談這種方法的一些優點。選擇使用動態類型綁定是關於您的語言設計的決定。所以,取決於你想要什麼樣的語言以及它將被使用的情況。

優勢

  • 更容易編寫通用代碼。

例如:考慮構建一個通用數據結構,例如Stack。你想用它來保存使用不同棧的所有類型的變量,例如,用於int的棧,用於字符串的另一個等等。要在具有靜態類型綁定的**編程語言上做到這一點,這更加困難。

在C語言中,例如,你有兩個選擇:

  • 寫一個堆棧要使用不斷堆棧
  • 建立一個堆棧,保持(void *的),換句話說,每個類型,指向任何東西

如果您嘗試在Python中執行此操作,則只能一次編寫代碼。這門語言爲你付出了艱辛的努力。

您可以爭論Java和其他語言,但是您必須記住,動態類型綁定的概念早於面向對象編程,因此當時沒有多態性。

缺點

  • 成本高,檢查型和解釋

執行使用編譯生成的二進制文件的程序比解釋上述運行相同程序的速度更快更多。第二件事是,當您使用靜態類型的結合,「基本上,綁定過程與動態類結合做到了這一次,在執行之前。在另一方面,在語言,結合過程是O每項任務完成。每個變量的操作

其它最小缺點是對一些誤差修改一個編譯器能找到,但使用動態類結合解釋不能

例如:你可以改變你的變量的類型儘可能多的時間,你需要在執行時間,真的可能會造成混亂,如將int的變量更改爲字符串,和一些點之後,嘗試調用接收int的函數,然後使用現在是字符串的變量調用此函數。

這是一個小問題,因爲一個經驗豐富的開發人員永遠不會這樣做,但仍然有可能,並且在的語言中,靜態類型綁定不是。

你要記住,我們正在談論的概念,而這些概念的實現與計算機科學的不斷髮展起來,所以可能是一些優勢/劣勢可如今最小的。