非Golang深度用户(只写过Hello world级别的),但最近在搞Golang编译器的开发(没错,没写过Golang的人在搞Golang的编译器 )。

从编译器角度,Golang编译器具备了基于SSA的各种典型优化算法,可以自举,同时有自己的链接器,可以比较方便地做LTO。但当前仍然存在几个不足:

  • 中端target independent优化仍然比较少,很多GCC/LLVM上有的优化还没实现;
  • 后端target dependent相关的优化比较欠缺,并且有很多平台特性(向量指令、某些加速指令)没有用起来(某些Target会用汇编来优化Runtime);
  • 指令调度能力非常欠缺;
  • ……

单从编译器角度来看,对于单线程的代码,Golang和C编译出来的代码在一般情况下应该不会有数量级的性能,Golang会略劣于C;而对于多线程代码,Golang有编程模型上的优势。

所以,各取所需吧,No Silver Bullet!