← Foundations Course

SYSTEM FOUNDATIONS · 02

程式如何執行:Source Code 不會自己動

「我寫了程式」和「程式正在執行」是兩件事。Source code 只是文字;必須由 Browser、Node、Python、JVM、native executable 等 runtime / machine environment 讀取或執行,才會產生行為。

Learning outcomes

1. Source 只是文字

const price = 100;
const total = price * 2;
console.log(total);

硬碟上的這三行不會自動算出 200。要有 JavaScript engine / runtime 執行它。

2. Browser 是一種 Host Environment

Source JavaScript
   ↓
Browser JavaScript engine
   ↓
runtime state
   ↓
DOM / console / network APIs

Browser 除了語言本身,還提供 document、events、fetch 等 Web APIs。

3. Node 也是 JavaScript Runtime,但 Host APIs 不同

console.log(process.pid);
// Node 有 process

console.log(document);
// Node 預設沒有 Browser DOM

同一種語言不代表同一個執行環境。

4. Compile / Build 與 Runtime

TypeScript / C++
  ↓ compiler/build
JavaScript / executable
  ↓ runtime
actual execution

有些錯誤在執行前就能抓到;另一些只有程式真正跑到某個狀態才出現。

5. 一個最通用的 Mental Model

input→ instructionsstate changes→output / side effect

之後你學任何語言,都可以問:目前 state 是什麼?這一行讀什麼?改什麼?輸出什麼?

Project checkpoint:Request Journey Map v2

Browser receives app.js
  ↓
Browser JS runtime executes
  ↓
variables / functions created
  ↓
DOM updated
  ↓
user sees interactive page

現在你已知道「下載 JavaScript」和「執行 JavaScript」不是同一件事。

Debug evidence:錯誤在哪個階段?

Syntax/build error
→ runtime 可能根本沒開始

Runtime TypeError
→ code 已開始執行

Logic error
→ code 執行完成,但結果不符合規則

Knowledge check

  1. Source code 和 running process 差在哪?
  2. 為什麼 Browser 有 document、Node 不一定有?
  3. compile error 和 runtime error 各發生在哪一層?
  4. 選一段你熟悉的 code,用 input/state/output 描述它。