PLT 板


LINE

看板 PLT  RSS
作者: ronin728 (浪人) 看板: PLT 標題: [閒聊] Multi-methods 時間: Tue Nov 8 18:01:55 2016 寫作業有感, 我今天來嘴炮一下我對程式語言抽象能力的看法 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 ← 除了$$@@$@之外,我覺得它看起來很討喜 C# 4.0 ← 我覺得微軟的語言設計品味都不算糟糕, 至少 C#、F#、TypeScript 之類的看起來都還不差, 畢竟微軟研究院裏還有 Simon P Jones 等大神坐鎮, 不過 VB、C++/CLI 之類的倒是很不入流.. (逃 ] --------------------------------------------- 一門程式語言怎樣去定義、處理 polymorphic 的資料或程式, 這是個非常重要的問題,設計良好的語言在處理這件上會特別方便。 這類問題 Philip Wadler 給了他一個名字"The express problem", """ The Expression Problem is a new name for an old problem. The goal is to define a datatype by cases, where one can add new cases to the datatype and new functions over the datatype, without recompiling existing code, and while retaining static type safety. """ 不過我不會以他的定義來討論,我會提到這篇文章 只是因為這個詞用來搜尋討論串比較方便而已 (X) 舉些我認為值得作為指標的兩個例子: 1. 寫一個 Lambda-calculus 的 EDSL 2. 實現 Red-black tree 資料結構 實際寫就知道這種抽象性有多重要了, 用 C++ 與 Haskell 來做對比, 兩者的程式語句數量至少會差個3~5倍。 題外話,用 C++ 寫 Lambda-calculus EDSL, 用 Template meta-programming 的方法來寫 可能會比 Runtime 版本的還要短 XD https://goo.gl/Fy8D4k 結論: <del> 1. \LISP大法好/ \ML大法好/ </del> <del> 2. Open multi-methods 跟 FP 的一些東西有 87% 像 </del> <del> 3. OOPL 都在加入 FPL 二、三十年前就有的東西來填坑 </del> <del> 4. 如果 C++ 標準委員會是 Bjarne 獨裁的話, C++ 可能改名成 OCAML 了, 全名 Objective C Assemble with ML。 </del> <del> 5. ANSI Common Lisp 比 Smalltalk 更像 OOP 語言 </del> 範例程式碼神馬的,我有空再補... (逃 相關連結: C++ 的 Pattern matching 擴展 Mach7 https://github.com/solodon4/Mach7 Open Multi-Methods for C++ http://www.stroustrup.com/multimethods.pdf --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.197.133
※ 文章網址: https://webptt.com/m.aspx?n=bbs/PLT/M.1478599319.A.AAD.html ※ 編輯: ronin728 (180.217.197.133), 11/08/2016 18:05:13
1F:推 esrever: The express problem 讓我想到 data types àla carte XD 11/09 02:05
以前我在查資料的時候翻過這文章,不過還沒仔細讀過 (掩面
2F:推 suhorng: 有人用 Visitor Pattern 來寫(因為沒 multi dispatch) 11/09 08:12
不過 visitor pattern 還是有他的限制, 如果要配對的形式參數類型超過 1 個, 例如 void show(Red r, Blue b); void show(Blue b, Green g); 就會很麻煩,要另外拆出來,如果超過 2 個... 程式基本上不是人在讀的了 XDDD 甚至還有 term 數量硬是跟別的兄弟們不一樣的那種 void show(Red r, Blue b, Green g); 我覺得這種情況手動用 dynamic_cast/instanceof 配 if-else 去分派,會比較實在 XD ※ 編輯: ronin728 (180.217.201.117), 11/10/2016 01:06:38
3F:推 xcycl: a la carte 那篇開宗明義就說是處理 expression problem ;) 11/10 15:06
4F:→ alfadick: 你怎麼看Wolfram Language 11/12 12:11







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP