Вопрос

Нихил Котари Скрипт# возможно, это одна из самых удивительных концепций, которые я видел на арене JavaScript за последнее время.Этот вопрос касается не JavaScript, а скорее компиляции языка в среде выполнения .NET.

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

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

--

Редактировать:Спасибо за комментарии, пока;ваша информация сама по себе очень интригует, и мне хотелось бы изучить ее подробнее, но на самом деле мой вопрос заключается в том, как я смогу написать свой собственный компилятор/ы, которые можно будет запускать в одном и том же исходном коде в одно и то же время. создание нескольких различных типов (потенциально) взаимозависимых результатов с использованием CLR.Script# служит примером, поскольку он генерирует JavaScript и сборку, используя один и тот же источник C#, при этом скомпилированная сборка взаимодействует с JavaScript.Мне любопытно, каковы различные подходы и теоретические концепции при разработке чего-то подобного.

Это было полезно?

Решение

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

Теперь, если код сценария# превращается в сборку и взаимодействует с другим кодом .NET, это означает, что этот компилятор должен генерировать msil.script# для этого использует csc.exe, который является стандартным компилятором C#.Теперь, чтобы сгенерировать javascript, он должен взять C# или msil, проанализировать его и сгенерировать javascript для отправки в браузер.В документации говорится, что у него есть собственный компилятор C# -> js под названием ssc.exe.

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

Другие советы

Допустим, вы хотите скомпилировать C# в Javascript.Вы спрашиваете, можете ли вы воспользоваться преимуществами существующих компиляторов C#, чтобы вместо непосредственной компиляции C# в Javascript вы фактически конвертировали MSIL, сгенерированный компилятором C#, в Javascript?

Конечно, вы можете это сделать.Получив двоичный файл MSIL, вы можете делать с ним все, что захотите.

У Microsoft есть исследовательский проект под названием Вольта который, помимо прочего, компилирует msil в JavaScript.

Набор инструментов разработчика для создания многоуровневых веб-приложений с использованием существующих и знакомых инструментов, методов и шаблонов.Декларативное рассеяние уровня Volta позволяет разработчикам откладывать архитектурные решения о распределении до последнего возможного ответственного момента.Кроме того, благодаря общей модели программирования в разных уровнях Volta обеспечивает новое сквозное профилирование и тестирование для более высоких уровней производительности, надежности и надежности.Используя декларативное распределение уровня, разработчики могут уточнить архитектурные решения на основе этих данных профилирования.Это экономит время и затраты, связанные с ручным рефакторингом.По сути, Volta расширяет платформу .NET для дальнейшего обеспечения разработки приложений Software+Services, используя существующие и знакомые инструменты и методы.

Вы архитеете и создаете свое приложение в качестве клиентского приложения .NET, назначая части приложения, которые работают на уровне сервера и уровне клиента в конце процесса разработки.Вы можете нацелиться на веб-браузеры или CLR, поскольку клиенты, а Volta обрабатывает сложности расщепления уровня.Компилятор создает JavaScript Cross-Browser для уровня клиента, веб-сервисов для уровня сервера, а также всех коммуникаций, сериализации, синхронизации, безопасности и другого кода котлера для соединения уровней вместе.По сути, Volta предлагает наилучший опыт в нескольких средах, не требуя адаптации применения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top