Что является преимуществами Компилятора как услуга

В.NET Anders Hejlsberg 4,0 презентации он обсудил в СЕТЕВЫХ 5.0 ("или некоторый будущий выпуск") они работают над моделью "Compiler as a Service".

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

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

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

10
задан Daniel A. White 20 October 2011 в 18:51
поделиться

3 ответа

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

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

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

Доводы в пользу Domain Specific Languages уже были приведены, также я думаю, что императивный язык, такой как C#, не очень хорошо подходит для сценария "командной строки", а скорее для больших сценариев. Существует изящная система make, основанная на F# DSL под названием FAKE, которая заимствует многие концепции Compiler as a Service. Похожие концепции используются в F# Interactive Window (так ли оно называется?) в VisualStudio.

4
ответ дан 4 December 2019 в 01:29
поделиться

Думаю, еще один пример - защита от копирования. На вашем компьютере может быть уникальный фрагмент кода, созданный при установке для привязки программы к идентификатору процессора.

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

2
ответ дан 4 December 2019 в 01:29
поделиться

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

4
ответ дан 4 December 2019 в 01:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: