Может ли GHCJS/Haste скомпилировать себя?

Если это так, то я мог бы позволить людям поиграть с моим проектом, изменив его (Haskell) конфигурацию: перекомпилировав его в браузере, а затем повторно запустив его в браузере. Меня не волнует скорость. Я просто хочу иметь возможность продемонстрировать сложный в настройке настольный проект в браузере. Таким образом, возможные новые пользователи могут увидеть, нравится ли им это, в течение нескольких секунд и без настройки.

Как здорово это будет!

из того, что я читал, GHCJS компилирует STG в JavaScript. в нем говорится, что он использует GHC API, поэтому мы должны иметь возможность скомпилировать его и в JavaScript, как и любую другую библиотеку Haskell. (правильно?) Правда ли, что хотя среда выполнения GHC содержит много C, сам компилятор — чистый Haskell?

so:

  1. Может ли GHCJS скомпилировать себя в JavaScript?
  2. Может ли Haste скомпилировать себя в JavaScript?
  3. Что-то из этого было сделано? (так работает http://haste-lang.org/try/? Кажется, нужно сеть.)

person sam boosalis    schedule 16.01.2015    source источник
comment
Расширения не должны быть проблемой для любого из них, я не думаю. Они оба берут вещи из промежуточного языка GHC. Я считаю, что поддержка библиотеки является более серьезной проблемой.   -  person dfeuer    schedule 04.02.2015
comment
верно. github.com/valderman/haste-compiler говорит, что поддерживает все расширения, кроме Template Haskell. Кстати, что вы подразумеваете под поддержкой библиотеки?   -  person sam boosalis    schedule 05.02.2015
comment
Библиотеки, использующие GHC C FFI, работать не будут. Насколько я помню, поддержка параллельного и параллельного программирования в Haste несколько ограничена, а в GHCJS — нет. Насколько я понимаю, основное преимущество Haste перед GHCJS заключается в том, что он производит компактный скомпилированный код, что особенно важно в среде браузера. Но лично я никогда не пользовался ни одним из из них.   -  person dfeuer    schedule 05.02.2015


Ответы (1)


GHCJS и Haste, насколько мне известно, напрямую используют GHC. GHC, хотя в основном это Haskell, привязан к изрядному количеству cbit с точки зрения времени выполнения и того, как он работает. Я вполне уверен, что на данный момент ни один из них не может быть скомпилирован для запуска непосредственно в браузере в режиме «самообслуживания».

Тем не менее, Fay, который является «хаскеллоподобным диалектом» JS, может быть скомпилирован с помощью GHCJS, что довольно изящно (https://github.com/ghcjs/ghcjs-examples/tree/master/fay-hello), хотя, возможно, это не то, что вам нужно.

Другой альтернативой, если ваша система достаточно проста, является использование emscripten для размещения объятий в браузере, и пусть ваши пользователи поиграют с этим.

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

person sclv    schedule 20.02.2015
comment
благодарю вас. Мой вариант использования — взять любой проект, который я поставил на взлом, с произвольными (не FFI) расширениями GHC (так что нет Fay), и иметь медленную / ограниченную демоверсию, которую можно перекомпилировать в браузере. было бы неплохо не платить за серверы для перекомпиляции этого кода или беспокоиться о безопасности. хотя из того, что я читал, mueval кажется очень солидным. - person sam boosalis; 20.02.2015
comment
Я не понимаю, как на самом деле связана среда выполнения GHC. GHCJS и Haste создают код, который вообще не использует обычную среду выполнения GHC. - person dfeuer; 20.02.2015
comment
@dfeuer правильно, все cbits должны быть JavaScript в ghcjs. но я не изучал GHC, и это около 100 тыс. loc, так что, возможно, есть какие-то неявные зависимости от проверки типов/codegen во время выполнения. - person sam boosalis; 21.04.2015
comment
GHC можно скомпилировать с помощью emscripten (который компилирует C в javascript), что позволит вам реализовать этот проект. Я не знаю, какие усилия будут задействованы в этом, хотя .. - person ggVGc; 27.04.2015