|
Исполнение кода сборки (часть 1)
управляемые модули содержат метаданные и код на промежуточном языке (IL). II, — не зависящий от процессора машинный язык, разработанный Microsoft после консультаций с несколькими коммерческими и учебными институтами, специализирующимися на разработке языков и компиляторов.
IL — язык более высокого уровня в сравнении с большинством других машинных
языков. Он позволяет работать с объектами и имеет команды для создания и инициализации объектов, вызова виртуальных методов и непосредственного мани-
пулирования элементами массивов. Он даже имеет команды генерации и захвата
исключений для обработки ошибок. IL можно рассматривать как объектно-ориентированный машинный язык.
Обычно разработчики программируют на высокоуровневых языках, таких как
С# или Visual Basic. Компиляторы этих языков создают IL-код. Между тем такой код
может быть написан и на языке ассемблера, и Microsoft предоставляет ассемблер
IL — ILAsm.exe. Кроме того, Microsoft поставляет и дизассемблер IL — ILDasm.exe.
Имейте в виду, что любой язык высокого уровня скорей всего использует лишь
часть потенциала CLR. При этом язык ассемблера IL открывает доступ ко всем
возможностям CLR. Так что, если выбранный вами язык программирования скрывает именно те функции CLR, которые вам нужны, можно написать какой-то фрагмент на ассемблере или на другом языке программирования, позволяющем их задействовать.
Единственный способ узнать о возможностях CLR, доступных при использовании конкретного языка, — изучить соответствующую документацию.
Еще один важный момент: IL не привязан к какой-либо конкретной аппаратной платформе. Это значит, что управляемый модуль, содержащий IL-код, может
исполняться на любой аппаратной платформе, если ОС, работающая на ней, содержит соответствующую версию CLR. Хотя первая реализация CLR работает только
на 32-разрядных Windows-платформах, разработка приложений с управляемым
IL делает программиста более независимым от архитектуры процессора.
Современные процессоры не могут исполнять команды IL напрямую, но процессоры будущего могут реализовать такую возможность. Для выполнения какого-либо метода его IL-код должен быть преобразован в команды процессора. Этим
занимается JIT-компилятор CLR.
Непосредственно перед исполнением Main CLR находит все типы, на которые
ссылается код Main. При этом CLR выделяет внутренние структуры данных, используемые для управления доступом к типам, на которые есть ссылки. метод
Main ссылается на единственный тип — Console, и CLR выделяет единственную
внутреннюю структуру. Эта внутренняя структура данных содержит по одной записи для каждого метода, определенного в типе. Каждая запись содержит адрес,
по которому можно найти реализацию метода. При инициализации этой структуры CLR заносит в каждую запись адрес внутренней, недокументированной функции, содержащейся в самой CLR. Я назвал эту функцию JITCompiler.
Когда M a i n первый раз обращается к WriteLine, вызывается функция JITCompiler,
Она отвечает за компиляцию IL-кода вызываемого метода в собственные команды процессора. Поскольку IL компилируется непосредственно перед исполнением (just in time), этот компонент CLR часто называют JJTter или JIT-компилятор (JIT-compiler).
Предыдущая стр.   
Оглавление   
Следующая стр.
Средняя оценка:     (1 - 1 голосов) Для оценки необходимо зарегистрироваться
Только зарегистрировавшиеся пользователи могут оставлять комментарии
Комментирует jwsoft 11.01.2010 21:47:55 Зачетная статья
|
|