LINUX.ORG.RU

Haste - компилятор Haskell в JavaScript

 , ,


1

2

Идёт разработка Haste (HASkell To Ecmascript) - компилятора из Haskell в JavaScript.

Перед проектом стоит цель создать практичный компилятор из Haskell в Javascript.

В частности:

  • Код должен работать не более чем в 10 раз медленнее, чем написанный вручную на JavaScript;
  • Код не должен быть слишком большим или тянуть за собой большой framework;
  • Простая интеграция с другим кодом на JavaScript.

За образец взят GHCJS. От поддержки (псевдо-)многогопоточности решено отказаться.

Из одного исходника получается две программы: JavaScript для исполнения в браузере и серверное приложение. Связь между ними происходит через WebSockets.

Пример программы (sendfile - загрузка файла на сервер через WebSocket):

import Haste.App
import Haste.Binary
import qualified Data.ByteString.Lazy as BS

main = runApp def $ do
  upload <- remote $ \name file -> do
    filedata <- getBlobData file
    liftIO $ BS.writeFile name (toByteString filedata)

  runClient $ withElems ["file","upload"] $ \[file,btn] -> do
    btn `onEvent` OnClick $ \_ _ -> do
      mfd <- getFileData file 0
      case mfd of
        Just fd -> do
          fn <- getFileName file
          onServer $ upload <.> fn <.> fd
          alert "File uploaded!"
        _ -> do
          alert "You need to specify a file first."

--<html> <body>
--<script src="sendfile.js"></script>
--<input type="file" id="file"><br>
--<input type="button" id="upload" value="Upload file">
--</body></html>

Из этого примера получается серверная программа размером олоко 3 мегабайт (без отладочных символов), и один файл javascript размером около 80 килобайт (57 из них - постоянная составляющая).

>>> Подробности



Проверено: maxcom ()

Главное, чтобы этот проект провалился. Мне хватило OOM на гигабайтной системе из-за страницы Google Groups во время сборки xfce!

mittorn ★★★★★ ()
Ответ на: комментарий от mittorn

Задавай браузеру ограничение по памяти, запускай сборку xfce как «make || make || make».

Подключи раздел подкачки и учись спокойствию и невозмутимости на примере ожидания освобождения системы от нехватки памяти.

vi0 ()
Ответ на: комментарий от vi0

Ну крашнется браузер - толку то.Всё равно веб-страницы должны быть лёгкими и простыми! Удивлён, что на этом: http://bellard.org/jslinux/ ещё сайты не пишут.

mittorn ★★★★★ ()
Ответ на: комментарий от mittorn

Может, когда/если asm.js взлетит, то будут писать на всём.

vi0 ()
Ответ на: комментарий от mittorn

Не удивлюсь, когда когда-нибудь увижу в JavaScript'е

if(arch == "arm"){ ...} else {...}

vi0 ()

почему к этому языку из 90-х (JS) в последние годы такой интерес?

Lincor ()

Haste - компилятор Haskell в JavaScript

У Вельзевула удачные времена.

\_ _ ->

Похоже на хоккей: клюшка, шайба, удар!)

Когда на хаскеле пишут не «зигопрепроморфизмы», а прикладной код, он даже похож на язык погроммирования.

Virtuos86 ★★★★★ ()

Не нужно, есть же Fay

anonymous ()
Ответ на: комментарий от Lincor

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

web2.0 и прочее непотребство слишком много одеяла на браузер перетащили, и имеем то, что имеем.

anonymous ()

Это новость? Я его уже год как использую и несколько месяцев думаю отказаться от него в пользу ghcjs.

KblCb ★★★★★ ()
Ответ на: комментарий от anonymous

Ниши немного разные вообще-то. Ты же викидываешь ghcjs из-за fay? (или fay из-за наличия ghcjs).

anonymous ()
Ответ на: комментарий от anonymous

Зачем нужен недохаскель если можно писать на хаскеле вместе с изрядной долей hackage'а?

KblCb ★★★★★ ()

в 10 раз медленнее

А потом у них «браузер тормозит».

Deleted ()

И кому это в реальном программировании нужно?

Bioreactor ★★★★★ ()

Код должен работать не более чем в 10 раз медленнее, чем написанный вручную на JavaScript;

Красавцы! Если у них такие цели. То....

Типа, температура в нашем здании не должна превышать более чем в 10 раз температуру в аду.

anonymous ()
Ответ на: комментарий от Lincor

Потому, что рулит Запад. А на Западе дизайнеры получают не меньше зарплату, а работа у них более уважаемая. Следовательно, на них ориентируются больше при разработке языка для браузеров.

menangen ★★★★★ ()

О чем новость? Просто о том что идет разработка? Так можно много новостей написать.

По сабжу, заметил, что достаточно много haskell-javascript проектов попало в GSoC.

Но все они по сути тянут хаскелльный рантайм в браузер.

Haste годный.

zinfandel ★★ ()
Ответ на: комментарий от KblCb

Я специально поискал «site:linux.org.ru haste» (посмотреть насколько оно «не нужно») и, не найдя, решил создать новость.

vi0 ()
Ответ на: комментарий от Lincor

почему к этому языку из 90-х (JS) в последние годы такой интерес?

ECMAScript много где используется как встраиваемый язык. так сказать стандарт.

exception13 ★★★★★ ()
Ответ на: комментарий от Virtuos86

> Haste - компилятор Haskell в JavaScript

У Вельзевула удачные времена

> \_ _ ->

Похоже на хоккей: клюшка, шайба, удар!)
Когда на хаскеле пишут не «зигопрепроморфизмы», а прикладной код, он даже похож на язык погроммирования.

Хоττ@быч - какая Шайба, я за Зубило болел?!

Woofywoof ()
Последнее исправление: Woofywoof (всего исправлений: 3)
Ответ на: комментарий от mittorn

Всё равно веб-страницы должны быть лёгкими и простыми!

Кому они это должны?

Wizard_ ★★★★★ ()

Никогда не понимал, зачем писать компилятор В javascript. Ведь это не первый. И для той-же java такой есть. Нафиг это надо? Почему не использовать сразу javascript? Зачем писать компилятор из языка с меньшим количеством абстраций в язык с большим количеством абстракций? Работать оно быстрее явно не будет, да и удобство сомнительное.

Aswed ★★★★★ ()
Ответ на: комментарий от menangen

...на Западе дизайнеры... на них ориентируются больше при разработке языка для браузеров

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

Wizard_ ★★★★★ ()

создать практичный компилятор из Haskell в Javascript
из Haskell в Javascript
практичный

ХАХАХАХАХАХА! Это 10/10!

anonymous ()
Ответ на: комментарий от Aswed

зачем писать компилятор В javascript

Потому что это единственный язык поддерживаемый браузером. И, естественно, он многим не нравится.

Нафиг это надо?

Перенос готового кода либо упрощение написания нового кода.

да и удобство сомнительное

В хаскеле, как минимум, с типами получше, чем в JS.

PolarFox ★★★★★ ()
Ответ на: комментарий от PolarFox

упрощение написания нового кода.

Стоит ли оно таких катастрофичесих потерь производительности? Мне кажется, иногда лучше все таки переписать.

В хаскеле, как минимум, с типами получше, чем в JS.

Лучше б тогда сделали статически типизированный javascript-подобный язык, который бы транслировался в сам javascript. Вроде питоновского Boo, только Boo не транслируется в сам питон. Это бы нанесло меньший урон производительности.

Aswed ★★★★★ ()
Ответ на: комментарий от Aswed

Стоит ли оно таких катастрофичесих потерь производительности?

Нынче в телефонах гигагерцы, не пофиг ли?

PolarFox ★★★★★ ()
Ответ на: комментарий от Aswed

Ну вот не нравится некоторым JS. А хаскель нравится. Вот поэтому эта штука и существует.

PolarFox ★★★★★ ()
Ответ на: комментарий от Aswed

Лучше б тогда сделали статически типизированный javascript-подобный язык, который бы транслировался в сам javascript.

Сделали уже: TypeScript.

Вроде питоновского Boo

Boo никак и ни разу не питоновскиq.

Это бы нанесло меньший урон производительности.

ЕМНИП, Emscripten уже генерирует asm.js, уступающий нативному всего в 2 раза.

tailgunner ★★★★★ ()
Ответ на: комментарий от Aswed

Это немного описано в http://haste-lang.org/hastereport.pdf

Краткий вольный пересказ позиции автора:

  • JavaScript - единственный нормальный вариант программ в браузере + браузер может стать единственным клиентом;
  • У JavaScript есть проблемы: variable scoping, слабые типы, плохая поддержка ФП, плохая модульность.
  • Хочется единую систему типов и на клиенте, и на сервере.

В документе первая глава посвящена вопросу «Зачем это?»

vi0 ()
Ответ на: комментарий от Aswed

из языка с меньшим количеством абстраций

в язык с большим количеством абстракций

Это в Хаскеле-то меньше абстракций, чем в JS? :)

yoghurt ★★★★★ ()
Ответ на: комментарий от Aswed

Именно затем, чтобы оперировать меньшим количеством абстракций. Javascript слишком мощный и легко позволяет прострелить себе ногу. Ламеров надо от мощности языка ограждать.

anonymous ()
Ответ на: комментарий от PolarFox

Стоит ли оно таких катастрофичесих потерь производительности?

Нынче в телефонах гигагерцы, не пофиг ли?

И батарейки через час загрузки ЦП разряжающиеся. :)

Не пофиг ли?

anonymous ()
Ответ на: комментарий от anonymous

Основным победителем заряда в современных кпк остаётся экран, цп сильно больше жрать не стал.

PolarFox ★★★★★ ()
Ответ на: комментарий от PolarFox

Основным победителем заряда в современных кпк остаётся экран, цп сильно больше жрать не стал.

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

anonymous ()

Название неудачное выбрали, рекомендую изменить на Slowste.

Lavos ★★★★★ ()

Браузер ненужен. Скоро уже все будут вместо того чтоб заходить на сайт, входить в мобильный маркет и ставить аппликуху. Так что давайте вместо того чтоб страдать фигней скомпилим ghc под андроид.

q0tw4 ★★★ ()
Ответ на: комментарий от Aswed

Лучше б тогда сделали статически типизированный javascript-подобный язык, который бы транслировался в сам javascript.

Dart.

anonymous ()

Посмотреть бы на дерево, с которого они рухнули.

vik4tor ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.