Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 10 стр.

UptoLike

шении подмножество 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++, в которых управление памятью целиком возло-