Составители:
Рубрика:
шении подмножество CTS и при этом действуют в соответствии
с указанными правилами, то пользователь языка получает воз-
можность использовать любую соответствующую специфика-
ции CLS библиотеку. То же самое верно и для разработчиков би-
блиотек: если их библиотеки используют только определяемое в
соглашении подмножество CTS и при этом написаны в соответ-
ствии с указанными правилами, то эти библиотеки можно ис-
пользовать из любого соответствующего спецификации CLS
языка.
1.1.3.2. JIT-компиляция
Программы для платформы .NET распространяются в виде так назы-
ваемых сборок (assemblies). Каждая сборка представляет собой совокуп-
ность метаданных, описывающих типы, и CIL-кода.
Ключевой особенностью выполнения программ в среде .NET являет-
ся JIT-компиляция. Аббревиатура JIT расшифровывается как Just-In-
Time, и термин JIT-компиляция можно перевести как компиляция про-
грамм «на лету». JIT-компиляция заключается в том, что CIL-код, находя-
щийся в запускаемой сборке, тут же компилируется в машинный код, на
который затем передается управление.
Такая схема выполнения программ в среднем является более эффек-
тивной, чем интерпретация инструкций CIL, так как потеря времени на
предварительную компиляцию CIL-кода с лихвой компенсируется высо-
кой скоростью работы откомпилированного кода.
В .NET реализованы два JIT-компилятора: один компилирует сборку
непосредственно перед ее выполнением, а другой позволяет откомпили-
ровать ее заранее и поместить в так называемый кэш откомпилированных
сборок. JIT-компилятор первого типа вызывается автоматически при за-
пуске программы, а JIT-компилятор второго типа реализован в виде слу-
жебной программы ngen, которая входит в состав .NET Framework SDK.
Программу ngen нельзя воспринимать как простой компилятор, поз-
воляющий превратить сборку .NET в обычное приложение Windows. Дело
в том, что откомпилированная сборка не может быть непосредственно за-
пущена пользователем – загрузчик выдает сообщение об ошибке, глася-
щее, что запускаемая программа не является правильным приложением
Windows. Откомпилированная сборка запускается системой только при
вызове исходной сборки!
1.1.3.3. Сборка мусора
Одни из самых неприятных ошибок, которые портят жизнь програм-
мисту, это, безусловно, ошибки, связанные с управлением памятью. В та-
ких языках, как C и C++, в которых управление памятью целиком возло-
Введение в архитектуру Microsoft .NET Framework
7
FreeBSD. Эта реализация называется Shared Source CLI (иногда можно ус-
лышать другое название – Rotor).
Рис. 1.3. Существующие реализации CLI и поддерживаемые ими
операционные системы
Итак, чтобы понять, как работает .NET, необходимо изучить специ-
фикацию CLI. Этим мы и займемся в ближайшее время, а пока перечис-
лим ее составные части:
• Общая система типов (Common Type System, сокращенно CTS)
– охватывает большую часть типов, встречающихся в распро-
страненных языках программирования.
• Виртуальная система исполнения (Virtual Execution System, со-
кращенно VES) – отвечает за загрузку и выполнение программ,
написанных для CLI.
• Система метаданных (Metadata System) – предназначена для
описания типов, хранится в независимом от конкретного языка
программирования виде, используется для передачи типовой
информации между различными метаинструментами, а также
между этими инструментами и VES.
• Общий промежуточный язык (Common Intermediate Language,
сокращенно CIL) – независимый от платформы объектно-ори-
ентированный байт-код, выступающий в роли целевого языка
для любого поддерживающего CLI компилятора.
• Общая спецификация языков (Common Language Specification,
сокращенно CLS) – соглашение между разработчиками языков
программирования и разработчиками библиотек классов, в ко-
тором определено подмножество CTS и набор правил. Если раз-
работчики языка реализуют хотя бы определенное в этом согла-
6
CIL и системное программирование в Microsoft .NET
.NET
Framework
Common
Language
Infrastructure
W
Mono
L W
SSCLI (Rotor)
F W
Portable.NET
L F
Windows
W
Linux
L
FreeBSD
F
6 CIL и системное программирование в Microsoft .NET Введение в архитектуру Microsoft .NET Framework 7 FreeBSD. Эта реализация называется Shared Source CLI (иногда можно ус- шении подмножество CTS и при этом действуют в соответствии лышать другое название – Rotor). с указанными правилами, то пользователь языка получает воз- можность использовать любую соответствующую специфика- ции CLS библиотеку. То же самое верно и для разработчиков би- .NET Mono блиотек: если их библиотеки используют только определяемое в Framework соглашении подмножество CTS и при этом написаны в соответ- W Common L W ствии с указанными правилами, то эти библиотеки можно ис- Language пользовать из любого соответствующего спецификации CLS Infrastructure языка. SSCLI (Rotor) Portable.NET 1.1.3.2. JIT-компиляция Программы для платформы .NET распространяются в виде так назы- F W L F ваемых сборок (assemblies). Каждая сборка представляет собой совокуп- ность метаданных, описывающих типы, и CIL-кода. W Windows L Linux F FreeBSD Ключевой особенностью выполнения программ в среде .NET являет- ся JIT-компиляция. Аббревиатура JIT расшифровывается как Just-In- Рис. 1.3. Существующие реализации CLI и поддерживаемые ими Time, и термин JIT-компиляция можно перевести как компиляция про- операционные системы грамм «на лету». JIT-компиляция заключается в том, что CIL-код, находя- щийся в запускаемой сборке, тут же компилируется в машинный код, на Итак, чтобы понять, как работает .NET, необходимо изучить специ- который затем передается управление. фикацию CLI. Этим мы и займемся в ближайшее время, а пока перечис- Такая схема выполнения программ в среднем является более эффек- лим ее составные части: тивной, чем интерпретация инструкций CIL, так как потеря времени на • Общая система типов (Common Type System, сокращенно CTS) предварительную компиляцию CIL-кода с лихвой компенсируется высо- – охватывает большую часть типов, встречающихся в распро- кой скоростью работы откомпилированного кода. страненных языках программирования. В .NET реализованы два JIT-компилятора: один компилирует сборку • Виртуальная система исполнения (Virtual Execution System, со- непосредственно перед ее выполнением, а другой позволяет откомпили- кращенно VES) – отвечает за загрузку и выполнение программ, ровать ее заранее и поместить в так называемый кэш откомпилированных написанных для CLI. сборок. JIT-компилятор первого типа вызывается автоматически при за- • Система метаданных (Metadata System) – предназначена для пуске программы, а JIT-компилятор второго типа реализован в виде слу- описания типов, хранится в независимом от конкретного языка жебной программы ngen, которая входит в состав .NET Framework SDK. программирования виде, используется для передачи типовой Программу ngen нельзя воспринимать как простой компилятор, поз- информации между различными метаинструментами, а также воляющий превратить сборку .NET в обычное приложение Windows. Дело между этими инструментами и VES. в том, что откомпилированная сборка не может быть непосредственно за- • Общий промежуточный язык (Common Intermediate Language, пущена пользователем – загрузчик выдает сообщение об ошибке, глася- сокращенно CIL) – независимый от платформы объектно-ори- щее, что запускаемая программа не является правильным приложением ентированный байт-код, выступающий в роли целевого языка Windows. Откомпилированная сборка запускается системой только при для любого поддерживающего CLI компилятора. вызове исходной сборки! • Общая спецификация языков (Common Language Specification, сокращенно CLS) – соглашение между разработчиками языков 1.1.3.3. Сборка мусора программирования и разработчиками библиотек классов, в ко- Одни из самых неприятных ошибок, которые портят жизнь програм- тором определено подмножество CTS и набор правил. Если раз- мисту, это, безусловно, ошибки, связанные с управлением памятью. В та- работчики языка реализуют хотя бы определенное в этом согла- ких языках, как C и C++, в которых управление памятью целиком возло-
Страницы
- « первая
- ‹ предыдущая
- …
- 8
- 9
- 10
- 11
- 12
- …
- следующая ›
- последняя »