Создание компилятора языка для .NET Framework
ОГЛАВЛЕНИЕ
Существуют сотни компиляторов для десятков языков, предназначенные для .NET Framework. .NET CLR сгоняет эти языки в одну песочницу, где они могут играть и мирно взаимодействовать. Крутой разработчик может воспользоваться этим, при создании крупных программных систем, добавляя кусочек C# и каплю Python. Конечно, мастерство этих разработчиков впечатляет, он они и рядом не стоят с истинными мастерами – экспертами по компиляторам, ибо именно эти эксперты обладают глубоким пониманием виртуальных машин, структуры языков и составляющих компонентов этих языков с компиляторами.
В этой статье, я разберу код для компилятора, написанного на C# (метко названного компилятором Good for Nothing («Бесполезным»)), а попутно представлю читателям высокоуровневую архитектуру, теорию и API-интерфейсы .NET Framework, необходимые для создания собственного компилятора .NET. Я начну с определения языка, исследую архитектуру компилятора и затем продемонстрирую подсистему создания кода, которая выдает сборку .NET. Цель здесь заключается в том, чтобы помочь читателям понять основы разработки компиляторов и дать твердое, высокоуровневое понимание того, как языки эффективно ориентируются на CLR. Я не буду здесь разрабатывать эквивалент C# 4.0 или IronRuby, но мой рассказ все же содержит достаточно конкретики, чтобы разжечь в заинтересованных читателях страсть к искусству разработки компиляторов.