Что такое IL Weaving?

Я только что видел сегодня Сообщение Айенде о PostSharp. Я загрузил код и попробовал его, и я подумал, что это самый крутой и простой в использовании способ обработки АОП, который я когда-либо видел.

В своем посте Айенде говорит, что PostSharp выполняет свою магию через И.Л. Ткачество. Теперь, на некотором абстрактном уровне, я могу понять, что это значит, но я хотел посмотреть, есть ли более подробный ответ. К сожалению, впервые за очень долгое время Google оказался для меня пустым. И поэтому я подумал, что это будет отличный вопрос для StackOverflow (поскольку я подписался на блог Джеффа уже пару лет и знал, что этот сайт делает свое дело).

Так что же такое IL Weaving и как это делается?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
54
0
13 063
3

Ответы 3

IL Weaving аналогичен ByteCode Weaving. .Net компилируется в промежуточный язык, которым управляет .NET clr. IL Weaving в основном анализирует и изменяет промежуточный язык. Поскольку это делается на этом уровне, это можно сделать для всех языков .NET.

Может помочь, если вместо этого вы используете Google MSIL Injection. Эта ссылка взята из PostSharp и хорошо ее объясняет.

Моя компания недавно купила продукт под названием dynaTrace для диагностики производительности. Он использует внедрение MSIL для инструментария методов. По сути, он добавляет код IL перед вашим методом, а затем - методом (я уверен, что это гораздо больше).

И здесь - довольно сложное, но хорошее объяснение процесса.

Ваша вторая ссылка («здесь») больше не доступна, вероятно, из-за того, что соответствующая проблема была заархивирована. Вы случайно вспомнили год / месяц проблемы, о которой говорили? Заранее спасибо.

Thomas 23.03.2016 18:39

Ссылка резервная. Я добавил информацию об открытии.

Nebula 20.07.2017 10:03

Плетение относится к процессу внедрения функциональности в существующую программу. Концептуально это можно сделать на нескольких уровнях:

  • Плетение исходного кода будет вводить строки исходного кода до того, как код будет скомпилирован
  • Плетение IL (для .NET) добавляет код в виде инструкций IL в сборку
  • Плетение байтового кода (для Java) работает с файлом класса, см. Эти комментарии относительно AspectJ

Теоретически вы могли бы пойти еще глубже и переплести исполняемый файл, скомпилированный с собственными инструкциями, но это добавило бы много сложности, и я не знаю ничего, что делает это.

Нативное "плетение" инструкций - обычное дело в родных исполняемых отладчиках. В наборе инструкций Intel x86, например, установка точки останова в коде требует вставки кода операции INT 3 в целевой код. Это перезаписывает встроенную инструкцию, поэтому вам также нужно сохранить байт, который был там, и вернуть его после срабатывания точки останова, чтобы программа работала нормально. Да, это сложно, поэтому писать отладчики - изысканное искусство.

dthorpe 25.05.2011 09:09

несколько ссылок, которые я собрал по этой теме: плетение исходного кода tara.tcd.ie/handle/2262/1239; Ил плетение gutgames.com/post/Creating-an-AOP-Library-in-Net-Part-1.aspx‌; ByteCode переплетения eclipse.org/aspectj/doc/released/devguide/…; Аспект № developerfusion.com/article/5307/…

Jeroen Wiert Pluimers 10.06.2011 13:50

Обратите внимание, что в комментарии, который оставил Джерун, сообщение с gutgames.com фактически говорит о реализации АОП с использованием подклассов, а не переплетения IL.

JaCraig 29.06.2011 19:19

Другие вопросы по теме