工做幾年,前後接觸c/c++,python,lua,dart,JavaScript,java各類語言,記錄下對於一個編程語言的理解java
對一個編程語言的理解,應該關注兩個方面node
1、語言特性python
語言特性包括:c++
1. 強類型vs弱類型編程
強類型就是類型很硬,不太接受轉換異步
好比c++就是強類型,不一樣類型轉換須要各類castasync
JavaScript就是弱類型,一個變量,一會數字,一會字符串,一會對象都沒問題編程語言
2. 靜態類型vs動態類型異步編程
靜態類型:程序運行前肯定變量類型,需事先聲明或者由編譯器推導函數
動態類型,程序運行時才進行類型綁定和檢查
3. 靜態語言vs動態語言
程序在運行時能夠更改代碼結構,好比JavaScript隨時給一個對象添加成員或者添加函數
4. 值類型vs引用數據類型
JavaScript中除了基本數據類型外,其餘都是引用類型,因此變量賦值後其實指向的是同一對象
總結:變量聲明時是否須要指定類型->靜態類型vs動態類型
聲明後的類型可否相互轉換->強類型vs弱類型
程序運行時,可否改變對象內部結構->動態語言vs靜態語言
但,全部這些都不算數,對於dart語言
既能夠編譯成二進制,AOT,又能夠解釋運行
變量聲明既能夠指定類型,也能夠dynamic聲明不指定類型
不支持反射,因此是靜態語言
類型不可隨意轉換,是強類型語言
2、運行環境
運行環境就是虛擬機或者真實的操做系統,須要注意的有
1. 編譯運行vs解釋執行
編譯型:源代碼->編譯器->可執行代碼
解釋型:解釋器讀取源代碼,編譯,而後運行。
區別僅僅是源代碼翻譯成目標代碼的時機不一樣。
c/c++是編譯型,各源文件編譯成obj,後通過鏈接器連接爲可執行文件,後操做系統加載執行
js,python是解釋型,先編譯爲字節碼,後由虛擬機加載執行。
要注意編譯單位:c/c++是以文件爲單位,nodejs和python一樣,但網頁中js是以代碼塊(<script>分割)獨立翻譯,執行,但各代碼塊共享變量
2. 異步編程模型
nodejs是單線程異步模型,異步模型致使回調地獄問題,後出現await,async,以同步編程方式來編寫異步代碼。更好維護
3. 垃圾回收
我的理解,但願有大神能夠糾正或補充。