3 回答

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
靜態(tài)/動態(tài)打字為約當(dāng)類型信息被獲?。o論是在編譯時(shí)或在運(yùn)行時(shí))
強(qiáng)/弱鍵入是關(guān)于如何嚴(yán)格區(qū)分類型(例如,語言是否嘗試進(jìn)行從字符串到數(shù)字的隱式轉(zhuǎn)換

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
您已經(jīng)發(fā)現(xiàn)業(yè)余愛好者用來談?wù)摼幊陶Z言的術(shù)語上的薄弱之處。 請勿使用“強(qiáng)”和“弱”類型的術(shù)語,因?yàn)樗鼈冊诩夹g(shù)含義上尚未達(dá)成共識。相比之下,靜態(tài)類型化意味著在執(zhí)行程序之前先檢查程序,然后在啟動程序之前將其拒絕。 動態(tài)類型化意味著在執(zhí)行過程中會檢查值的類型,而類型錯(cuò)誤的操作可能會導(dǎo)致程序停止運(yùn)行或在運(yùn)行時(shí)發(fā)出錯(cuò)誤信號。靜態(tài)類型化的主要原因是要排除可能具有此類“動態(tài)類型錯(cuò)誤”的程序。
強(qiáng)類型通常意味著類型系統(tǒng)中沒有漏洞,而弱類型意味著類型系統(tǒng)可以被顛覆(使任何保證無效)。這些術(shù)語經(jīng)常被錯(cuò)誤地使用來表示靜態(tài)和動態(tài)類型。要了解它們之間的區(qū)別,請考慮一下C:在編譯時(shí)對語言進(jìn)行類型檢查(靜態(tài)類型化),但是仍然存在很多漏洞。您幾乎可以將任何類型的值轉(zhuǎn)換為相同大小的另一類型-特別是,您可以自由地轉(zhuǎn)換指針類型。帕斯卡(Pascal)是一種旨在強(qiáng)力打字的語言,但著名的是無法預(yù)料的漏洞:沒有標(biāo)簽的變體記錄。
強(qiáng)類型語言的實(shí)現(xiàn)通常會隨著時(shí)間的流逝而產(chǎn)生漏洞,因此,可以使用高級語言來實(shí)現(xiàn)部分運(yùn)行時(shí)系統(tǒng)。例如,Objective Caml有一個(gè)稱為的函數(shù)Obj.magic
,具有僅返回其參數(shù)的運(yùn)行時(shí)效果,但是在編譯時(shí),它將任何類型的值轉(zhuǎn)換為任何其他類型的值。我最喜歡的示例是Modula-3,其設(shè)計(jì)師將其稱為類型轉(zhuǎn)換構(gòu)造LOOPHOLE
。
話雖如此,您不能指望任何兩個(gè)人以完全相同的方式使用“強(qiáng)”和“弱”兩個(gè)詞。所以避免他們。

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
簡單地說就是這樣:在靜態(tài)類型語言中,類型是static,這意味著一旦將變量設(shè)置為類型,就無法更改它。那是因?yàn)轭愋褪桥c變量關(guān)聯(lián)的,而不是變量所引用的值。
例如在Java中:
String str = "Hello"; //statically typed as string
str = 5; //would throw an error since java is statically typed
而在動態(tài)類型語言中,類型是dynamic,這意味著在將變量設(shè)置為類型之后,可以對其進(jìn)行更改。這是因?yàn)殒I入與值而不是變量相關(guān)聯(lián)。
例如在Python中:
str = "Hello" # it is a string
str = 5 # now it is an integer; perfectly OK
另一方面,某種語言中的強(qiáng)/弱鍵入與隱式類型轉(zhuǎn)換有關(guān)(部分取自@Dario的答案):
例如在Python中:
str = 5 + "hello"
# would throw an error since it does not want to cast one type to the other implicitly.
而在PHP中:
$str = 5 + "hello"; // equals 5 because "hello" is implicitly casted to 0
// PHP is weakly typed, thus is a very forgiving language.
靜態(tài)類型允許在編譯時(shí)檢查類型正確性。通常編譯靜態(tài)類型的語言,并解釋動態(tài)類型的語言。因此,動態(tài)類型的語言可以在運(yùn)行時(shí)檢查類型。
添加回答
舉報(bào)