日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

弱类型、强类型、动态类型、静态类型语言的区别

發布時間:2024/4/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 弱类型、强类型、动态类型、静态类型语言的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

類型系統的一些概念,眾說紛紜,使用上也比較亂。有些東西,甚至不好嚴格定義。以下算學術界的一種相對“嚴格”的說法。

首先了解一下基本概念

Program Errors

  • trapped errors。導致程序終止執行,如除0,Java中數組越界訪問
  • untrapped errors。 出錯后繼續執行,但可能出現任意行為。如C里的緩沖區溢出、Jump到錯誤地址

Forbidden Behaviours

語言設計時,可以定義一組forbidden behaviors. 它必須包括所有untrapped errors, 但可能包含trapped errors.

Well behaved、ill behaved

  • well behaved: 如果程序執行不可能出現forbidden behaviors, 則為well behaved。
  • ill behaved: 否則為ill behaved...

有了上面的概念,再討論強、弱類型,靜態、動態類型

強、弱類型

  • 強類型strongly typed: 如果一種語言的所有程序都是well behaved——即不可能出現forbidden behaviors,則該語言為strongly typed。
  • 弱類型weakly typed: 否則為weakly typed。比如C語言的緩沖區溢出,屬于trapped errors,即屬于forbidden behaviors..故C是弱類型

弱類型語言,類型檢查更不嚴格,如偏向于容忍隱式類型轉換

譬如說C語言的int可以變成double。 這樣的結果是:容易產生forbidden behaviours,所以是弱類型的

弱類型

> "1"+2 '12'

強類型

>>> "1"+2 Traceback (most recent call last):File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects

  

動態、靜態類型

  • 靜態類型 statically: 如果在編譯時拒絕ill behaved程序,則是statically typed;
  • 動態類型dynamiclly: 如果在運行時拒絕ill behaviors, 則是dynamiclly typed。

其中靜態類型可以分為兩種:

  • 如果類型是語言語法的一部分,在是explicitly typed顯式類型,比如java和c;
  • 如果類型通過編譯時推導,是implicity typed隱式類型, 比如ML和Haskell

靜態類型,編譯的時候就知道每一個變量的類型,因為類型錯誤而不能做的事情是語法錯誤。

動態類型,編譯的時候不知道每一個變量的類型,因為類型錯誤而不能做的事情是運行時錯誤。

靜態類型指的是編譯器在compile time執行類型檢查,動態類型指的是編譯器(虛擬機)在runtime執行類型檢查。簡單地說,就是在聲明了一個變量之后,不能改變它的類型的語言,是靜態語言;能夠隨時改變它的類型的語言,是動態語言。因為動態語言的特性,一般需要運行時虛擬機支持。

靜態類型更適合構建大型應用( ? )

  • 靜態類型檢查可以做到early fail,即你編寫的代碼即使沒有被執行到,一旦你編寫代碼時發生類型不匹配,語言在編譯階段(解釋執行也一樣,可以在運行前)即可發現。
  • 靜態類型對閱讀代碼是友好的。對于復雜的應用,靜態類型就是非常重要的提示和約束。

這也是TypeScript(添加了可選的靜態類型和基于類的面向對象編程)為什么要使用的部分原因了

動態類型

>>> a = 1 >>> type(a) <type 'int'> >>> a = "s" >>> type(a) <type 'str'>

靜態類型

Prelude> let a = "123" :: Int<interactive>:2:9:Couldn't match expected type `Int' with actual type `[Char]'In the expression: "123" :: IntIn an equation for `a': a = "123" :: Int

附圖:

轉載于:https://www.cnblogs.com/xiongxiaolong/p/10179790.html

總結

以上是生活随笔為你收集整理的弱类型、强类型、动态类型、静态类型语言的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。