動態語言
一類在運行時可以改變其結構的語言:例如新的函數、對象、甚至代碼可以被引進,已有的函數可以被刪除或者其他結構上的變化。
在運行時代碼可以根據某些條件改變自身結構。
如Objective-C、C#、JavaScript、PHP、Python。
靜態語言
與動態語言相對應的,運行時結構不可變的語言。
如Java、C、C++。
編譯型:
負責翻譯的程序對源代碼進行轉換,生成相對應的可執行代碼。這個過程是編譯,這個程序是編譯器。
如果所有代碼都包含在一個源文件,通常編譯之后就會直接生成一個可執行文件。
如果很多源文件,編譯各個文件時就會生成目標文件。這些目標文件里的內容基本是可執行代碼了。
然后由鏈接器把目標文件和各種圖片、音視頻等資源鏈接起來,還會去除目標文件之間的冗余重復代碼。
最后生成可執行文件。
如C、C++、Objective-C、Swift。
解釋型
程序運行的前一刻,還只有源程序而沒有可執行程序。程序每執行到源程序的某一條指令,解釋器將源代碼轉換成二進制以供執行。
不斷的解釋、執行、解釋、執行。
移植性好,運行速度慢。
Java也進行了預編譯,生成介于機器碼和Java源碼之間的中介代碼。
如JavaScript、Python、PHP、Ruby。
動態類型語言
運行期間才去做數據類型檢查的語言。永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。
如Python、Ruby、JavaScript、Swift、PHP。
靜態類型語言
在寫程序時要聲明所有變量的數據類型,數據類型在編譯期間檢查。
如C、C++、C#、Java、Objective-C。
強類型定義語言
強制數據類型定義的語言。
一旦一個變量被指定了某個數據類型,如果不經過強制類型轉換,它就永遠是這個數據類型。
強類型定義語言是類型安全的語言。
如Java、C#、Python、Objective-C、Ruby.
弱類型定義語言
一個變量可以賦不同數據類型的值或者可以容易隱式類型轉換。
如JavaScript、PHP、C、C++
duck typing
是動態語言的一種,只關心有沒有實現屬性和方法,不管真正類型。
normal typing
規定了類型,方法和屬性也就確定了。