--- title: 程式語言 tags: Blue 的學習紀錄 --- # 程式語言 語言的:強/弱、動態/靜態、直譯/編譯、同步/非同步 常常在網路文章裡面看到這幾個名詞來描述一個程式語言,因為太多種了,所以查完過了一陣子就又忘記,所以一次把全部搞懂並記錄下來 * #### 弱型別語言 vs 強型別語言? 強型別語言 strongly typed language 弱型別語言 weakly typed languages https://electronic.blue/blog/2015/02/22-weak-typing-explained/ https://en.wikipedia.org/wiki/Strong_and_weak_typing 強弱型別語言沒有明確定義,在網路上看很多文章,每篇說的也不太一樣 總之有兩個分歧點來判斷語言的強弱 1. 語言在遇到 type error 時,是否自動轉換型別以符合要求。 2. 語言會不會省略部份的 type checking。 (參考至上面第一篇文章) 暫時沒有結論,待日後補充 * #### 靜態語言 vs 動態語言? 靜態語言 statically typed language 動態語言 dynamically typed language https://openhome.cc/Gossip/Programmer/DynamicStaticLanguage.html 簡單來說,變數的型態固定就是靜態語言,不固定就是動態語言 「宣告變數時是否需要宣告其型態」是一個特徵,但不是絕對 例如 C 語言宣告一個 int 變數後,就不能再 assign float 或其他種型態的數值;function 傳入傳出的參數都必須事先宣告其參數是哪一種 type。C 語言是靜態語言 而 Python 的變數可以任意 assign 進任何 type 的數值,Python 是動態語言 * #### 編譯語言 vs 直譯語言? 編譯語言 Compiled language 直譯語言 Interpreted language https://medium.com/@totoroLiu/%E7%B7%A8%E8%AD%AF%E8%AA%9E%E8%A8%80-vs-%E7%9B%B4%E8%AD%AF%E8%AA%9E%E8%A8%80-5f34e6bae051 編譯語言例如 C 語言,會先把整段程式碼轉換成機器碼後再執行 直譯語言例如 Python,逐行轉換成機器碼,一行一行執行 編譯語言的執行速度會較快,但相較於直譯語言就缺乏彈性和開發速度 * #### 同步 vs 非同步? 同步 synchronous 非同步 asynchronous https://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean https://medium.com/@hyWang/%E9%9D%9E%E5%90%8C%E6%AD%A5-asynchronous-%E8%88%87%E5%90%8C%E6%AD%A5-synchronous-%E7%9A%84%E5%B7%AE%E7%95%B0-c7f99b9a298a 同步代表的是,在一個任務完成以後才會執行下一個任務 非同步代表的是,不必等待上一個任務完成,就開始執行下一個任務 補充:Node.js 是非同步語言的經典代表,在 [Node.js 的學習心得](/@vegetableBird/%E6%89%BE%E5%B7%A5%E4%BD%9C%E4%B9%8B%E8%B7%AF/%2F%40vegetableBird%2FByij3w7hw#How-Node-Works) 有對非同步更深的解釋