Izibook.club
Читать онлайн книги!
  • Главная
  • Жанры
  • Авторы
  • ТОП книг
  • ТОП авторов
  • Контакты

Язык программирования C#9 и платформа .NET5

Часть 346 из 642 Информация о книге

Роль директив CIL

Прежде всего, существует набор хорошо известных лексем CIL, которые используются для описания общей структуры сборки .NET Core. Такие лексемы называются директивами. Директивы CIL позволяют информировать компилятор CIL о том, каким образом определять пространства имен, типы и члены, которые будут заполнять сборку.

Синтаксически директивы представляются с применением префикса в виде точки (

.
), например,
.namespace
,
.class
,
.publickeytoken
,
.override
,
.method
,
.assembly
и т.д. Таким образом, если в файле с расширением
*.il
(общепринятое расширение для файлов кода CIL) указана одна директива
.namespace
и три директивы
.class
, то компилятор CIL сгенерирует сборку, в которой определено единственное пространство имен .NET Core, содержащее три класса .NET Core.

Роль атрибутов CIL

 Во многих случаях директивы CIL сами по себе недостаточно описательны для того, чтобы полностью выразить определение заданного типа .NET Core или члена типа. С учетом этого факта многие директивы CIL могут сопровождаться разнообразными атрибутами CIL, которые уточняют способ обработки директивы. Например, директива

.class
может быть снабжена атрибутом
public
(для установления видимости типа), атрибутом
extends
(для явного указания базового класса типа) и атрибутом
implements
(для перечисления набора интерфейсов, поддерживаемых данным типом).

На заметку! Не путайте атрибут .NET Core (см. главу 17) и атрибут CIL, которые являются двумя совершенно разными понятиями.

Роль кодов операций СIL

После того как сборка, пространство имен и набор типов .NET Core определены в терминах языка CIL с использованием различных директив и связанных атрибутов, остается только предоставить логику реализации для типов. Это работа кодов операций. В традициях других низкоуровневых языков программирования многие коды операций CIL обычно имеют непонятный и совершенно нечитабельный вид. Например, для загрузки в память переменной типа

string
применяется код операции, который вместо дружественного имени наподобие
LoadString
имеет имя
ldstr
.

Справедливости ради следует отметить, что некоторые коды операций CIL довольно естественно отображаются на свои аналоги в C# (например,

box
,
unbox
,
throw
и
sizeof
). Вы увидите, что коды операций CIL всегда используются внутри области реализации члена и в отличие от директив никогда не записываются с префиксом-точкой.

Разница между кодами операций и их мнемоническими эквивалентами в СIL

Как только что объяснялось, для реализации членов отдельно взятого типа применяются коды операций вроде

ldstr
. Однако такие лексемы, как
ldstr
, являются мнемоническими эквивалентами CIL фактических двоичных кодов операций CIL. Чтобы выяснить разницу, напишите следующий метод C# в проекте консольного приложения .NET Core по имени
FirstSamples
:

int Add(int x, int y)

{

  return x + y;

}

В терминах CIL действие сложения двух чисел выражается посредством кода операции

0X58
. В том же духе вычитание двух чисел выражается с помощью кода операции
0X59
, а действие по размещению нового объекта в управляемой куче записывается с использованием кода операции
0X73
. С учетом описанной реальности "код CIL" , обрабатываемый JIT-компилятором, представляет собой не более чем порцию двоичных данных.

К счастью, для каждого двоичного кода операции CIL предусмотрен соответствующий мнемонический эквивалент. Например, вместо кода

0X58
может применяться мнемонический эквивалент
add
, вместо
0X59
—
sub
, а вместо
0X73
—
newob
j. С учетом такой разницы между кодами операций и их мнемоническими эквивалентами декомпиляторы CIL, подобные
ildasm.exe
, транслируют двоичные коды операций сборки в соответствующие им мнемонические эквиваленты CIL. Вот как
ildasm.exe
представит в CIL предыдущий метод Add(), написанный на языке C# (в зависимости от версии .NET Core вывод может отличаться):

.method assembly hidebysig static int32 Add(int32 x,int32 y) cil managed

{

  // Code size 9 (0x9)

  .maxstack 2

  .locals init ([0] int32 int32 V_0)

  IL_0000:  /* 00   |                  */ nop

  IL_0001:  /* 02   |                  */ ldarg.0

  IL_0002:  /* 03   |                  */ ldarg.1

  IL_0003:  /* 58   |                  */ add

  IL_0004:  /* 0A   |                  */ stloc.0

  IL_0005:  /* 2B   | 00               */ br.s       IL_0007

  IL_0007:  /* 06   |                  */ ldloc.0

  IL_0008:  /* 2A   |                  */ ret

} //end of method

Если вы не занимаетесь разработкой исключительно низкоуровневого программного обеспечения .NET Core (вроде специального управляемого компилятора), то иметь дело с числовыми двоичными кодами операций CIL никогда не придется. На практике когда программисты, использующие .NET Core, говорят о "кодах операций CIL", они имеют в виду набор дружественных строковых мнемонических эквивалентов (что и делается в настоящей книге), а не лежащие в основе числовые значения.

Заталкивание и выталкивание: основанная на стеке природа CIL

В языках .NET Core высокого уровня (таких как С#) предпринимается попытка насколько возможно скрыть из виду низкоуровневые детали CIL. Один из особенно хорошо скрываемых аспектов — тот факт, что CIL является языком программирования, основанным на использовании стека. Вспомните из исследования пространств имен коллекций (см. главу 10), что класс

Stack<T>
может применяться для помещения значения в стек, а также для извлечения самого верхнего значения из стека с целью последующего использования. Разумеется, программисты на языке CIL не работают с объектом типа
Stack<T>
для загрузки и выгрузки вычисляемых значений, но применяемый ими образ действий похож на заталкивание и выталкивание.

Перейти к странице:
Предыдущая страница
Следующая страница
Жанры
  • Военное дело 4
    • Спецслужбы 4
  • Деловая литература 203
    • Банковское дело 3
    • Деловая литература 2
    • Корпоративная культура 13
    • Личные финансы 21
    • Малый бизнес 2
    • Маркетинг, PR, реклама 45
    • О бизнесе популярно 112
    • Отраслевые издания 2
    • Управление, подбор персонала 17
    • Ценные бумаги, инвестиции 3
    • Экономика 28
  • Детективы и триллеры 2756
    • Боевики 313
    • Дамский детективный роман 21
    • Детективы 424
    • Иронические детективы 181
    • Исторические детективы 414
    • Классические детективы 221
    • Криминальные детективы 155
    • Крутой детектив 118
    • Маньяки 15
    • Медицинский триллер 2
    • Политические детективы 44
    • Полицейские детективы 234
    • Прочие Детективы 815
    • Техно триллер 3
    • Триллеры 1197
    • Шпионские детективы 101
  • Детские 495
    • Детская образовательная литература 13
    • Детская проза 164
    • Детские остросюжетные 53
    • Детские приключения 262
    • Детские стихи 21
    • Детский фольклор 1
    • Книга-игра 1
    • Прочая детская литература 77
  • Детские книги 530
    • Детская фантастика 196
    • Детские детективы 3
    • Книги для подростков 23
    • Сказки 264
  • Документальная литература 809
    • Биографии и мемуары 531
    • Военная документалистика 7
    • Искусство и Дизайн 14
    • Критика 11
    • Научпоп 9
    • Прочая документальная литература 73
    • Публицистика 257
  • Дом и Семья 215
    • Домашние животные 14
    • Здоровье и красота 34
    • Кулинария 33
    • Прочее домоводство 8
    • Развлечения 3
    • Сад и Огород 8
    • Сделай сам 2
    • Спорт 10
    • Хобби и ремесла 7
    • Эротика и секс 110
  • Драматургия 109
    • Драма 106
    • Киносценарии 3
    • Мистерия 1
    • Трагедия 1
  • Жанр не определен 8
    • Разное 8
  • Компьютеры и Интернет 15
    • Базы данных 3
    • Интернет 3
    • Программирование 1
    • Программное обеспечение 1
    • Прочая компьютерная литература 10
  • Любовные романы 26591
    • Исторические любовные романы 955
    • Короткие любовные романы 2676
    • Любовно-фантастические романы 11044
    • Остросюжетные любовные романы 984
    • Порно 90
    • Прочие любовные романы 57
    • Слеш 416
    • Современные любовные романы 10981
    • Фемслеш 44
    • Эротика 6552
  • Научно-образовательная 374
    • Альтернативная медицина 5
    • Астрономия и Космос 7
    • Биология 32
    • Биофизика 2
    • Биохимия 2
    • Ботаника 3
    • Военная история 4
    • Геология и география 3
    • Государство и право 1
    • Детская психология 16
    • Зоология 3
    • Иностранные языки 2
    • Культурология 46
    • Литературоведение 20
    • Медицина 35
    • Обществознание 7
    • Педагогика 20
    • Политика 22
    • Прочая научная литература 58
    • Психотерапия и консультирование 51
    • Религиоведение 7
    • Секс и семейная психология 30
    • Технические науки 4
    • Физика 9
    • Философия 34
    • Химия 3
    • Экология 3
    • Юриспруденция 9
    • Языкознание 18
  • Образование 523
    • Бизнес 45
    • Биография и мемуары 46
    • Здоровье 10
    • История 297
    • Карьера 4
    • Психология 230
  • Поэзия и драматургия 42
    • Басни 2
    • Драматургия 11
    • Лирика 2
    • Поэзия 30
  • Приключения 761
    • Вестерны 14
    • Исторические приключения 419
    • Морские приключения 78
    • Природа и животные 31
    • Прочие приключения 212
    • Путешествия и география 52
  • Проза 2414
    • Антисоветская литература 5
    • Афоризмы 1
    • Военная проза 111
    • Историческая проза 321
    • Классическая проза 132
    • Контркультура 13
    • Магический реализм 92
    • Новелла 14
    • Повесть 24
    • Проза прочее 21
    • Рассказ 73
    • Роман 103
    • Русская классическая проза 73
    • Семейный роман/Семейная сага 3
    • Сентиментальная проза 10
    • Советская классическая проза 47
    • Современная проза 1859
    • Эпистолярная проза 2
    • Эпопея 5
    • Эссе, очерк, этюд, набросок 3
  • Прочее 1519
    • Газеты и журналы 5
    • Изобразительное искусство, фотография 12
    • Кино 13
    • Музыка 11
    • Подростковая литература 6
    • Театр 5
    • Фанфик 1472
  • Религия и духовность 364
    • Астрология 1
    • Буддизм 4
    • Православие 1
    • Прочая религиозная литература 4
    • Религия 24
    • Самосовершенствование 138
    • Хиромантия 1
    • Эзотерика 212
    • Язычество 1
  • Справочная литература 42
    • Прочая справочная литература 3
    • Путеводители 10
    • Руководства 12
    • Справочники 15
    • Энциклопедии 9
  • Старинная литература 153
    • Античная литература 1
    • Древневосточная литература 5
    • Мифы. Легенды. Эпос 34
    • Прочая старинная литература 114
  • Техника 2
    • Автомобили и ПДД 1
    • Архитектура 1
  • Фантастика и фентези 28631
    • Альтернативная история 4193
    • Боевая фантастика 5381
    • Героическая фантастика 1487
    • Городское фэнтези 2291
    • Готический роман 13
    • Детективная фантастика 751
    • Ироническая фантастика 102
    • Ироническое фэнтези 83
    • Историческое фэнтези 531
    • Киберпанк 318
    • Космическая фантастика 1815
    • Космоопера 56
    • ЛитРПГ 1331
    • Любовная фантастика 186
    • Любовное фэнтези 115
    • Мистика 520
    • Научная фантастика 929
    • Попаданцы 9506
    • Постапокалипсис 917
    • Сказочная фантастика 26
    • Социально-философская фантастика 544
    • Стимпанк 151
    • Технофэнтези 143
    • Ужасы 103
    • Ужасы и мистика 825
    • Фантастика 254
    • Фантастика: прочее 231
    • Фэнтези 11570
    • Эпическая фантастика 235
    • Юмористическая фантастика 1075
    • Юмористическое фэнтези 1678
  • Фольклор 7
    • Загадки 1
    • Народные сказки 5
    • Фольклор: прочее 2
  • Юмор 194
    • Анекдоты 1
    • Комедии 1
    • Прочий юмор 67
    • Сатира 3
    • Юмористическая проза 123
    • Юмористические стихи 5
Izibook.club

Бесплатная онлайн библиотека для чтения книг без регистрации с телефона или компьютера. У нас собраны последние новинки, мировые бестселлеры книжного мира.

Контакты
  • pereezdsayta@yandex.ru
Информация
  • Карта сайта
© izibook.club, 2026. | Вход
Этот сайт использует cookie для хранения данных. Продолжая пользоваться сайтом, вы даете свое согласие на работу с этими данными в соответствии с нашей политикой конфиденциальности.
Я согласен