編程語言的思考

工做幾年,前後接觸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. 垃圾回收

我的理解,但願有大神能夠糾正或補充。

相關文章
相關標籤/搜索