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