---
# System prepended metadata

title: 程式語言
tags: [Blue 的學習紀錄]

---

---
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) 有對非同步更深的解釋
