2015-01-16 11 views
12

Jeśli tak, to mogę pozwolić ludziom bawić się moim projektem, zmieniając jego konfigurację (Haskell): rekompilacja w przeglądarce, a następnie ponowne uruchomienie w przeglądarce. Nie dbam o prędkość. Chcę po prostu odtworzyć trudny do skonfigurowania fundamentalnie projekt graficzny w przeglądarce. Dzięki temu nowi użytkownicy mogą zobaczyć, czy im się to podoba, w ciągu kilku sekund i bez konfiguracji.Czy GHCJS/Haste może się kompilować?

Jak fajnie by to było!

z tego, co przeczytałem, GHCJS kompiluje STG do JavaScript. mówi, że używa API GHC, więc powinniśmy być w stanie skompilować to do JavaScriptu, tak jak każda inna biblioteka Haskell. (prawda?) Czy to prawda, że ​​chociaż środowisko wykonawcze GHC ma dużo C, sam kompilator jest czystym Haskellem?

tak:

  1. Czy GHCJS skompilować się w JavaScript?
  2. Czy Haste może wkompilować się w JavaScript?
  3. Czy któreś z nich zostało zrobione? (czy tak działa http://haste-lang.org/try/?) Wydaje się, że potrzebna jest sieć.)
+0

Rozszerzenia nie powinny stanowić problemu dla żadnego z nich, nie sądzę. Obaj wyciągają rzeczy z pośredniego języka GHC. Uważam, że wsparcie bibliotek jest większym problemem. – dfeuer

+0

. https://github.com/valderman/haste-compiler mówi, że obsługuje wszystkie rozszerzenia z wyjątkiem szablonu Haskell. btw, co masz na myśli przez wsparcie biblioteki? –

+2

Biblioteki korzystające z C FFI GHC nie będą działać. Jak pamiętam, wsparcie Haste'a dla programowania równoległego i współbieżnego jest nieco ograniczone, podczas gdy GHCJS nie jest. Jak rozumiem, główną zaletą Haste nad GHCJS jest to, że produkuje kompaktowy kod skompilowany, co jest szczególnie ważne w środowisku przeglądarki. Ale nigdy osobiście nie użyłem * ich *. – dfeuer

Odpowiedz

11

GHCJS i Haste, zgodnie z moją wiedzą, bezpośrednio wykorzystują GHC. GHC, choć głównie haskell, jest związane z dużą ilością cbitów pod względem czasu działania i sposobu działania. Jestem prawie pewien, że nie można w tym momencie skompilować do uruchomienia bezpośrednio w przeglądarce w sposób "hostowany".

Jednak Fay, który jest "dialektem podobnym do Haskella" JS, może być skompilowany za pomocą GHCJS, co jest całkiem fajne (https://github.com/ghcjs/ghcjs-examples/tree/master/fay-hello), chociaż może nie jest to, co chcesz.

Inną alternatywą, jeśli twój system jest wystarczająco prosty, jest użycie emscripten do umieszczania uścisków w przeglądarce, i niech twoi użytkownicy bawią się tym.

Jak można się domyślić, różne strony "spróbuj w przeglądarce" używają połączenia z komputerami, zwykle działając na przykład pod nazwą mueval, która faktycznie wykonuje podany kod.

+0

dziękuję. Moim przypadkiem użycia jest wzięcie dowolnego projektu, który wprowadziłem do hackage, z dowolnymi (nie FFI) rozszerzeniami GHC (więc nie ma Fay) i mieć powolne/ograniczone demo, które może być rekompilowane w przeglądarce. Byłoby miło nie płacić za serwery, aby przekompilować ten kod lub martwić się o bezpieczeństwo. choć z tego co przeczytałem, mueval wydaje się bardzo solidny. –

+2

Nie widzę, jak naprawdę działa środowisko wykonawcze GHC. GHCJS i Haste tworzą kod, który w ogóle nie używa zwykłego środowiska wykonawczego GHC. – dfeuer

+0

@ Prawe, wszystkie "cbity" powinny być JavaScriptami w ghcjs. ale nie studiowałem GHC, i to jest jak ponad 100k loc, więc być może są pewne ukryte zależności od typechecking/codegen do runtime. –

Powiązane problemy