我在为我的编译器课程中编写C#编译器并继续进行工作。目前,我已经完成了教科书上关于编译器优化的大部分章节。
就大部分而言,当教科书编写时,并没有考虑到即时编译(Just-In-Time compilation),我很好奇C#编译器执行的静态预编译优化和JIT过程中执行的优化有什么不同?
当我与人们谈论针对CLR的编译时,我通常会听到:“大多数优化都是由JIT完成的”。
像循环展开、常量折叠/传播、指令交错这样的事情是由C#编译器在预-Jit时处理还是由Jitter处理?如果jitter没有处理它们,那么即时编译器独有的JIT优化是什么样的?