Date: 17.05.2019 10:23:40
Найти что-либо в исходном коде компилятора не так то просто. Классы кодогенерации расположены в каталоге roslyn/src/Compilers/CSharp/Portable/CodeGen/. Поиском по github можно найти то, что вам нужно.
Однако, выражение for несколько особое - для него нет определенной процедуры кодогенерации, вместо этого компилятор предварительно заменяет его на эквивалентную последовательность выражений с использованием goto, условных переходов и инкрементов - это преобразование реализовано здесь: https://github.com/dotnet/roslyn/blob/master/src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_ForStatement.cs
// for (initializer; condition; increment) // body; // // becomes the following (with block added for locals) // // { // initializer; // goto end; // start: // body; // continue: // increment; // end: // GotoIfTrue condition start; // break: // }Эта последовательность уже подается на вход кодогенерации и соответственно генерируются IL-инструкции для этих операции (например для goto EmitGotoStatement генерирует инструкцию Br)
Намного проще изучать генерируемый компилятором код практически - скомпилировав его и открыв бинарник утилитой IL Disassembler.
Date: 18.05.2019 7:36:11
Проще всего также, практически - изучением генерируемого JIT ассемблерного кода в отладчике: https://docs.microsoft.com/ru-ru/visualstudio/debugger/how-to-use-the-disassembly-window?view=vs-2019 CoreCLR в части кодогенерации написана на С++, поэтому, если вы не знаете этот язык хотя бы на уровне чтения, вы не сможете извлечь эту информацию из исходников.
"Я вижу, что разработчикам есть, куда стремиться для взаимопонимания с пользователями"
Разработчикам чего? C#/.NET Core? Вроде и так открыты на полную, все в open source - и компилятор, и платформа, и документация по ним. Статьи в блогах по новым возможностям постоянно публикуются. Каналы для обратной связи тоже есть - как github issues, так и средство отправки отзывов из самой студии. Хотя материалов на русском языке действительно немного, если вы об этом.
Автор: VadimTagil