Как работает переводчик WebSharper?

Может кто-нибудь объяснить, как работает переводчик WebSharper совместно с F#? Это перевод кода F# в сам JS или использование для этого компилятора F#?

Во втором случае, что делает компилятор F#, когда в источнике находит атрибут [[]]? Генерирует ли компилятор функции в любом случае и во время выполнения конструирует JS как отражение от скомпилированного байт-кода или что-то еще?

1 ответ

Решение

Я разрабатываю WebSharper. Хороший вопрос!

Примерно компиляция выглядит так:

a.dll: a.fs b.fs c.fs
    fsc ...

a.dll.js: a.dll
    WebSharper.exe ..

Когда функции отмечены [<JavaScript>], который является псевдонимом для [<ReflectedDefinition>]Компилятор F# не только компилирует эти функции в.NET IL, но также сохраняет представление их синтаксиса в метаданных DLL. Это представление имеет тип Quotations.Expr и может быть восстановлено отражением. Посмотри на Quotations.DerivedPatterns.MethodWithReflectedDefinition,

Поэтому WebSharper является переводчиком исходного кода, и он довольно прямой (например, сохраняет лямбды). В WebSharper 2.0 у нас есть промежуточный язык, похожий на Scheme, но он только для того, чтобы помочь оптимизировать сгенерированный код.

Другие вопросы по тегам