Россия, Челябинск, Южно-Уральский Государственный Университет (НИУ) |
Введение и обзор платформы .NET
Введение
Данный курс посвящен принципам разработки компиляторов. Основные задача данного курса - познакомить студентов с базовыми идеями и методами, используемыми при создании современных компиляторов, а также дать практические навыки написания простых компиляторов. В качестве целевой платформы для компиляторов в данном курсе используется Microsoft .NET. Подразумевается, что к моменту окончания данного курса большинство студентов смогут самостоятельно создать работающий компилятор с простого C#-подобного языка программирования.
Теория создания компиляторов активно развивалась в течение последних 50-60 лет и к сегодняшнему дню в данной области накоплено огромное количество знаний. Поэтому практически невозможно подробно осветить все вопросы создания компиляторов в рамках университетского курса. В этом курсе авторы пытаются лишь преподать основные принципы создания компиляторов и познакомить студентов с некоторыми типичными распространенными приемами. Для дальнейшего совершенствования полученных навыков студенту необходима практика и самостоятельное изучение последних достижений в этой области.
Курс состоит из двух частей - теоретической и практической. Теоретическая часть организована в виде презентаций и данного учебника, а практическая часть состоит из демонстраций и самостоятельных упражнений.
Для полноценного понимания курса студенту потребуются базовые знания языка C# и платформы .NET в целом. Но так как эти знания еще нельзя считать повсеместно распространенными, курс содержит краткое введение в .NET, которое поможет студентам получить представление об этих технологиях, а также оценить свои знания платформы .NET.
В этой лекции обсуждаются следующие вопросы:
- Общая идея архитектуры .NET
- Достоинства и недостатки .NET
- Схема трансляции программ в .NET
- Основные черты промежуточного представления, используемого в .NET (MSIL)
- Безопасность в .NET
- Объектная модель .NET
- Понятие сборки. Манифест сборки.
- Модель безопасности в .NET
- Единая система типов данных
Обзор платформы .NET
Платформа Microsoft .NET появилась относительно недавно, в 2000 году. Более того, на момент написания данного курса платформа все еще находилась в стадии бета-тестирования (при создании примеров авторы использовали вторую бета-версию Visual Studio.NET). Тем не менее, технологические преимущества платформы .NET в совокупности с активной маркетинговой поддержкой приводят к тому, что популярность .NET неуклонно растет. Выпуск платформы .NET наверняка коснется всех разработчиков программ для Windows. Поэтому чтение курсов, основанных на .NET, представляется чрезвычайно полезным для студентов: к моменту выпуска студентов из университета у них уже будут знания технологий, с которыми они, скорее всего, будут непосредственно работать.
Первые несколько лекций данного курса посвящены описанию собственно платформы .NET. Практически любой курс, посвященный созданию компиляторов, содержит подробное описание целевой платформы, для которой планируется генерация конечного кода. В большинстве случаев - это описание архитектуры и ассемблера целевого компьютера. Однако в нашем случае мы приводим описание виртуальной (т.е. несуществующей физически) машины, которая описывается спецификацией платформы .NET. С точки зрения преподавания разработки компиляторов это и хорошо, и плохо: с одной стороны, студенты на практике познакомятся с популярной сегодня идеей использования виртуальных машин, но с другой стороны, некоторые аспекты работы с конкретной машинной архитектурой остаются скрытыми, так как об этом заботится не разработчик компилятора, а авторы платформы .NET. Тем не менее, мы решили также осветить различные аспекты написания компиляторов, не являющиеся необходимыми при написании компиляторов, ориентированных на .NET, но необходимыми при написании компиляторов для других платформ, в целях создания у студентов более полного представления о различных вариантах создания компиляторов.
Общая схема архитектуры .NET
На рисунке представлена общая схема трансляции в .NET (рисунок заимствован из статьи Дж.Рихтера, опубликованной в сентябрьском выпуске 2000 года журнала MSDN Magazine).
Исходные тексты программ компилируются в специальное промежуточное представление ( Microsoft Intermediate Language, часто употребляется сокращение IL или MSIL). Промежуточное представление содержит всю необходимую информацию о программе, но не привязано к какому-либо определенному языку программирования или к машинному коду какой-либо целевой платформы. Для запуска программы необходимо специальное окружение, исполняющее программы, и библиотеки динамической поддержки (execution engine & runtime). Важной особенностью трансляции в .NET является то, что промежуточное представление не интерпретируется; вместо этого используется механизм компиляции времени исполнения, который генерирует машинный код. Подразумевается, что большинство программ, исполняемых на платформе .NET, будет использовать многочисленные стандартные классы, предоставляющие базовую функциональность (от работы с данными до встроенных механизмов безопасности).
На последующих слайдах мы кратко остановимся на основных преимуществах платформы .NET по сравнению с существующими подходами.