Каковы преимущества компилятора как службы

В презентации Anders Hejlsberg.NET 4.0, которую он обсуждал в NET 5.0 ( "или в какой-то будущей версии" ), они работают над моделью "Компилятор как услуга".

Андерс Хейлсберг утверждает: [источник] [1] "Мы хотим открыть наш компилятор, чтобы он стал API, который вы можете вызвать, чтобы скомпилировать кусок кода и вернуть деревья выражений и/или IL. Это позволяет использовать целый ряд сценариев, таких как программируемость приложений, интерактивная подсказка, пользователь - письменные рефакторинги и языки, специфичные для домена, на которых в них встроены маленькие острова С#.

Я изо всех сил пытаюсь найти пример реального мира, где это действительно может быть полезно. Я пропустил здесь основную концепцию? или это действительно принесет пользу языку?

[1]: http://www.simple-talk.com/opinion/geek-of-the-week/anders-hejlsberg-geek-of-the-week/ Компилятор как услуга

Ответ 1

Для некоторых проблем легче написать программу, которая может сгенерировать программу, которая решит фактическую проблему. Одной из областей, где это особенно полезно, является создание парсеров для компиляторов.

В других случаях вы можете генерировать код "на лету", который может быть адаптирован для обеспечения оптимальной производительности при работе с конкретным типом данных, о свойствах, которые вы только что узнали во время выполнения, отражая его метаданные. Одним из примеров, которые я могу вам дать, является мой проект Modelshredder. В основном это относится ко всем областям и свойствам объекта и упаковывает их значение в массив объектов.

Моим первым подходом к этой проблеме была ручная инъекция MSIL с использованием Reflection.Emit. Второй подход был немного более динамичным и опирался на деревья выражений, которые можно эффективно построить и скомпилировать во время выполнения, чтобы обеспечить те же функциональные возможности, что и моя ручная кодировка MSIL. Вы можете видеть, что это реализовано в соединительной линии MoreLinq (просто посмотрите сайт Modelshredder, там есть ссылка для этого). Наличие компилятора как службы фактически позволит мне повысить уровень абстракции и испустить код С#, который затем будет скомпилирован в MSIL.

Случай с языковыми доменами уже сделан, также я считаю, что императивный язык, такой как С#, не подходит для сценария командной строки, а не для больших скриптов. Там аккуратная система make, основанная на F # DSL, называется FAKE, которая заимствует множество концепций компилятора как службы. Подобные понятия используются в F # Interactive Window (называется ли это так?) Внутри VisualStudio.

Ответ 2

Реальный пример того, как это может быть полезно, - это расширение возможностей пользователей для игр. Большинство современных игр позволяют использовать некоторый тип расширяемости для пользователей через языки сценариев, которые могут быть относительно медленными, или скомпилированные библиотеки DLL, для которых требуется платформа разработки (и знания для ее использования). Это позволит пользователям писать расширения в игру с использованием С#, которые будут скомпилированы игрой во время выполнения, без необходимости компилировать ее самостоятельно. Это также позволило бы тестировать новые идеи, введя, например, код С# в игровое консольное окно без необходимости перезапускать игру для каждого небольшого изменения. В настоящее время этот тип вещей действительно возможен только с встроенными интерпретируемыми языками сценариев.

Ответ 3

Я думаю, что еще один пример - защита от копирования. У вас может быть уникальный код на вашем компьютере, сгенерированный при установке, чтобы связать программу с идентификатором ЦП.

Скажем, я использую ваш серийный номер в качестве параметра при расчете налога. Копия программы проста и абсолютно бесполезна.

Ответ 4

Также он делает программы записи, которые имеют аналогичную функциональность для Linqpad очень просто.

Можно использовать другой вариант использования кусков исходного кода, хранящегося в базе данных, и вызывать конкретные данные на основе конфигураций, аналогично тому, как сейчас можно вызвать Workflow Foundation. Это может помочь в автоматизации документооборота для CRM, ERP и других приложений для хранения данных (хотя, если их злоупотреблять, это будет epic antipatern).