[討論] 未來C++地位會像高級組語碼?

看板C_and_CPP作者 (Sidney0503)時間7年前 (2018/07/04 09:31), 7年前編輯推噓11(11041)
留言52則, 14人參與, 7年前最新討論串1/1
現在的 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

07/04 10:31, 7年前 , 1F
轉成 C 可攜性應該會比較好,這好像不只一個團隊試過
07/04 10:31, 1F

07/04 10:32, 7年前 , 2F
像是 Nim 就是以這個為號召,但那個語言目前不成氣候
07/04 10:32, 2F

07/04 10:33, 7年前 , 3F
Vala 也算吧,但是多帶一個 GTK+,runtime 比較肥
07/04 10:33, 3F
llvm 已經是組語等級 本來就很好直接轉C 最主要是像functional programming , OO 這種paradigm要轉C就很麻煩 C++自帶所有 任何語言都相對好轉成C++

07/04 11:03, 7年前 , 4F
以後的事很難說,早期BIOS也都是用asm,後來uefi發展起來也
07/04 11:03, 4F

07/04 11:03, 7年前 , 5F
只有最一開始的phase需要用到asm,其餘都是c
07/04 11:03, 5F

07/04 11:04, 7年前 , 6F
不過底層觀念愈清楚對自己寫code或debug還是有幫助的
07/04 11:04, 6F

07/04 11:05, 7年前 , 7F
學過組語、學過cpu怎麼讀指令,寫code還是會有不同層面的思
07/04 11:05, 7F

07/04 11:05, 7年前 , 8F
07/04 11:05, 8F

07/04 13:32, 7年前 , 9F
我記得 LLVM 算 IR,應該不用再轉成 C (或 C++)
07/04 13:32, 9F

07/04 13:33, 7年前 , 10F
我以為原 po 要的是從某個高階語言轉 C (或 C++)
07/04 13:33, 10F

07/04 13:33, 7年前 , 11F
但小弟沒修過編譯器的課程,講錯請指教
07/04 13:33, 11F

07/04 13:34, 7年前 , 12F
高階語言 -> C -> LLVM -> 機械碼 是這樣嗎?
07/04 13:34, 12F
對 就是中間再加一層C++ 其實這是我昨天跟學長聊天他想到的 他說既然C++未來有動態和靜態 加上所有範型 那轉成C++可讀性比較高 又不會離原本語言太遠 OO或動態語言轉C就很醜

07/04 15:23, 7年前 , 13F
一般的程式設計者不會觀看或手動修改轉出來的 C 或 C++
07/04 15:23, 13F

07/04 15:24, 7年前 , 14F
程式碼,只要語義沒有錯掉,理想上轉什麼都沒差
07/04 15:24, 14F

07/04 15:25, 7年前 , 15F
甚至不透過 C (或 C++) 這個中介層,直接進 LLVM 也可
07/04 15:25, 15F

07/04 15:26, 7年前 , 16F
像 Rust 也是用 LLVM,但沒有生 C (或 C++) 程式碼
07/04 15:26, 16F

07/04 15:27, 7年前 , 17F
當然從設計者的角度來看會有差
07/04 15:27, 17F

07/04 15:28, 7年前 , 18F
P.S. 講錯請不吝糾正,感恩
07/04 15:28, 18F
為了效能優化 很多時候還是要去看編出來的ir 雖然大家都說compiler現在很成熟比人工優化快 benchmark用下去一定有熱區 通常第一熱區和第二熱區有時候手動優化還是有機會變快 這種優化都是case by case 所以還是不少人會去看中間語言的部分 組合語言的可讀性還是比主流高階語言困難 至少對於非駭客很不直覺 ※ 編輯: Sidney0503 (140.113.210.215), 07/04/2018 15:41:16

07/04 15:36, 7年前 , 19F
我要轉C/ASM出來看的目的 就是要看底層的實作呀XD
07/04 15:36, 19F

07/04 15:37, 7年前 , 20F
如果要看高階抽象的東西原語言的程式碼足矣
07/04 15:37, 20F

07/04 16:03, 7年前 , 21F
轉成醜爆的 C++ 也不會好讀到哪去
07/04 16:03, 21F

07/04 16:04, 7年前 , 22F
自動轉出來的程式碼一般難以閱讀
07/04 16:04, 22F

07/04 18:10, 7年前 , 23F
咦我通過了原PO的駭客檢定標準 XDDDD
07/04 18:10, 23F

07/04 18:31, 7年前 , 24F
這樣做有什麼好處?Compiler比較好寫?
07/04 18:31, 24F

07/04 21:57, 7年前 , 25F
可以多弄一層中繼碼的中繼碼,創造就業機會
07/04 21:57, 25F

07/04 22:48, 7年前 , 26F
照原 po 的想法只要寫前端就好,後端就丟給 GCC/Clang
07/04 22:48, 26F

07/04 22:49, 7年前 , 27F
要從頭寫後端的那些優化應該也是蠻累人的一件事
07/04 22:49, 27F

07/04 23:25, 7年前 , 28F
應該還是要轉成ir在優化比較好吧,不過最後不會變成為
07/04 23:25, 28F

07/04 23:25, 7年前 , 29F
什麼不一開始就用C++寫code嗎
07/04 23:25, 29F

07/04 23:29, 7年前 , 30F
創造就業機會XDDDD
07/04 23:29, 30F

07/04 23:30, 7年前 , 31F
還有一個問題是 我不覺得++的學習成本比IR跟ASM低
07/04 23:30, 31F

07/04 23:38, 7年前 , 32F
極端點講 如果為了加速 前端編一堆TMP的Code出來呢?
07/04 23:38, 32F

07/05 00:27, 7年前 , 33F
先不說 TMP,光是 case label 從 1 排到 10000 的狀態機
07/05 00:27, 33F

07/05 00:28, 7年前 , 34F
,就已經是無法閱讀了,但偏偏這是產生器最愛生的玩意。
07/05 00:28, 34F

07/05 20:30, 7年前 , 35F
樓上說的是解析器產生器吧?
07/05 20:30, 35F

07/05 23:09, 7年前 , 36F
先手動優化轉出來的C++, 再手動優化C++轉出來的ASM
07/05 23:09, 36F

07/05 23:10, 7年前 , 37F
手動優化也要分pass的概念
07/05 23:10, 37F

07/06 01:08, 7年前 , 38F
怎麼可能只有解析器產生器啊,去複習下 UML 的活動圖。
07/06 01:08, 38F

07/06 01:09, 7年前 , 39F
狀態機圖也可以複習一下,其實程式都可以用這些描述。
07/06 01:09, 39F

07/06 01:09, 7年前 , 40F
而且因為它本身是查表法的一種,也算是最佳化的一招。
07/06 01:09, 40F

07/06 16:52, 7年前 , 41F
其實我不懂C++哪裡適合當這個中間語言?
07/06 16:52, 41F

07/08 14:48, 7年前 , 42F
不可能
07/08 14:48, 42F

07/10 10:40, 7年前 , 43F
轉成c++是複雜化的概念嗎 (X
07/10 10:40, 43F

07/10 11:18, 7年前 , 44F
Nim 就這樣搞啊,Nim 除了轉 C 也可轉 C++
07/10 11:18, 44F

07/10 11:19, 7年前 , 45F
但這樣做有什麼好處要問 Nim 的核心開發者...
07/10 11:19, 45F

07/11 22:52, 7年前 , 46F
C++跟近代語言其實都比較像是描述語言,你要描述model
07/11 22:52, 46F

07/11 22:53, 7年前 , 47F
跟「你想做什麼」,而組語基本上沒有抽象的描述概念
07/11 22:53, 47F

07/11 22:53, 7年前 , 48F
所以以標題來講... 我是覺得有點格格不入啦 XD
07/11 22:53, 48F

07/11 22:54, 7年前 , 49F
有興趣可以比對一下java跟轉出來的bytecode的差異
07/11 22:54, 49F

07/14 06:11, 7年前 , 50F
樓上我想原Po提組語意思是和組語一樣成為所有語言的底層
07/14 06:11, 50F

07/14 06:11, 7年前 , 51F
而高級指的就是有抽象概念吧
07/14 06:11, 51F

07/15 14:09, 7年前 , 52F
C--
07/15 14:09, 52F
文章代碼(AID): #1RF2DZb4 (C_and_CPP)