Перевод статьи "Что такое управляемый код?"
От: V-kont  
Дата: 08.02.09 22:27
Оценка:
В принципе, в книгах по программированию не особо разъясняют про "управляемый код". А вот здесь есть довольно внятное и краткое описание что же это такое (естественно, с позиции Microsoft). Решил перевести, но запутался в некоторых деталях. Поэтому просьба подсказать, где я наделал ошибок. (После исправления хочу дать ссылку в Википедии (в соответствующей статье) сюда.)

Собственно, сам перевод:

Что такое управляемый код?

Недавно я собрал воедино кое-какую справочную информацию и решил ею поделиться здесь. Я, естественно, не претендую на новизну, но по крайней мере Гугл поможет мне найти ее в следуюший раз, когда она мне потребуется

Управляемый код — это код, выполнение которого управляется .NET Framework Common Language Runtime. "Управляемый" относится к механизму взаимодействия между родным исполнимым кодом и его управляющей средой. Данный механизм предусматривает, что на любом этапе исполнения управляющая среда может остановить исполнение процессором и получить конкретную информацию о текущих адресах инструкций процессора. Информация должна отражать текущее состояние среды запуска, как например, содержимое регистров или стека памяти.

Необходимая информация представляется на Промежуточном Языке (Intermediate Language, сокр. IL) и в связанных с этим кодом метаданных, т.е. в виде символьной информации, описывающей все точки входа и конструкции, представленные в IL (например, методы, свойства) и их характеристики. Стандарт Общеязыковой Инфраструктуры (Common Language Infrastructure, сокр. CLI) (главной коммерческой реализацией которого является CLR) описывает метод кодирования информации и соответствие языкам программирования, для которых предназначена среда исполнения, корретного кодирования. Все, что разработчик, должен знать, это то что любой из языков, которые ориентированы на производство средой управляемого кода, на выходе получает PE-файлы, содержащие IL и метаданные. Существует множество подобных языков на выбор, поскольку есть существует около 20 различных языков, разрабатываемых сторонними компаниями — от COBOL до Camel — в дополнение к C #, J #, Vb. Net, JScript. Net, и C + + от Microsoft.

Прежде чем запустить код, IL компилируется в родной исполняемый код. И, поскольку данная компиляция производится средой управляемого исполнения (или, точнее, компилятором среды запуска, которому известна целевая среда управляемого исполнения), среда управляемого исполнения может давать некоторые гарантии о том, что код будет делать. Она может добавлять ловушки (traps) и вызовы сборки мусора, за исключением обработки ошибок, механизмов безопасности типов, проверки границ массивов и индексов, и так далее. Например, такое компилятор позволяет рассчитывать на выгрузку стека кадров, только благодаря тому, что сборщик мусора может запускаться в фоновом режиме отдельным потоком, постоянно обрабатывая стек активных вызовов, находя все истоники, отслеживая все "живые" объекты. Кроме того, поскольку IL обладает понятием о типобезопасности, движок исполнения будет поддерживать гарантированную типобезопасность путем уничтожения целого класса ошибок программирования, которые часто приводят к появлению дыр в безопасности.

В противоположность этому неуправляемый мир: неуправляемые исполняемые файлы в основном представляют собой двоичные образы x86-кода, загруженного в память. Счетчик программы учитывает команду на размещение и это последнее, о чем сообщается операцинной системе. Есть местные защиты вокруг управления памятью и портов ввода/вывода (и прочее), но система фактически не знает, что делает приложение. Таким образом, это не дает никаких гарантий по поводу того, что происходит, когда приложение выполняется.

Брэд Абрамс
Re: Перевод статьи "Что такое управляемый код?"
От: nikov США http://www.linkedin.com/in/nikov
Дата: 09.02.09 12:08
Оценка: 4 (2)
Здравствуйте, V-kont, Вы писали:

VK>Стандарт Общеязыковой Инфраструктуры (Common Language Infrastructure, сокр. CLI) (главной коммерческой реализацией которого является CLR) описывает метод кодирования информации и соответствие языкам программирования, для которых предназначена среда исполнения, корретного кодирования.

The Common Language Infrastructure (CLI) Standard (which the CLR is the primary commercial implementation) describes how the information is to be encoded, and programming languages that target the runtime emit the correct encoding.

Стандарт CLI (основной коммерческой реализацией которого является CLR) описывает метод кодирования информации, а компиляторы, ориентированные на использование рантайма, генерируют правильным образом закодированную информацию.

VK>Все, что разработчик, должен знать, это то что любой из языков, которые ориентированы на производство средой управляемого кода, на выходе получает PE-файлы, содержащие IL и метаданные.

All a developer has to know is that any of the languages that target the runtime produce managed code emitted as PE files that contain IL and metadata.

Все, что разработчик должен знать — любые рантайм-ориентированные компиляторы производят управляемый код, сгенерированный в виде PE-файлов, которые содержат IL и метаданные.

VK>Она может добавлять ловушки (traps) и вызовы сборки мусора, за исключением обработки ошибок, механизмов безопасности типов, проверки границ массивов и индексов, и так далее.

It can insert traps and appropriate garbage collection hooks, exception handling, type safety, array bounds and index checking, and so forth.

Она может добавлять ловушки (traps) и вызовы сборки мусора, обработку исключений, механизмы безопасности типов, проверку границ массивов и индексов, и так далее.

VK>Например, такое компилятор позволяет рассчитывать на выгрузку стека кадров, только благодаря тому, что сборщик мусора может запускаться в фоновом режиме отдельным потоком, постоянно обрабатывая стек активных вызовов, находя все истоники, отслеживая все "живые" объекты.

For example, such a compiler makes sure to lay out stack frames and everything just right so that the garbage collector can run in the background on a separate thread, constantly walking the active call stack, finding all the roots, chasing down all the live objects.

Например, такой компилятор гарантирует правильное расположение фреймов стека и всего остального, чтобы сборщик мусора мог запускаться в фоновом режиме отдельным потоком, проходя активный стек вызовов, находя все "корни GC", отслеживая все "живые" объекты.
Re[2]: Перевод статьи "Что такое управляемый код?"
От: V-kont  
Дата: 09.02.09 19:00
Оценка:
Спасибо за поправки!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.