Почему код посткомпиляции является инжекцией лучшая идея, чем предварительная компиляция кодирует инжекцию?

Таким образом, все мы знаем, что C# не имеет подобного C макро-препроцессора (и существует хороший поток на почему здесь). Но теперь, когда AOP наращивает обороты, кажется, что мы начинаем делать материал с постпроцессорами, которые мы раньше делали с препроцессорами (примите во внимание, что я только намочил ноги с PostSharp так, возможно, от основы).

Я - огромный поклонник атрибутов в C#, но если препроцессор был не учтен на серьезных основаниях (который, как бывший пользователь MFC я все еще вопрос, но тем не менее принимает), почему код посткомпиляции является инжекцией лучшая идея, чем предварительная компиляция кодирует инжекцию?

5
задан Community 23 May 2017 в 12:33
поделиться

4 ответа

Причины, по которым я выбрал посткомпиляцию при разработке PostSharp 5 лет назад:

  1. Языковой агностицизм.
  2. MSIL имеет более стабильные спецификации по сравнению с языками высокого уровня (которые обновляются нетривиально каждые два года).
  3. В большинстве случаев MSIL - это уровень абстракции, который вам нужен при работе с аспектами. Вам не нужно знать все эквивалентные конструкции (подумайте, f 'using' и 'try-finally').
  4. До 2008 года никому не удавалось создать достойный компилятор C #. Трудности, с которыми столкнулся Моно, были достаточно впечатляющими, даже если они уже наверстали упущенное.
  5. Работа с двоичным кодом казалась намного быстрее, чем работа с исходным кодом.
  6. Работа с двоичной сборкой делает возможным ее выполнение - обрабатываемая сборка может трансформироваться сама. Это было неслыханно до того, как PostSharp Laos был выпущен впервые.

При этом реализации АОП для C / C ++ действительно являются предварительным компилятором (WeaveC), а реализации на Java - расширением компилятора (по той хорошей причине, что существует множество реализаций OSS компилятора Java).

-gael

6
ответ дан 18 December 2019 в 13:14
поделиться

Технически существует предварительная возможность компиляции для C #, встроенная в Visual Studio: Text Template Transformation Toolkit (T4) . Это позволяет вам делать удивительные вещи на этапе предварительной компиляции и является основой для многих продуктов, таких как некоторые ORM и т. Д.

4
ответ дан 18 December 2019 в 13:14
поделиться

Если бы Вы выполняли предварительную компиляцию, Вам пришлось бы интерпретировать исходные файлы со всех поддерживаемых Вами языков, а затем генерировать код на этом языке, прежде чем он будет передан компилятору. С помощью пост-обработки можно просто использовать рефлексию для изучения ассемблеров, будь то исходный язык C#, Visual Basic или что-то в этом роде.

2
ответ дан 18 December 2019 в 13:14
поделиться

Это просто проще. IL чертовски легче анализировать, чем исходный код C #. И это не зависит от языка.

2
ответ дан 18 December 2019 в 13:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: