2016-04-24 1 views
2

После прочтения this article о Roslyn. Я наткнулся на две вещи, которые я не понял.Что такое Deconstructed Compiler? Как C# получает способность динамического языка генерировать и вызывать код во время выполнения через Roslyn?

  • деконструкции компилятор
  • C# получает способность динамического языка для генерации и вызова кода во время выполнения с помощью Рослин

Я искал много постов на переполнении стека и гуглом для него. но не смог получить всю картину.

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

+0

«Размонтированный» компилятор - это тот, чьи элементы доступны. Возможно, это позволяет разработчикам не компилятора выполнять некоторые компиляторные задачи. Более общей альтернативой является система преобразования программ https://en.wikipedia.org/wiki/Program_transformation, которая делает компиляторные устройства доступными для самых разных языков, а не только для одного. Посмотрите мою биографию, чтобы узнать подробности об одном из них. –

ответ

4

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

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

Часть:

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

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

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

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

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

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

Я бы посмотрел на Roslyn Overview on GitHub, где есть много деталей, которые должны дать больше информации о теме.

+1

C# также смог скомпилировать и выполнить код C# во время выполнения с .NET 1 через класс 'CSharpCodeProvider'. Да, статья просто очень неправильная. – hvd

+1

@hvd Я добавил это тоже к моему ответу, основанному на вашем комментарии. И да, похоже, что именно такие статьи были сделаны для ранжирования страницы Google ...:/ –

+0

@ MatíasFidemraizer о Deconstructed компиляторе, я не очень хорошо понял ответ. может у вас объяснить немного больше? – alamin

Смежные вопросы