寫作業有感,
我今天來嘴炮一下我對程式語言抽象能力的看法 XD
小劇場
"""
資工系學生小明正在設計一個 ML 語言的編譯器,
他設計了一套語義系統能將 AST 一步步轉成組合語言,
他選擇了用 C++/Java 來實(自)現(虐),
但同時他也不想用寫好幾座 if-else 金字塔,
他希望 C++/Java 能像 Haskell 一樣
爽爽用 Pattern matching,
也許 Dynamic dispatching 能夠做到類似的效果...?
"""
可惜的是,
C++/Java 只有 Single dispathing,
這種機制所能表達的語法非常有限,
用算用了還是得在 class 中寫一堆 if-else。
若 OOPL 要像 FPL 的 Pattern matching 般便利,
唯一的可能就是使用 Multi-methods(Multi-dispatching)。
可惜的是許多 OOPL 根本就沒有內建支援,
例如 C++、Java、Python、Ruby ...
這些語言需要靠一些技巧來摹擬、擴充,才能做到這種功能。
( Bjarne 有提出把 Pattern matching 與
Multi-method 加入 C++ 的作法,詳見最下方的連結)
題外話 自帶 Multi-method 的乖寶寶名單 [
ANSI CL、Racket、Clojure ← 壯哉我大 Lisp
Perl 6 ← 除了$$@@[email protected]/*