Можете ли вы очень кратко объяснить, что такое CodeDom и для чего он используется, на простом примере из реальной жизни?

#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. Похоже, это не очень полезно для анализа материала. Смотрите комментарии к другим ответам….