#c# #.net #codedom
#c# #.net #codedom
Вопрос:
Можете ли вы очень кратко объяснить, что такое CodeDom и для чего он используется, на простом примере из реальной жизни?
Простой пример, который объясняет, зачем мне это нужно как разработчику, в каких сценариях?
Спасибо
Ответ №1:
CodeDom расшифровывается как объектная модель документа кода. По сути, это ваш код, представленный иерархическим деревом объектов, моделью.. Рассмотрим метод с некоторыми инструкциями в нем:
int Foo(int bar)
{
int i = 0;
if ( bar == 1 ) i = 1;
return i;
}
В результате DOM будет выглядеть следующим образом:
method foo
declaration
if (expression)
assignment
return
Подобная модель, представляющая ваш код, позволяет вам выполнять с ним различные манипуляции или проверки.
Комментарии:
1. Можете ли вы описать, как это связано с абстрактным синтаксическим деревом?
2. Я, конечно, знаю, что такое ASTS, и я действительно знаю, как их использовать. DOM ставит меня в тупик. Это выглядит как плохое представление программы; похоже, оно ни для чего не подходит (C #, VB.net, …). В нем недостаточно деталей, чтобы фиксировать выражения, насколько я понимаю. В документах MS не указано, какова его цель на самом деле. Вы говорите, что можете «выполнять различные манипуляции» с ним. Например, что? Могу ли я преобразовать C # в DOM? Могу ли я создать DOM и создавать C #? Могу ли я создать произвольную программу на C #? Почему / why not?
3. На самом деле, я более или менее объясняю концепцию CodeDom, а не конкретную реализацию. Однако на самом деле вы в основном правы. Реализация CodeDom, включенная Microsoft, завершена только наполовину. Вы не можете превратить C # в CodeDom, но вы можете превратить CodeDom в код и даже в сборку. Несмотря на это, реализованы даже не все языковые функции.
4. Вся причина, по которой мы (сообщество компиляторов, а не только я) используем ASTS, заключается в том, что мы не получаем какое-то наполовину испеченное представление программы. Я видел множество попыток создать «универсальное представление программы». Большинство из них продвинулись дальше, чем MS CodeDom, и все равно терпят неудачу, потому что не могут представить все точные детали программы. (Аргумент о том, что выражения представлены … в виде строк, для меня не является отправной точкой; причина, по которой синтаксический анализатор создает AST, заключается в том, чтобы избежать необходимости разбора при обработке материала). Итак, кто использует CodeDom? Вы не можете использовать его для анализа.
5. Вы слышите, как я рекламирую CodeDom, внедренный Microsoft? или вы слышите, как я объясняю, что такое DOM кода? Хотя я не знаю, стал бы ли я описывать codedom как AST. В нем осталось не так много «синтаксиса».
Ответ №2:
CodeDom представляет код структурированным образом. Вы хотели бы использовать его, если хотите написать программу, которая анализирует код, такой как ReSharper, или генерирует код. Для получения дополнительной информации смотрите: http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx
Комментарии:
1. @Andrew: Я не понимаю вашего комментария, пожалуйста, объясните.
2. В этом нет ничего важного 🙂 Просто даю 1
3. Хе-хе, спасибо. Ваши комментарии в этом вопросе, безусловно, странные… Особенно тот, который вы только что удалили 😉
4. Вы бы хотели использовать его для анализа кода, если бы они когда-либо реализовывали синтаксический анализ. AFAIK, синтаксический анализ никогда не был завершен.
5. Похоже, это не очень полезно для анализа материала. Смотрите комментарии к другим ответам….