Что такое деконструированный компилятор? Как C # получает возможность динамического языка генерировать и вызывать код во время выполнения через Roslyn?

После прочтения эта статья о Roslyn. Я обнаружил две вещи, которых не понял.

  • деконструированный компилятор
  • C # получает возможность динамического языка генерировать и вызывать код во время выполнения через Roslyn.

Я просмотрел множество сообщений о переполнении стека и искал это в Google. но не мог получить полную картину.

Может ли кто-нибудь объяснить мне или направить мне ссылки и ресурсы по этим темам.


person alamin    schedule 24.04.2016    source источник
comment
Деконструированный компилятор - это компилятор, элементы которого доступны. Возможно, это позволяет разработчикам, не занимающимся компилятором, выполнять некоторые задачи, подобные компилятору. Более общей альтернативой является система преобразования программ en.wikipedia.org/wiki/Program_transformation, которая делает механизм, подобный компилятору, доступным для большого количества языков, а не только для одного. См. Мою биографию, чтобы узнать подробности об одном из них.   -  person Ira Baxter    schedule 24.04.2016


Ответы (1)


Взято из связанной статьи:

Хейлсберг продемонстрировал программу на C #, которая передает компилятору C # несколько фрагментов кода в виде строк; компилятор вернул полученный ассемблерный код IL в виде объекта, который затем был передан в среду CLR для выполнения. Вуаля! Благодаря Roslyn C # получает возможность динамического языка генерировать и вызывать код во время выполнения.

В составе:

[...] C # получает способность динамического языка генерировать и вызывать код во время выполнения.

... это просто очень неправильное предположение, сделанное автором сообщения в блоге ...

  1. Компиляция кода из приложения не превращает C # в динамический язык и не превращает новый компилятор C # в замену интерпретатору ...

  2. C # мог генерировать код во время выполнения с момента его создания с помощью Reflection Emit. Похоже, что новый компилятор не добавил эту функцию, но в любом случае легче сгенерировать код из обычного кода C # с новым компилятором, чем с помощью Reflection Emit. Кроме того, как @hvd отметил в каком-то комментарии, это также было возможно с момента создания C # с использованием CSharpCodeProvider.

  3. C #, начиная с .NET 4.0, может взаимодействовать с динамическими языками с помощью Dynamic Language Runtime, которая была создана, чтобы открыть дверь к реализациям интерпретируемого языка поверх .NET (а также упростить взаимодействие COM. ..).

Что касается другого вопроса (что касается деконструированного компилятора), это означает, что новый компилятор C # позволяет вам подключать другой код для выполнения действий на основе шагов компиляции C #.

Я бы взглянул на Обзор Roslyn на GitHub, где много подробности, которые должны дать больше информации по теме.

person Matías Fidemraizer    schedule 24.04.2016
comment
C # также мог компилировать и выполнять код C # во время выполнения, начиная с .NET 1, через класс CSharpCodeProvider. Да, статья очень неправильная. - person ; 24.04.2016
comment
@hvd Я тоже добавил это к своему ответу на основе вашего комментария. И да, похоже, что это такие статьи, чтобы получить рейтинг страницы Google ...: / - person Matías Fidemraizer; 24.04.2016
comment
@ MatíasFidemraizer о деконструированном компиляторе, я не очень хорошо понял ответ. не могли бы вы объяснить немного больше? - person alamin; 24.04.2016
comment
@ Md.AlaminMahamud Я считаю, что теперь вы должны читать статьи MSDN по этой теме и идти дальше ... Вам нужно представить новый компилятор как приложение с подключаемой архитектурой, где вы можете подключить код для выполнения настраиваемых действий. Например, это позволяет реализовать C # для других языковых переводчиков. - person Matías Fidemraizer; 24.04.2016