直譯語言與編譯語言
直譯語言是什麼?
簡單來說不是使用編譯器來編譯,而是使用解釋器邊讀取邊執行,像是 Ruby、Python、JavaScript 都是直譯語言
編譯期:並沒有明確的編譯期,由直譯語言的解釋器 (Interpreter)
進行編譯,可以一邊讀取一邊執行,讀取完後會執行該程式碼,並且檢查語法,解釋器 (Interpreter)
像是口譯員,在讀取完完整的句子後,翻譯出來
執行期:解釋器(Interpreter)在執行期會將指令轉換為電腦能懂的語言,並且處理輸入、輸出,而這時候進行錯誤檢查,像是型別錯誤、定義變數的錯誤都會在這時候出現
編譯語言是什麼?
會先將程式碼編譯,再進行執行,像是 C、C#、JAVA 都是編譯語言
編譯期:由編譯器(Compiler)編譯成電腦看得懂的機器碼,這時期就會去檢查語法、型別等錯誤
執行期:這個階段會進行執行
直譯語言與編譯語言的差異
效能
編譯語言通常會先經過編譯期,事先把程式碼編譯好再執行,
不過直譯語言是邊讀取邊執行,所以在效能上,編譯語言會比直譯語言快。
Debug
直譯語言在 Debug 的時候會方便許多,因為不需要修改再下指令要求編譯並執行,且可以提供更詳細的錯誤訊息
不過目前有些編譯語言也會提供詳細的錯誤訊息,像是 Rust ,不過一樣需要下指令才會讓程式碼重跑編譯期跟執行期
動態語言跟靜態語言
靜態語言
靜態語言指的是在編譯期間,型別就已經是已知且不會變動的,並且會在編譯期間檢查型別是否有誤,我們在編譯語言的編譯期可以看到型別錯誤的訊息,像是 Rust、C、C#、JAVA 都是靜態語言
動態語言
動態語言就跟靜態語言不一樣了,在執行的時候才會去檢查型別,表示變數的型別其實是可以在執行期變動的,像是 Ruby、PHP、JavaScript 都是動態語言
不過其實有些動態語言也支援編譯器,不過他們仍然被歸類在動態語言中,像是 Ruby 、Python 都可以將程式碼轉換成虛擬機器可以執行的程式碼
高階語言與低階語言
而高階語言跟低階語言又是不同的分類,
高階語言
對於電腦來說比較抽象的語言,不過對開發人員來說是更富有易讀性,物件導向、高階資料結構這些都算是高階語言的特性
高階語言又根據特性分成以下類型
通用程式語言
用於處理各種不同類型的應用程式,可以適用網頁開發、軟體開發等多個領域,像是 Python、Java、C++、C#、Ruby、JavaScript
腳本語言
通常用於簡化特定的指令、應用於自動化任務上,通常是直譯語言,像是 Python、JavaScript 等
函數式語言
常用於大數據分析、數學運算,強調函數的不可變,像是 Haskell、Lisp、Scala、Erlang 等
物件導向語言
用物件來封裝,所應用到的大部分操作及變數都是物件,強調繼承概念,像是 Ruby、Java、C++、C#、Python 都是
特定領域語言
針對特定領域或任務所開發的語言,像是 HTML、SQL、CSS 都算是
低階語言
對於電腦來說更好閱讀的語言,對開發人員來說可能就沒這麼好閱讀,且開發人員需要注意記憶體管理,通常用於嵌入式系統開發、驅動程式開發,基本上是使用二進位形式
組合語言
相較二進位形式,更具有易讀性的語言,通常用符號來提高可讀性,可用來操作系統及驅動程式
機器語言
直接由 CPU 讀取及執行的指令,都是使用二進位形式