---
# System prepended metadata

title: 程式語言 Finals

---

# PL Finals

## ch.7
### Operator associativity rule

規定同優先序的運算子相鄰時，要從左邊 (left-to-right) 或右邊 (right-to-left) 開始計算。

### Operator precedence rule

規定不同運算子之間的先後計算順序／優先序。
註：括號（parentheses）通常為最高優先級。

### Referential transparency

兩個具有相同值的表達式 (例如範例中的 result1, result2)，任何地方互相替換都不會改變程式的行為，沒有副作用 (functional side effect)。
```cpp
result1 = (fun(a) + b) / (fun(a) - c);
temp = fun(a);
result2 = (temp + b) / (temp - c);
// result1 is equivalent to result2
```

### Operator overloading

同一運算子可對不同型別有不同意義。

### Short Circuit Evaluation

邏輯運算時，前項已決定結果則後項不再計算。
```cpp
int a = 0, b = 1;
int expr = (13 * a) * (b / 13 - 1) // a = 0, (b / 13 - 1) is skipped. 
```

### Control structure

用來控制程式執行流程的語句。

### Selection statement

依條件選擇執行路徑的語句，如 if-else、switch。

### Unconditional branch

不經條件判斷直接跳到指定位置的指令（goto、return）。

## ch.9
### Actual parameter

呼叫函式時真正傳入的值或變數。

### Formal parameter

副程式標頭中列出的虛擬變數（dummy variable），用來在副程式內部代表、接收實際參數的名稱。

### Pass-by-Value

傳入值的複本，函式內修改不影響外部。

### Pass-by-Value-Result

先傳入複本，結束後把結果寫回外部參數。

### Pass-by-Reference

傳入參數位址，函式修改會影響外部。

### Pass-by-Name

以「程式碼替換」方式傳入，每次使用時重新求值。

### Shallow binding

使用函式被呼叫當下的環境（dynamic scope）。
Precisely: 當副程式作為參數傳遞時，其環境綁定於「呼叫該副程式的語句」所在的環境。

### Deep binding

使用函式建立時的環境（lexical scope）。
Precisely: 當副程式作為參數傳遞時，其環境綁定於「該副程式被定義」時的環境。

### Polymorphic subprogram

可接受不同型別或多種輸入的副程式。
```cpp!
<template T>
    ...
```

### Subtype polymorphism

子類別可被當作父類別使用的多型行為。

### Closure

函式與其建立當下環境（變數）的組合。

### Coroutine

一種擁有多個進入點且能自行控制執行的副程式。
與呼叫者是對等關係（Symmetric control），可以反覆地互相讓出控制權並交替執行的程序（暫停和執行）

ch. 10
### Activation record

函式呼叫時在堆疊上的紀錄框架。

### Dynamic link

指向呼叫者的 activation record。
Precisely: 指向呼叫者（Caller）的啟動紀錄實體（Activation Record Instance）的頂端。

### Environment Pointer

指向目前 activation record 的指標。
Precisely: 指向當前正在執行的程式單元的啟動紀錄實體的基底（Base）

### Dynamic Chain

由 dynamic link 串成的實際呼叫序列。

### Local offset

區域變數在 activation record 中的位移位置。

### Static link

指向外層（封閉 scope）的 activation record。
Precisely: 指向該副程式的靜態父層（Static Parent）的啟動紀錄實體。這是為了實現巢狀作用域。

### Static chain

由 static link 串成的靜態巢狀結構路徑。

## ch.11、12
### Concept of abstraction

將重要特性保留，隱藏複雜細節。

### Encapsulation

將邏輯上相關的副程式分組，形成一個可以被單獨編譯的單元。
資料與方法包在一起，限制外部直接存取。

### Dynamic binding

執行時才決定實際要呼叫的方法（多型基礎）。
 * 當一個類別階層中包含覆寫（override）的方法，且這些方法是透過一個多型變數（polymorphic variable）來呼叫時，該方法與其定義的繫結將會是「動態」的 。

### Abstract method

只有宣告、無實作，必須由子類別實作的方法。

 * C++ 中稱為「純虛擬函式（pure virtual function）」，它完全沒有定義。
```cpp
virtual void func() = 0;
```

### Abstract class

不能實例化、只能被繼承的類別，包含至少一個抽象方法（Abstract method）的類別。