проміжний мова
Розглянемо проміжний мову (IL) більш детально. Код IL не залежить від платформи, на якій буде проводитися виконання. При цьому компілятор для платформи .NET згенерує код 1L незалежно від того, яку мову програмування (Delphi, С #, Visual Basic.NET, Eiffel і т.д.) використовувався для створення програми. Як приклад ми створимо програму складання двох чисел. Єдине, що вона у нас буде вміти робити, - складати числа 2 і 3. Нижче наведено лістинг з кодом цієї програми на мові Delphi, Навіть не знаючи мови Delphi, можна зрозуміти сенс цієї програми, а на синтаксичні конструкції поки не звертайте уваги, program Sum; £ $ APPTYPE CONSOLE> uses
SumXY: = X + Y; Write (SumXY) и Read] n; end.
Після компіляції цієї програми буде отримано виконуваний файл Sum.exe. Цей файл не є звичайним виконуваним файлом, а являє збірку, яку можна виконати тільки на платформі .NET. Усередині цього файлу знаходяться маніфест, необхідні бібліотеки, команди IL і метадані, що описують програму sum, які легко побачити за допомогою програми ildasm.exe (рис. 2.2 і 2.3). Про це буде сказано далі.
Мал. 2.2. Компоненти програми Sum у вікні програми
На першому етапі вам не доведеться розбиратися з кодом IL, тому не намагайтеся зрозуміти, що там написано. Лише відзначте для себе, як просто отримати доступ до будь-якої збірці і дізнатися все, що необхідно для розуміння роботи елементів збірки. При цьому можете наочно переконатися, що компілятор Delphi генерує незалежний від платформи набір команд, а код IL.
Але чому Microsoft пішла по шляху створення IL і які переваги 1L перед звичайним набором залежних від платформи команд? Одна з переваг, про який вже згадувалося, - це можливість повного міжмовної взаємодії. Оскільки будь-який код на будь-якій мові програмування .NET компілюється в стандартний набір інструкцій IL, проблем із взаємодією між блоками коду IL не буде. При цьому взаємодія буде здійснюватися на довічним рівні, що є запорукою високої швидкодії.
Ще одне можливе перевага - незалежність від апаратної платформи. Можна припустити, що Виконавча .NET буде поширена на найрізноманітніші комп'ютерні платформи та операційні системи (відмінні від Windows), що вже відбулося з мовою Java.
Мал. 2.3. Код програми Sum мовою IL
Оскільки в збірках міститься сумісний із різними платформами код IL, а виконуються в кінцевому підсумку команди, розраховані на певну платформу, то хтось повинен взяти на себе роботу по компіляції IL в команди для потрібної платформи. Цим займається компілятор часу виконання (ЛТ). Компілятор JIT входить до складу срелі виконання .NET. Використовуючи код 1L, розробники можуть не думати про особливості архітектури центрального процесора певного комп'ютера - ці особливості будуть враховані ЛТ.
Відкомпілювалися з 1L переносних залежні команди компілятор ЛТ размешает в кеш-пам'яті, що значно прискорює роботу програми. Наприклад, під час першого виклику будь-якого методу ЛТ відкомпілює відноситься до цього методу код IL в переносних залежні команди. При повторних викликах цього методу ЛТ вже не буде займатися компіляцією, а просто візьме готовий код з кеш-пам'яті.