看板 C_and_CPP 關於我們 聯絡資訊
現在的 llvm bytecode 是很流行的中介碼 非常類似組合語言 很多語言只要寫好前端接到llvm ir 就可以輕易地轉後端就跑在各種硬體上 C++20 想要靜態動態兼具 (modules, injection/reflection) 和圖形化 (C++:「我全都要」) 這樣當C++擁有全部語言都有的feature的時候 任何語言都可以轉成 C++ code 作為後端 這樣具有比組合語言更好的可讀性 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.126.235 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1530667875.A.944.html
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