Comments 16
АСД
Антисептик-стимулятор Дорогова? Пожалуйста, никогда, не называйте так AST.
+1
AST (Association of Surgical Technologists — первое что выдал google.com)?
Но если вы считаете что термин на русском мало употребляемый, согласен на вариант АСД (AST).
А вообще при написании статьи меня сильно мучил вопрос — «Какие термины стоит переводить, а какие нет?». Голосовалку бы устроить…
Но если вы считаете что термин на русском мало употребляемый, согласен на вариант АСД (AST).
А вообще при написании статьи меня сильно мучил вопрос — «Какие термины стоит переводить, а какие нет?». Голосовалку бы устроить…
0
Как же Roslyn? Почему про него даже во введении нет?
+2
Еще не рассмотрены, помимо Roslyn (хотя он пока не зарелизился), как минимум:
Common Compiler Infrastructure (http://ccimetadata.codeplex.com/)
Mono.Cecil (http://www.mono-project.com/Cecil)
Common Compiler Infrastructure (http://ccimetadata.codeplex.com/)
Mono.Cecil (http://www.mono-project.com/Cecil)
0
Да, упомянуть про них стоило. Но я писал только про то, с чем работал.
Roslyn мне всегда казался более инструментом для анализа кода, чем для его генерации. Хотя генерировать он может. Но опыта работы с ним у меня нет, поэтому сказать насколько он удобен и производителен я не могу. И он CTP.
Common Compiler Infrastructure действительно предлагает удобные вещи, но я про него не знал. Опять же нет опыта использования, следовательно я только могу пересказать документацию (а я не очень люблю статьи типа «Я пересказал страничку overview своими словами»).
Mono.Cecil тоже не знал и тоже нет опыта.
Roslyn мне всегда казался более инструментом для анализа кода, чем для его генерации. Хотя генерировать он может. Но опыта работы с ним у меня нет, поэтому сказать насколько он удобен и производителен я не могу. И он CTP.
Common Compiler Infrastructure действительно предлагает удобные вещи, но я про него не знал. Опять же нет опыта использования, следовательно я только могу пересказать документацию (а я не очень люблю статьи типа «Я пересказал страничку overview своими словами»).
Mono.Cecil тоже не знал и тоже нет опыта.
0
Для чего всё это нужно и где это может пригодиться?
0
Самый распространенный вариант — динамический вызов конструкторов и установка значений при написании ORM или InversionOfControl фреймворков.
+3
Генерация proxy-классов (для любых целей), автоматическая реализация интерфейсов для дополнительных оберток с некоторой AOP-логикой, генерация всяческого шаблонного кода (для всяческих фреймворков), duck-typing. Почти все это можно сделать и используя компиляцию (CodeDom), но Reflection.Emit молниеносно быстр, что зачастую вполне его оправдывает.
0
Я использовал этот подход для генерации сериализаторов игровых классов для передачи по сети.
У игровых классов атрибутами помечены те поля, которые сериализуются и отмечено как они сериализуются — само значение или его дельта, double передается как fixed-int или fixed short и т.п.
При старте игры генерились сериализаторы индивидуальные, а потом уже в программе вызывались.
У игровых классов атрибутами помечены те поля, которые сериализуются и отмечено как они сериализуются — само значение или его дельта, double передается как fixed-int или fixed short и т.п.
При старте игры генерились сериализаторы индивидуальные, а потом уже в программе вызывались.
0
Еще как вариант при написании слабых событий очень полезно, что бы не использовать тормозную рефлексию при каждом вызове.
0
Еще добавлю, что использование Reflector'а (или dotPeek'а) совершенно неоценимо. Пишем обычный код, компилируем его, смотрим, что получается в итоге, и делаем похожим образом, не выдумывая свою последовательность CIL-инструкций.
+1
UFO just landed and posted this here
Sign up to leave a comment.
Генерируем на .Net