基于Golang的Go编译器能否比基于C的Go编译器更优秀?
基于Golang的Go编译器能否比基于C的Go编译器更优秀? 我一直想知道,用自身语言编写的编译器是否有可能比用特定语言编写的父语言编译器更好?例如,在这种情况下,基于Go语言编写的Go编译器能否产生比基于C语言编写的父Go编译器更好的结果?我认为从性能角度来看,它要么性能相当,要么性能更低(因为随着新复杂功能的增加,生成的汇编代码大小会增加)。我之前就此主题发表了一篇小文章在此处。
从性能和优化的角度来看,维护和改进基于C语言的Go编译器难道不是一个更好的选择吗?我确实理解,使用更高级的语言编写编译器代码能使社区更容易做出贡献,并且编写新功能也更容易,但是编写的舒适性和便利性是否也会导致性能/优化的损失呢?我只是有点担心,基于Go的程序未来是否会变得更慢(失去其独特卖点),就像Java那样。
这些只是我初步的想法,期待社区和核心贡献者的想法和观点。
更多关于基于Golang的Go编译器能否比基于C的Go编译器更优秀?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我想我需要更好地理解Go编译器和运行时的工作原理,才能理解Go是如何处理并发的。你有什么好的参考资料可以更好地解释这一点吗?
更多关于基于Golang的Go编译器能否比基于C的Go编译器更优秀?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
编译器与 Go 的并发特性无关,这些特性是 Go 运行时的属性。
编译器需要了解的关于并发的一切,就是如何将启动 Go 协程的操作转换为虚拟机指令,以及发送和接收操作需要生成何种指令。
Go 与 C 之间并不存在父子关系。(那么,用 B 语言或汇编语言编写的 C 编译器会更好吗?)
此外,Go 提供了易于使用的并发机制,Go 编译器也利用了这一点。在当前的多核机器上,这可能使得 Go 编译器比复杂度相似的 C 语言实现运行得更快。
但如果 Go 1.5 编译器是用 Go 1.4 编写的,而 Go 1.4 包含一些 C 代码和剩余的 Go 1.3 代码,那么这一切不都归结于 Go 1.2 的编译器代码吗?Go 1.2 的编译器代码是纯 C 代码(如果我没记错的话)。那么,这不就是我们用来生成汇编代码并最终生成二进制文件所依赖的底层代码吗?
如果实现正确,用C语言编写的编译器和用Go语言编写的编译器可以为相同的输入生成相同的代码。即使是使用Rust、Erlang或R语言编写的编译器也能做到这一点。
如果你只比较生成的代码,那么编译器的实现语言是无关紧要的,你可以让它们都以相同的方式生成代码。
当然,它们在生成结果时的运行时间、创建结果时使用的内存等方面可能有所不同。
尽管编译的持续时间或编译器的内存消耗通常只被视为次要因素,但更重要的是生成的代码是“优质”的。
话虽如此,许多语言都力求实现自举,这某种程度上证明了该语言已准备好投入生产使用,同时也让每一位了解该语言的开发者都能帮助优化和改进编译器。


