The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Компания Bloomberg представила открытый оптимизирующий компилятор BuckleScript

12.09.2016 08:56

Компания Bloomberg опубликовала первый стабильный релиз проекта BuckleScript, позволяющего компилировать проекты на языке OCaml в представление на JavaScript. BuckleScript позиционируется как альтернатива таким системам, как TypeScript, дающая возможность разрабатывать web-проекты с использованием статической типизации, без потерь в удобстве разработки. BuckleScript позволяет организовать бесшовное использование кода OCaml в JavaScript, сохраняя имена переменных и генерируя читаемый код. Исходные тексты проекта написаны на языке OCaml и распространяются под лицензией GPLv2.

В отличие от TypeScript в BuckleScript предоставляется полноценная система типов, без нагромождения кода аннотациями. Корректность использования типов проверяется на этапе компиляции, что гарантирует отсутствие ошибок типизации во время выполнения проекта. Информация о типах также позволяет задействовать в BuckleScript большое число оптимизаций, выполняемых на этапе компиляции, таких как свёртывание констант, удаление мёртвого кода (DCE) и оптимизация хвостовой рекурсии (TCO).

Из достоинств BuckleScript также отмечается возможность применения в проектах уже существующего языка OCaml, без необходимости изучения нового языка программирования. Написанный на OCaml код может применяться не только для преобразования в JavaScript, но и собираться в виде нативных исполняемых файлов или в форме самодостаточных unikernel, работающих поверх гипервизора. Применение интерфейса FFI (Foreign Function Interface) позволяет моделировать в программах на OCaml родную систему объектов JavaScript и использовать в проектах существующие библиотеки JavaScript. Компилируемые модули OCaml отражаются в модули JavaScript.

Для управления генерацией кода можно применять специальные атрибуты OCaml. Обеспечивается достаточно высокая скорость компиляции, например, по сравнению с TypeScript проект собирается как минимум в десять раз быстрее. Компилятор может быть собран в виде нативного исполняемого файла или в представлении на JavaScript, при этом вариант на JavaScript также обладает отличной производительностью и позволяет на лету компилировать проекты, практически в режиме реального времени.

  1. Главная ссылка к новости (https://www.techatbloomberg.co...)
  2. OpenNews: Выпуск MirageOS 2.5, платформы для запуска приложений поверх гипервизора
  3. OpenNews: Проекты по компиляции кода на языках Clojure и Pascal в JavaScript-представление
  4. OpenNews: Представлен Cheerp 1.2, компилятор C++ в JavaScript
  5. OpenNews: Доступен язык программирования Dart 1.19
  6. OpenNews: Увидел свет TypeScript 1.0, продвигаемый Microsoft в качестве альтернативы JavaScript
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/45124-ocaml
Ключевые слова: ocaml, javascript, bucklescript
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (53) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 09:23, 12/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    Goodbye, TS!
     
     
  • 2.27, Аноним (-), 15:07, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    </sarcasm>
     

  • 1.2, омномномнимус (?), 10:07, 12/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    OCaml -> JS. Довольно необычно, хотелось бы увидеть примеры решения задач, для которых это необходимо.
     
     
  • 2.3, A.Stahl (ok), 10:15, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Просто нашли большой коллектив толковых окамлистов и оказалось проще им дать транслятор в ЯваСкрипт, чем их переучивать на ЯваСкрипт.
     
     
  • 3.7, омномномнимус (?), 11:01, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Но ведь чтобы написать транслятор из OCaml в JS уже нужно знать оба языка ;-)
     
     
  • 4.41, абвгдейка (ok), 19:40, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ужас! Значит Ритчи знал Си, еще до того, как его придумал :)
     
  • 3.13, IB (?), 11:32, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Просто нашли большой коллектив толковых окамлистов и оказалось проще им дать транслятор
    > в ЯваСкрипт, чем их переучивать на ЯваСкрипт.

    Меня больше удивило, что Блумберг.
    Хотя для обработки текста / данных Окамл заруливает.
    Эдакий типизированный быстрый перл (с библиотеками само собой, стандартная - редкое Г).

     
     
  • 4.24, Аноним (-), 13:47, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >Меня больше удивило, что Блумберг

    ничего удивительного. Эта компания активно участвует в конференциях по плюсам и функциональщине, работает со студентами, и вообще видно что вкладывает много денег в исследовательскую работу.

     
  • 2.12, IB (?), 11:29, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    JSocaml - лет 10 наверное
     
     
  • 3.16, омномномнимус (?), 11:38, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ну так а примеры использования?
     
  • 2.15, Анонимомус (?), 11:35, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > ...сохраняя имена переменных и генерируя читаемый код.

    Полезно для чтения исходников на OCaml, особенно если видишь его в первый раз.

     
     
  • 3.17, омномномнимус (?), 11:39, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    имхо, это не главная цель проекта.
     
  • 2.23, Аноним (-), 13:02, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >OCaml -> JS. Довольно необычно, хотелось бы увидеть примеры решения задач, для которых это необходимо.

    Потому что у Bloomberg дохрена кода для финансового анализа, и кому-то захотелось запустить всё это в браузере.

     
     
  • 3.32, Аноним (-), 16:38, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Скорее в Node.js
     
  • 2.43, Led (ok), 21:59, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > OCaml -> JS. Довольно необычно

    Что же здесь "необычно"? Можно есть самую разную еду: хоть икру, хоть вермишель, хоть репу. А на выходе получить практически одно и то же, как в данном случае.

     

  • 1.4, Аноним (-), 10:22, 12/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    это что-то типа gopherjs ?
     
  • 1.5, Аноним (-), 10:29, 12/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    А плюсы в javascript канпелируются?
     
     
  • 2.6, Аноним (-), 10:44, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    asm.js LLVM Emscripten
     
  • 2.8, A.Stahl (ok), 11:07, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • –3 +/
    >канпелируются?

    Ну-у-у... Если ты объяснишь значение этого слова, то мы, возможно, и ответим. А пока ты хрюкочешь как зелюк в мове, то хрен тебя кто поймёт.

     
     
  • 3.9, Аноним (-), 11:14, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Прости. Конпеляются.
     
  • 3.51, ...aNALaGReSSoR... (?), 13:12, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    а я думал, ты в комплюхтерах разбираешься
     
  • 3.52, ueueue (?), 13:26, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Конпелируй в месте с нами, конпелируй лучше нас!
     
     
  • 4.53, ueueue (?), 13:26, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Конпелируй в месте с нами, конпелируй лучше нас!

    (c) бохаце

     

  • 1.10, th3m3 (ok), 11:20, 12/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Ещё один компилятор. Нафиг они нужны, обычного js достаточно.
     
     
  • 2.26, Аноним (-), 15:03, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вам не нужен - не пользуйтесь, никто не заставляет.
     

  • 1.11, freehck (ok), 11:28, 12/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я пока как-то не уловил, чем этот BuckleScript отличается от Ocsigen.

    Вот тут можно попробовать демки. В частности трансляцию функционального кода.
    http://bloomberg.github.io/bucklescript/js-demo/

    Попробовал на простом функциональном примере, вроде корректно пашет.

    let rec ifact acc = function
    | 0 | 1 -> 1
    | n -> ifact (acc*n) (n-1)
        
    let fact = ifact 1

     
     
  • 2.14, IB (?), 11:33, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Я пока как-то не уловил, чем этот BuckleScript отличается от Ocsigen.
    > Вот тут можно попробовать демки. В частности трансляцию функционального кода.
    > http://bloomberg.github.io/bucklescript/js-demo/

    Тем, что это только часть оксигена, не?

     
     
  • 3.18, freehck (ok), 11:39, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Тем, что это только часть оксигена, не?

    Я к тому, что возможно оно умеет что-то, что не умеет Ocsigen в плане генерации js. Если оно так, то хочется узнать, что имено.

    Судя по тому, что написано в лицензии, их код основан на Ocsigen.
    https://github.com/bloomberg/bucklescript#licensing

     
  • 2.19, H2O (??), 11:53, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Попробовал код быстрой сортировки из Wiki, так он даже не задумывался... сразу выплюнул код JS! Такое ощущение что компилятор его уже знал.
     
     
  • 3.39, Vkni (ok), 19:07, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Попробовал код быстрой сортировки из Wiki, так он даже не задумывался... сразу
    > выплюнул код JS! Такое ощущение что компилятор его уже знал.

    А почему он должен задумываться? Проект на 2 тыс. строк, не использующий Core, но зато с yacc/lex компилируется Ocaml'ом с 0-я на ноутбучном Core2Duo примерно 1.5 сек.

     

  • 1.20, Аноним (-), 12:05, 12/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    > без необходимости изучения нового языка программирования

    Ага, а маргинальный убогий ocaml учить не надо.

     
     
  • 2.21, Andrey Mitrofanov (?), 12:15, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >> без необходимости изучения нового языка программирования
    > Ага, а маргинальный убогий ocaml учить не надо.

    Так, он не "новый" же!? :D

     
     
  • 3.33, Аноним (-), 16:42, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    OCaml (не путать с ML) - 1996 г.р.
    Javascript (не путать с Java) - 1995 г.р.

    На фоне JS, в который он компилируется - да, новый.

     
     
  • 4.37, омномномнимус (?), 18:46, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    не шлангуй
     
  • 4.44, Аноним (-), 22:22, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Не знаю как ML по сравнению с OCaml, а Java по сравнению с JavaScript - просто идеальный язык...
     
     
  • 5.49, Vkni (ok), 02:10, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Не знаю как ML по сравнению с OCaml

    Pascal vs Delphi

     
     
  • 6.54, ВИРТ (?), 21:49, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Паскаль не трожь, БАЛВАН
     
     
  • 7.55, Led (ok), 22:11, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Паскаль не трожь, БАЛВАН

    Вирта не трожь, придурок!

     
  • 3.40, Vkni (ok), 19:09, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Так, он не "новый" же!? :D

    Дык всё старое, как говно мамонта. Хаскель вон на пару лет моложе bash'а.

    Если хочется чего-то более-менее нового, прогрессивного, добро пожаловать в F*/AGDA и т.д.

     
     
  • 4.45, Аноним (-), 22:35, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Если хочется чего-то более-менее нового, прогрессивного, добро пожаловать в F*/AGDA и т.д.

    Вроде слишком математично. Нет, само по себе это, конечно, прекрасно, но если я правильно понимаю, для написания web-приложений она не приспособлена.


     
     
  • 5.48, Vkni (ok), 02:10, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Вроде слишком математично. Нет, само по себе это, конечно, прекрасно, но если
    > я правильно понимаю, для написания web-приложений она не приспособлена.

    Оно для написания чего угодно ещё не приспособлено. До более-менее рабочей версии - 5 лет. Но рабочая версия как раз и означает закостенение. :-)

     
  • 2.28, Аноним (-), 16:12, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Для тех, кто знаком с языками семейства ML, учить там особо нечего.
     
     
  • 3.42, Vkni (ok), 21:55, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Для тех, кто знаком с языками семейства ML, учить там особо нечего.

    Да и для тех, кто не знаком, тоже не очень-то много надо. :-) Хотя SML, конечно, проще.

     

  • 1.22, Sergey (??), 12:31, 12/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Надо заметить, что есть компилятор байткода для JVM-языков, http://teavm.org TeaVM
    Я попробовал - Котлин компиляется.
     
     
  • 2.30, Crazy Alex (ok), 16:25, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Тут основная фишка вот в чём: "BuckleScript позволяет организовать бесшовное использование кода OCaml в JavaScript, сохраняя имена переменных и генерируя читаемый код". Читаемый генерированный джаваскрипт из байткода - очень сомнительно. А иначе - отладка становится на редкость неприятным делом.
     
     
  • 3.38, Vkni (ok), 19:04, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Читаемый генерированный джаваскрипт из байткода - очень сомнительно.

    Невозможно. В Zink-машине слишком низкоуровневый код.

     
     
  • 4.50, Crazy Alex (??), 02:42, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, джава-код довольно читаемый получается. Правда, в основном потому, что он, в общем-то, чуть ли не зеркало джавы ранних версий.
     

  • 1.25, pavlikvk (?), 13:47, 12/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Зачем это нужно непойму. Готовую бизнесс логику что ли на клиенте гонять.
     
  • 1.29, Аноним (-), 16:16, 12/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А Блумберг - это идеологически правильно? А вдруг хотят, чтобы он нам троянского коня везде вставлял при компиляции? И зонды!
     
     
  • 2.31, Andrey Mitrofanov (?), 16:37, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > А Блумберг - это идеологически правильно? А вдруг хотят, чтобы он нам

    С одной стороны, вроде и продорасы, как LF или MS, с другой: https://github.com/bloomberg/bucklescript/blob/master/LICENSE#L5 прогрессивные продорасы. Надо смотреть, как  они в одной банке с другими пауками уживутся/уживаются.

    > троянского коня везде вставлял при компиляции? И зонды!

     
     
  • 3.47, freehck (ok), 22:50, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > С одной стороны, вроде и продорасы, как LF или MS, с другой ... прогрессивные продорасы.

    Ну так ещё бы он был не GPL. Они ж фактически отфоркали js_of_ocaml.
    Хотя результат у них и правда получается получше в плане читаемости, тут не поспоришь.
    Но это на простых примерах. А вот на сложных - это ещё надо смотреть.

     
  • 2.46, Аноним (-), 22:38, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > А Блумберг - это идеологически правильно? А вдруг хотят, чтобы он нам троянского коня везде вставлял при компиляции?

    Вроде написано, что на выходе хорошо читаемый код на ванильном JS, так что троянского коня вставить вроде как и некуда.

     

  • 1.56, xm (ok), 13:38, 14/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Bloomderg, Карл! Ждём новый язык программирования от Reuters и процессор от ИТАР-ТАСС.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру