* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Промежуточный язык
31 марта 2009
Рассмотрим промежуточный язык (IL) более подробно. Код IL не зависит от плат- формы, на которой будет производиться выполнение. При этом компилятор для платформы .NET сгенерирует код IL вне зависимости от того, какой язык профаммиро- вания (Delphi, C#, Visual Basic.NET, Eiffel и т.д.) использовался для создания профам- мы. В качестве примера мы создадим профамму сложения двух чисел. Единственное, что она у нас будет уметь делать, — складывать числа 2 и 3. Ниже приведен листинг с кодом этой профаммы на языке Delphi. Даже не зная языка Delphi, можно понять смысл этой профаммы, а на синтаксические конструкции пока не обращайте внимания. program Sum; {$APPTYPE CONSOLE} uses SysUtils; var X,Y,SumXY: Integer; begin X := 2; Y := 3; SumXY := X + Y; Write(SumXY); Readln; end. После компиляции этой программы будет получен исполняемый файл Sum.exe. Этот файл не является обычным исполняемым файлом, а представляет сборку, ко- торую можно выполнить только на платформе .NET. Внутри этого файла находятся манифест, необходимые библиотеки, команды IL и метаданные, описывающие программу Sum, которые легко увидеть с помощью программы ildasm.exe На первом этапе вам не придется разбираться с кодом IL, поэтому не старайтесь понять, что там написано. Лишь отметьте для себя, как просто получить доступ к лю- бой сборке и узнать все, что необходимо для понимания работы элементов сборки. При этом можете наглядно убедиться, что компилятор Delphi генерирует не зависи- мый от платформы набор команд, а код IL.
Но почему Microsoft пошла по пути создания IL и какие преимущества IL перед обычным набором зависимых от платформы команд? Одно из преимуществ, о кото- ром уже упоминалось, — это возможность полного межъязыкового взаимодействия. Поскольку любой код на любом языке программирования .NET компилируется в стандартный набор инструкций IL, проблем с взаимодействием между блоками кода IL не будет. При этом взаимодействие будет производиться на двоичном уровне, что является залогом высокого быстродействия. Еще одно возможное преимущество — независимость от аппаратной платформы. Можно предположить, что среда выполнения .NET будет распространена на самые разные компьютерные платформы и операционные системы (отличные от Windows), что уже произошло с языком Java. Поскольку в сборках содержится независимый от платформы код IL, а выполня- ются в конечном итоге команды, рассчитанные на определенную платформу, то кто- то должен взять на себя работу по компиляции IL в команды для нужной платформы. Этим занимается компилятор времени исполнения (ЛТ). Компилятор ЛТ входит в состав среды исполнения .NET. Используя код IL, разработчики могут не думать об особенностях архитектуры центрального процессора определенного компьютера — эти особенности будут учтены ЛТ. Откомпилированные из IL платформенно-зависимые команды компилятор ЛТ раз- мещает в кэш-памяти, что значительно ускоряет работу приложения. Например, при первом вызове какого-либо метода ЛТ откомпилирует относящийся к этому методу код IL в платформенно-зависимые команды. При повторных вызовах этого метода ЛТ уже не будет заниматься компиляцией, а просто возьмет готовый код из кэш-памяти.