作者Sidney0503 (Sidney0503)
看板C_and_CPP
标题[讨论] 未来C++地位会像高级组语码?
时间Wed Jul 4 09:31:13 2018
现在的 llvm bytecode 是很流行的中介码 非常类似组合语言
很多语言只要写好前端接到llvm ir 就可以轻易地转後端就跑在各种硬体上
C++20 想要静态动态兼具 (modules, injection/reflection) 和图形化
(C++:「我全都要」)
这样当C++拥有全部语言都有的feature的时候
任何语言都可以转成 C++ code 作为後端
这样具有比组合语言更好的可读性
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.126.235
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1530667875.A.944.html
1F:推 Neisseria: 转成 C 可携性应该会比较好,这好像不只一个团队试过 07/04 10:31
2F:→ Neisseria: 像是 Nim 就是以这个为号召,但那个语言目前不成气候 07/04 10:32
3F:→ Neisseria: Vala 也算吧,但是多带一个 GTK+,runtime 比较肥 07/04 10:33
llvm 已经是组语等级 本来就很好直接转C
最主要是像functional programming , OO 这种paradigm要转C就很麻烦
C++自带所有 任何语言都相对好转成C++
4F:→ cphe: 以後的事很难说,早期BIOS也都是用asm,後来uefi发展起来也 07/04 11:03
5F:→ cphe: 只有最一开始的phase需要用到asm,其余都是c 07/04 11:03
6F:→ cphe: 不过底层观念愈清楚对自己写code或debug还是有帮助的 07/04 11:04
7F:→ cphe: 学过组语、学过cpu怎麽读指令,写code还是会有不同层面的思 07/04 11:05
8F:→ cphe: 考 07/04 11:05
9F:推 Neisseria: 我记得 LLVM 算 IR,应该不用再转成 C (或 C++) 07/04 13:32
10F:→ Neisseria: 我以为原 po 要的是从某个高阶语言转 C (或 C++) 07/04 13:33
11F:→ Neisseria: 但小弟没修过编译器的课程,讲错请指教 07/04 13:33
12F:→ Neisseria: 高阶语言 -> C -> LLVM -> 机械码 是这样吗? 07/04 13:34
对 就是中间再加一层C++
其实这是我昨天跟学长聊天他想到的 他说既然C++未来有动态和静态 加上所有范型
那转成C++可读性比较高 又不会离原本语言太远
OO或动态语言转C就很丑
13F:推 Neisseria: 一般的程式设计者不会观看或手动修改转出来的 C 或 C++ 07/04 15:23
14F:→ Neisseria: 程式码,只要语义没有错掉,理想上转什麽都没差 07/04 15:24
15F:→ Neisseria: 甚至不透过 C (或 C++) 这个中介层,直接进 LLVM 也可 07/04 15:25
16F:→ Neisseria: 像 Rust 也是用 LLVM,但没有生 C (或 C++) 程式码 07/04 15:26
17F:→ Neisseria: 当然从设计者的角度来看会有差 07/04 15:27
18F:→ Neisseria: P.S. 讲错请不吝纠正,感恩 07/04 15:28
为了效能优化 很多时候还是要去看编出来的ir
虽然大家都说compiler现在很成熟比人工优化快
benchmark用下去一定有热区 通常第一热区和第二热区有时候手动优化还是有机会变快
这种优化都是case by case 所以还是不少人会去看中间语言的部分
组合语言的可读性还是比主流高阶语言困难 至少对於非骇客很不直觉
※ 编辑: Sidney0503 (140.113.210.215), 07/04/2018 15:41:16
19F:→ sarafciel: 我要转C/ASM出来看的目的 就是要看底层的实作呀XD 07/04 15:36
20F:→ sarafciel: 如果要看高阶抽象的东西原语言的程式码足矣 07/04 15:37
21F:→ tinlans: 转成丑爆的 C++ 也不会好读到哪去 07/04 16:03
22F:→ tinlans: 自动转出来的程式码一般难以阅读 07/04 16:04
23F:推 Schottky: 咦我通过了原PO的骇客检定标准 XDDDD 07/04 18:10
24F:→ Lipraxde: 这样做有什麽好处?Compiler比较好写? 07/04 18:31
25F:推 Bencrie: 可以多弄一层中继码的中继码,创造就业机会 07/04 21:57
26F:推 Neisseria: 照原 po 的想法只要写前端就好,後端就丢给 GCC/Clang 07/04 22:48
27F:→ Neisseria: 要从头写後端的那些优化应该也是蛮累人的一件事 07/04 22:49
28F:→ Lipraxde: 应该还是要转成ir在优化比较好吧,不过最後不会变成为 07/04 23:25
29F:→ Lipraxde: 什麽不一开始就用C++写code吗 07/04 23:25
30F:→ sarafciel: 创造就业机会XDDDD 07/04 23:29
31F:→ sarafciel: 还有一个问题是 我不觉得++的学习成本比IR跟ASM低 07/04 23:30
32F:→ sarafciel: 极端点讲 如果为了加速 前端编一堆TMP的Code出来呢? 07/04 23:38
33F:→ tinlans: 先不说 TMP,光是 case label 从 1 排到 10000 的状态机 07/05 00:27
34F:→ tinlans: ,就已经是无法阅读了,但偏偏这是产生器最爱生的玩意。 07/05 00:28
35F:推 dannypsnl: 楼上说的是解析器产生器吧? 07/05 20:30
36F:→ freef1y3: 先手动优化转出来的C++, 再手动优化C++转出来的ASM 07/05 23:09
37F:→ freef1y3: 手动优化也要分pass的概念 07/05 23:10
38F:→ tinlans: 怎麽可能只有解析器产生器啊,去复习下 UML 的活动图。 07/06 01:08
39F:→ tinlans: 状态机图也可以复习一下,其实程式都可以用这些描述。 07/06 01:09
40F:→ tinlans: 而且因为它本身是查表法的一种,也算是最佳化的一招。 07/06 01:09
41F:→ james732: 其实我不懂C++哪里适合当这个中间语言? 07/06 16:52
42F:推 Sex5F: 不可能 07/08 14:48
43F:推 CoNsTaR: 转成c++是复杂化的概念吗 (X 07/10 10:40
44F:→ Neisseria: Nim 就这样搞啊,Nim 除了转 C 也可转 C++ 07/10 11:18
45F:→ Neisseria: 但这样做有什麽好处要问 Nim 的核心开发者... 07/10 11:19
46F:→ Killercat: C++跟近代语言其实都比较像是描述语言,你要描述model 07/11 22:52
47F:→ Killercat: 跟「你想做什麽」,而组语基本上没有抽象的描述概念 07/11 22:53
48F:→ Killercat: 所以以标题来讲... 我是觉得有点格格不入啦 XD 07/11 22:53
49F:→ Killercat: 有兴趣可以比对一下java跟转出来的bytecode的差异 07/11 22:54
50F:推 CoNsTaR: 楼上我想原Po提组语意思是和组语一样成为所有语言的底层 07/14 06:11
51F:→ CoNsTaR: 而高级指的就是有抽象概念吧 07/14 06:11
52F:推 ronin728: C-- 07/15 14:09