资深程序员的笔记:工作多年对于编程语言的理解,新手建议了解!
工作幾年,先后接觸c/c++,python,lua,dart,JavaScript,java等各種語言,記錄下對于一個編程語言的理解,今天分享一下我自己的心得,這并不是一個標準,不認同還請不要責怪筆者。如果感覺對你有幫助,筆者不勝榮幸!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
對一個編程語言的理解,應該關注兩個方面
一、語言特性
語言特性由編譯器具體實現,具體包括:
1. 強類型vs弱類型
強類型就是類型很硬,不太接受轉換
比如c++就是強類型,不同類型轉換需要各種cast
JavaScript就是弱類型,一個變量,一會數字,一會字符串,一會對象都沒問題
2. 靜態類型vs動態類型
靜態類型:程序運行前確定變量類型,需事先聲明或者由編譯器推導
動態類型,程序運行時才進行類型綁定和檢查
3. 靜態語言vs動態語言
程序在運行時可以更改代碼結構,比如JavaScript隨時給一個對象添加成員或者添加函數
4. 值類型vs引用數據類型
JavaScript中除了基本數據類型外,其他都是引用類型,所以變量賦值后其實指向的是同一對象
總結:變量聲明時是否需要指定類型->靜態類型vs動態類型
聲明后的類型能否相互轉換->強類型vs弱類型
程序運行時,能否改變對象內部結構->動態語言vs靜態語言
但,所有這些都不算數,對于dart語言
既可以編譯成二進制,AOT,又可以解釋運行
變量聲明既可以指定類型,也可以dynamic聲明不指定類型
不支持反射,所以是靜態語言
類型不可隨意轉換,是強類型語言
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
二、運行環境
運行環境就是runtime,包括虛擬機或者真實的操作系統,需要注意的有
1. 編譯運行vs解釋執行
編譯型:源代碼->編譯器->可執行代碼
解釋型:解釋器讀取源代碼,編譯,然后運行。
區別僅僅是源代碼翻譯成目標代碼的時機不同。
c/c++是編譯型,各源文件編譯成obj,后經過連接器鏈接為可執行文件,后操作系統加載執行
js,python是解釋型,先編譯為字節碼,后由虛擬機加載執行。
要注意編譯單位:c/c++是以文件為單位,nodejs和python同樣,但網頁中js是以代碼塊(<script>分割)獨立翻譯,執行,但各代碼塊共享變量
2.?異步編程模型
nodejs是單線程異步模型,異步模型導致回調地獄問題,后出現await,async,以同步編程方式來編寫異步代碼。更好維護
3. 垃圾回收
只管使用,不用操心內存釋放。
越高級語言,開發者越不需要關心底層,c/c++,不需要關心匯編指令,但是需要負責內存的申請和釋放,而java,js,dart等現代化語言,開發者不需要關心內存問題,這是語言發展的必然。
學習C/C++編程知識,可以關注博主,希望文章對你有幫助。
總結
以上是生活随笔為你收集整理的资深程序员的笔记:工作多年对于编程语言的理解,新手建议了解!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术女性的是是非非(2)
- 下一篇: 从谷歌公司发现的十个至理名言