Source-to-source compiler 有什么用?

看 Genie/Vala 的时候遇到这个, 语法糖是一回事... 对性能有改变吗? LLVM 把那么多语言编译成 C 可以拿来干嘛? Wiki 上说明…
关注者
40
被浏览
4,917
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

"Source-to-source"这个概念,认真来讲,是很模糊的;

因为编译器本来就是“把一种语言变成另一种”的程序,本质上就是这样;

令 你感到不解的,应该是,你常见的编译器,最后输出汇编(汇编码)或者可执行程序(机器码), 而突然有一个编译器输出了C代码你感到不习惯...但你仔细想想,其实他们都同样是“把一种语言变成另一种”而已;从这个角度讲,C在这里扮演的角色和很 多“传统”编译器中最后的机器码程序或者汇编码程序没什么不一样,不必感到不解;

至于为什么它选择的target到C上,你提供的那个链接由于wikipedia反SOPA/PIPA运动我暂时看不到,不知道上面说了些什么;

但我谈谈我的理解:

其 实haskell的编译器,也是将haskell源码target到C上的,再调用C的编译器去做最后的编译;这么做的好处就是:不用为haskell在 每种硬件平台、每种操作系统都做一份编译器——因为C这种流行语言的编译器已经遍布各个平台和操作系统,haskell编译成C其实是图了方便、坐享其 成;其实在这里,C语言就扮演了早期汇编语言的角色——为编译器隔离各种平台相关性;

另外,开个玩笑:从这个观点来看,把那些搞翻译的人叫做“自然语言编译器”也不错,搞同声传译的直接就是interpreter