Lesson 08 — Kiểm tra kiểu (Type Checking)

Ba công cụ tương tác: type checker bottom-up vẽ AST và gán kiểu từng node (tô đỏ chỗ lỗi), demo static vs dynamic bắt lỗi lúc-dịch vs lúc-chạy, và coercion explorer so kết quả ép kiểu giữa Go / Python / JS.

1. Type Checker bottom-up — vẽ AST & gán kiểu

Nhập biểu thức: literal int (vd 2), float (3.14), bool (true/false), string ("hi"), và biến age (int) · name (string) · ok (bool) · price (float). Toán tử: + - * /, so sánh < > ==, logic && ||. Dùng () nhóm.
Mẫu:

2. Static vs Dynamic — bắt lỗi lúc-dịch hay lúc-chạy?

Cùng một snippet (gán string vào biến rồi sau đó cộng số). Nhấn Dịch & chạy để xem static (Go) chặn ngay lúc dịch, còn dynamic (Python) chạy được tới khi gặp dòng lỗi.

🛂 Static (Go) — kiểm lúc DỊCH
🚆 Dynamic (Python) — kiểm lúc CHẠY

3. Coercion Explorer — cùng phép, khác ngôn ngữ

Chọn một phép ép kiểu rồi xem ba ngôn ngữ xử lý khác nhau thế nào. Go (static+strong) thường từ chối; Python (dynamic+strong) báo lỗi runtime; JS (dynamic+weak) ép ngầm.

4. Bảng so sánh static / dynamic / strong / weak

Ngôn ngữStatic / DynamicStrong / Weak"a" + 1Lỗi kiểu lộ khi nào
GoStaticStronglỗi biên dịchlúc dịch
RustStaticStronglỗi biên dịchlúc dịch
JavaStaticStrong-ish"a1" (+ với String)lúc dịch (nếu kiểu khác hẳn)
PythonDynamicStrongTypeErrorlúc chạy
JavaScriptDynamicWeak"a1"hiếm khi — ép ngầm
CStaticWeakcon trỏ + int (UB)lúc dịch một phần