推 Neisseria: 轉成 C 可攜性應該會比較好,這好像不只一個團隊試過 07/04 10:31
→ Neisseria: 像是 Nim 就是以這個為號召,但那個語言目前不成氣候 07/04 10:32
→ Neisseria: Vala 也算吧,但是多帶一個 GTK+,runtime 比較肥 07/04 10:33
llvm 已經是組語等級 本來就很好直接轉C
最主要是像functional programming , OO 這種paradigm要轉C就很麻煩
C++自帶所有 任何語言都相對好轉成C++
→ cphe: 以後的事很難說,早期BIOS也都是用asm,後來uefi發展起來也 07/04 11:03
→ cphe: 只有最一開始的phase需要用到asm,其餘都是c 07/04 11:03
→ cphe: 不過底層觀念愈清楚對自己寫code或debug還是有幫助的 07/04 11:04
→ cphe: 學過組語、學過cpu怎麼讀指令,寫code還是會有不同層面的思 07/04 11:05
→ cphe: 考 07/04 11:05
推 Neisseria: 我記得 LLVM 算 IR,應該不用再轉成 C (或 C++) 07/04 13:32
→ Neisseria: 我以為原 po 要的是從某個高階語言轉 C (或 C++) 07/04 13:33
→ Neisseria: 但小弟沒修過編譯器的課程,講錯請指教 07/04 13:33
→ Neisseria: 高階語言 -> C -> LLVM -> 機械碼 是這樣嗎? 07/04 13:34
對 就是中間再加一層C++
其實這是我昨天跟學長聊天他想到的 他說既然C++未來有動態和靜態 加上所有範型
那轉成C++可讀性比較高 又不會離原本語言太遠
OO或動態語言轉C就很醜
推 Neisseria: 一般的程式設計者不會觀看或手動修改轉出來的 C 或 C++ 07/04 15:23
→ Neisseria: 程式碼,只要語義沒有錯掉,理想上轉什麼都沒差 07/04 15:24
→ Neisseria: 甚至不透過 C (或 C++) 這個中介層,直接進 LLVM 也可 07/04 15:25
→ Neisseria: 像 Rust 也是用 LLVM,但沒有生 C (或 C++) 程式碼 07/04 15:26
→ Neisseria: 當然從設計者的角度來看會有差 07/04 15:27
→ Neisseria: P.S. 講錯請不吝糾正,感恩 07/04 15:28
為了效能優化 很多時候還是要去看編出來的ir
雖然大家都說compiler現在很成熟比人工優化快
benchmark用下去一定有熱區 通常第一熱區和第二熱區有時候手動優化還是有機會變快
這種優化都是case by case 所以還是不少人會去看中間語言的部分
組合語言的可讀性還是比主流高階語言困難 至少對於非駭客很不直覺
※ 編輯: Sidney0503 (140.113.210.215), 07/04/2018 15:41:16
→ sarafciel: 我要轉C/ASM出來看的目的 就是要看底層的實作呀XD 07/04 15:36
→ sarafciel: 如果要看高階抽象的東西原語言的程式碼足矣 07/04 15:37
→ tinlans: 轉成醜爆的 C++ 也不會好讀到哪去 07/04 16:03
→ tinlans: 自動轉出來的程式碼一般難以閱讀 07/04 16:04
推 Schottky: 咦我通過了原PO的駭客檢定標準 XDDDD 07/04 18:10
→ Lipraxde: 這樣做有什麼好處?Compiler比較好寫? 07/04 18:31
推 Bencrie: 可以多弄一層中繼碼的中繼碼,創造就業機會 07/04 21:57
推 Neisseria: 照原 po 的想法只要寫前端就好,後端就丟給 GCC/Clang 07/04 22:48
→ Neisseria: 要從頭寫後端的那些優化應該也是蠻累人的一件事 07/04 22:49
→ Lipraxde: 應該還是要轉成ir在優化比較好吧,不過最後不會變成為 07/04 23:25
→ Lipraxde: 什麼不一開始就用C++寫code嗎 07/04 23:25
→ sarafciel: 創造就業機會XDDDD 07/04 23:29
→ sarafciel: 還有一個問題是 我不覺得++的學習成本比IR跟ASM低 07/04 23:30
→ sarafciel: 極端點講 如果為了加速 前端編一堆TMP的Code出來呢? 07/04 23:38
→ tinlans: 先不說 TMP,光是 case label 從 1 排到 10000 的狀態機 07/05 00:27
→ tinlans: ,就已經是無法閱讀了,但偏偏這是產生器最愛生的玩意。 07/05 00:28
推 dannypsnl: 樓上說的是解析器產生器吧? 07/05 20:30
→ freef1y3: 先手動優化轉出來的C++, 再手動優化C++轉出來的ASM 07/05 23:09
→ freef1y3: 手動優化也要分pass的概念 07/05 23:10
→ tinlans: 怎麼可能只有解析器產生器啊,去複習下 UML 的活動圖。 07/06 01:08
→ tinlans: 狀態機圖也可以複習一下,其實程式都可以用這些描述。 07/06 01:09
→ tinlans: 而且因為它本身是查表法的一種,也算是最佳化的一招。 07/06 01:09
→ james732: 其實我不懂C++哪裡適合當這個中間語言? 07/06 16:52
推 Sex5F: 不可能 07/08 14:48
推 CoNsTaR: 轉成c++是複雜化的概念嗎 (X 07/10 10:40
→ Neisseria: Nim 就這樣搞啊,Nim 除了轉 C 也可轉 C++ 07/10 11:18
→ Neisseria: 但這樣做有什麼好處要問 Nim 的核心開發者... 07/10 11:19
→ Killercat: C++跟近代語言其實都比較像是描述語言,你要描述model 07/11 22:52
→ Killercat: 跟「你想做什麼」,而組語基本上沒有抽象的描述概念 07/11 22:53
→ Killercat: 所以以標題來講... 我是覺得有點格格不入啦 XD 07/11 22:53
→ Killercat: 有興趣可以比對一下java跟轉出來的bytecode的差異 07/11 22:54
推 CoNsTaR: 樓上我想原Po提組語意思是和組語一樣成為所有語言的底層 07/14 06:11
→ CoNsTaR: 而高級指的就是有抽象概念吧 07/14 06:11
推 ronin728: C-- 07/15 14:09