Что такое net cil

СОДЕРЖАНИЕ

Основная информация

Процесс выполнения выглядит так:

инструкции

Байт-код CIL содержит инструкции для следующих групп задач:

Вычислительная модель

В последнем примере значения двух регистров, eax и edx, сначала помещаются в стек. Когда вызывается инструкция добавления, операнды «выталкиваются» или извлекаются, а результат «помещается» или сохраняется в стеке. Полученное значение затем извлекается из стека и сохраняется в eax.

Объектно-ориентированные концепции

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

Каждый метод должен (за некоторыми исключениями) находиться в классе. Так делает этот статический метод:

Метод Add не требует объявления какого-либо экземпляра Foo, потому что он объявлен как статический, и затем его можно использовать в C # следующим образом:

В CIL это будет выглядеть так:

Экземплярные классы

Создание объектов

В C # экземпляры классов создаются так:

И эти инструкции примерно такие же, как эти инструкции в CIL:

Вызов методов экземпляра

Методы экземпляра вызываются в C # следующим образом:

Как вызывается в CIL:

Метаданные

Метаданные могут быть данными в форме «атрибутов». Атрибуты можно настроить, расширив Attribute класс. Это мощная функция. Это дает создателю класса возможность украсить его дополнительной информацией, которую потребители класса могут использовать различными значимыми способами в зависимости от домена приложения.

Пример

Ниже представлена ​​базовая программа Hello, World, написанная на CIL. Будет отображена строка «Hello, world!».

Следующий код более сложен по количеству кодов операций.

В синтаксисе CIL это выглядит так:

Это просто представление того, как CIL выглядит на уровне виртуальной машины (ВМ). При компиляции методы сохраняются в таблицах, а инструкции хранятся в байтах внутри сборки, которая является переносимым исполняемым файлом (PE).

Поколение

Сборка и инструкции CIL генерируются либо компилятором, либо утилитой, называемой IL Assembler ( ILAsm ), которая поставляется со средой выполнения.

Исполнение

Своевременная компиляция

Своевременная компиляция (JIT) включает в себя превращение байтового кода в код, который немедленно исполняется ЦП. Преобразование выполняется постепенно во время выполнения программы. JIT-компиляция обеспечивает оптимизацию для конкретной среды, безопасность типов во время выполнения и проверку сборки. Для этого JIT-компилятор проверяет метаданные сборки на предмет любых незаконных обращений и соответствующим образом обрабатывает нарушения.

Опережающая компиляция

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

Заметное отличие от байт-кода Java состоит в том, что CIL поставляется с ldind, stind, ldloca и множеством инструкций вызова, которых достаточно для манипулирования указателями данных / функций, необходимых для компиляции кода C / C ++ в CIL.

Соответствующий код в CIL можно представить следующим образом:

Источник

Common Intermediate Language

Язык CIL также нередко называют просто IL (англ. Intermediate Language ), то есть просто «промежуточный язык».

Синтаксис и мнемоника языка CIL описываются стандартом ECMA-335. Спецификация CIL является составной частью более общей спецификации Common Language Infrastructure (CLI).

Пример кода

Пример программы Hello, World, написанной на CIL. Она выводит строку «Hello, world!».

Это ещё одна программа (на C#),

которая на CIL выглядит так:

Что такое net cil. Смотреть фото Что такое net cil. Смотреть картинку Что такое net cil. Картинка про Что такое net cil. Фото Что такое net cil

Полезное

Смотреть что такое «Common Intermediate Language» в других словарях:

Common Intermediate Language — (CIL) (teilweise auch nur Intermediate Language (IL)) ist eine Zwischensprache, in die alle Programme der Common Language Infrastructure übersetzt werden. CIL ist eine objektorientierte Assemblersprache und ist vollständig stackbasiert. Auf dem… … Deutsch Wikipedia

Intermediate language — Common Intermediate Language (CIL) (teilweise auch nur Intermediate Language (IL)) ist eine Zwischensprache, in die alle Programme der Common Language Infrastructure übersetzt werden. CIL ist eine objektorientierte Assemblersprache und ist… … Deutsch Wikipedia

Intermediate language — In computer science, an intermediate language is the language of an abstract machine designed to aid in the analysis of computer programs. The term comes from their use in compilers, where a compiler first translates the source code of a program… … Wikipedia

Microsoft Intermediate Language — Common Intermediate Language (CIL) (teilweise auch nur Intermediate Language (IL)) ist eine Zwischensprache, in die alle Programme der Common Language Infrastructure übersetzt werden. CIL ist eine objektorientierte Assemblersprache und ist… … Deutsch Wikipedia

C Intermediate Language — This article is about the simplified subset of C. For the Common Intermediate Language (also known as MSIL), see CIL. CIL (C Intermediate Language) is a simplified subset of the C programming language, as well as a set of tools for transforming C … Wikipedia

Источник

Синтаксис языка CIL

Важно отметить, что всестороннее и исчерпывающее описание синтаксиса и семантики CIL приведенo в официальной спецификации ЕСМА (ecma-335.pdf), доступной на веб-сайте ЕСМА International по адресу http://www.ecma-international.org.

В отличие от такого высокоуровневого языка, как C#, в CIL не поставляется простой общий набор ключевых слов. Вместо этого набор лексем, распознаваемых компилятором CIL, семантически разделен на три следующих основных категории: директивы CIL, атрибуты CIL и коды операций CIL.

Директивы CIL

Атрибуты CIL

Коды операций CIL

После определения сборки, пространства имен и набора типов на CIL с помощью различных директив и соответствующих атрибутов, последнее, что останется сделать — это предоставить для каждого из типов логику реализации. Для решения этой задачи в CIL поддерживаются так называемые коды операций (operation codes — opcodes). Как и в других низкоуровневых языках программирования, коды операций в CIL обычно имеют непонятный и нечитабельный вид. Например, для загрузки в память переменной string в CIL должен применяться код операции не с удобным для восприятия именем вроде LoadString, а со сложным для произношения именем ldstr.

Некоторые коды операций в CIL отображаются вполне естественным образом на соответствующие аналоги в C# (например, box, unbox, throw и sizeof). Коды операций в CIL всегда применяются только в рамках реализации членов и, в отличие от директив, никогда не сопровождаются префиксом в виде точки.

Источник

Промежуточный язык CIL

Важнейшие свойства CIL могут быть сформулированы следующим образом:

Давайте рассмотрим первые два свойства более подробно:

Поддержка объектной ориентации и интерфейсов

Так же, язык CIL имеет способность языкового взаимодействия, под которой подразумевается возможность для классов, написанных на одном языке, напрямую обращаться к классам, написанным на другом языке, т.е.:

класс, написанный на одном языке, может быть унаследован от класса, реализованного на другом языке

класс может содержать экземпляр другого класса, независимо от того, на каких языках написан каждый из них

объект может напрямую вызывать методы другого объекта, написанного на другом языке

объекты (или ссылки на объекты) могут передаваться между методами

при вызове методов между языками можно шагать в отладчике по вызовам, даже если это означает необходимость перемещения между фрагментами исходного кода, написанными на разных языках

Различие типов значений и типов ссылок

Как и любой язык программирования, IL предлагает множество предопределенных примитивных типов данных. Одна из особенностей IL, однако, заключается в том, что он делает четкое различие между значениями и ссылочными типами. — это те переменные, которые непосредственно хранят данные, в то время как ссылочные типы — это те переменные, которые просто хранят адрес, по которому соответствующие данные могут быть найдены.

В терминах С++ ссылочные типы можно рассматривать, как будто они обращаются к переменным через указатель, в то время как для Visual Basic лучшая аналогия для ссылочных типов — это объекты, обращение к которым в Visual Basic 6 всегда осуществляется по ссылке. В языке IL также установлена своя спецификация относительно хранения данных: экземпляры ссылочных типов всегда хранятся в области памяти, известной как managed heap, в то время как типы значений обычно хранятся в стеке (хотя, если типы значений объявлены как поля внутри ссылочных типов, то они также будут сохранены в managed heap).

Утилита ildasm.exe

Утилиту ildasm.exe также легко запустить, открыв в Visual Studio 2010 окно Command Prompt (Командная строка), введя в нем слово ildasm и нажав клавишу Enter:

Что такое net cil. Смотреть фото Что такое net cil. Смотреть картинку Что такое net cil. Картинка про Что такое net cil. Фото Что такое net cil

Давайте сначала составим простейшую сборку:

Что такое net cil. Смотреть фото Что такое net cil. Смотреть картинку Что такое net cil. Картинка про Что такое net cil. Фото Что такое net cil

Помимо содержащихся в сборке пространств имен, типов и членов, утилита ildasm.ехе также позволяет просматривать и CIL-инструкции, которые лежат в основе каждого конкретного члена. Например, в результате двойного щелчка на методе Main в классе Program открывается отдельное окно с CIL-кодом, лежащим в основе этого метода.

Что такое net cil. Смотреть фото Что такое net cil. Смотреть картинку Что такое net cil. Картинка про Что такое net cil. Фото Что такое net cil

Что такое net cil. Смотреть фото Что такое net cil. Смотреть картинку Что такое net cil. Картинка про Что такое net cil. Фото Что такое net cil

И, наконец, чтобы просмотреть содержимое манифеста сборки, необходимо дважды щелкнуть на значке MANIFEST.

Что такое net cil. Смотреть фото Что такое net cil. Смотреть картинку Что такое net cil. Картинка про Что такое net cil. Фото Что такое net cil

Несомненно, утилита ildasm.ехе обладает большим, чем было показано здесь количеством функциональных возможностей; все остальные функциональные возможности этой утилиты будут демонстрироваться позже в данном руководстве при рассмотрении соответствующих аспектов.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *