The OpenNET Project / Index page

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

Открыты исходные тексты языка программирования Flow9

30.04.2019 15:58

Компания Area9 открыла исходные тексты функционального языка программирования Flow9, ориентированного на создание пользовательских интерфейсов. Код на языке Flow9 может как компилироваться в исполняемые файлы для Linux, iOS, Android, Windows и macOS, так и транслироваться в форму web-приложений на HTML5/JavaScript (WebAssembly) или в исходные тексты на языках Java, D, Lisp, ML и C++. Код компилятора открыт под лицензией GPLv2, а стандартной библиотеки под лицензией MIT.

Язык развивается с 2010 года в качестве универсальной и многоплатформенной альтернативы Adobe Flash. Flow9 позиционируется как платформа для создания современных графических интерфейсов, которая может применяться как для Web, так и для настольных и мобильных приложений. Проект используется во многих внутренних проектах Area9 и изначально именовался Flow, но перед открытием кода было решено переименовать его во Flow9 для избежания пересечений со статистическим анализатором Flow от компании Facebook.

Flow9 сочетает привычный синтаксис, похожий на язык Си (см. сравнение кода на Flow9 и JavaScript), со средствами функционального программирования в стиле ML и возможностями предметно-ориентированных языков, сосредоточенных на максимально эффективном решении конкретных задач (для Flow9 это разработка интерфейсов). Flow9 рассчитан на применение строгой типизации, но при необходимости предусмотрена возможность использования динамической типизации с автоматическим определением типов, а также ссылок. Поддерживается полиморфизм (одна функция может обрабатывать данные разных типов), возможность создания подтипов, модули, массивы, хэши, лямбда-выражения.

Один и тот же код может быть собран для разных платформ, без необходимости отдельного портирования и внесения изменений в код. Одно и то же приложение может запускаться в браузере, на мобильных устройствах с сенсорными экранами и на настольных системах с клавиатурой и мышью. Предлагается готовая коллекция компонентов с элементами интерфейсов в стиле React, оформленная в соответствии с концепцией Google Material Design. Оформление можно контролировать вплоть до пиксельного уровня. Для задания стилей можно использовать стандартный синтаксис CSS. Для отрисовки в Linux, macOS и Windows при компиляции в C++ используется бэкенд на базе Qt с OpenGL, а при компиляции в Java - JavaFX.

Благодаря применению методов функционального программирования, написанный код и компоненты интерфейса легко могут заимствоваться в других проектах. Язык очень компактный и включает всего 25 ключевых слов, а описание грамматики укладывается в 255 строк вместе с комментариями. Для реализации идентичной функциональности на Flow9 требуется в 2-4 раза меньше кода, чем на HTML+CSS+JavaScript, C#, Swift или Java. Например, если для тестового приложения Tic-Tac-Toe из руководства по React потребовалось написание 200 строк кода на React/JavaScript/HTML/CSS, на Flow9 удалось уложиться в 83 строки. При этом данное приложение можно не только запускать в браузере, но и скомпилировать в форму мобильных приложений для iOS и Android.

Платформа включает в себя основной компилятор flowc, написанный на Flow9 и способный работать в роли сервера компиляции; эталонный компилятор flow (написан на haxe); отладчик с поддержкой протокола gdb; cистему профилирования с анализатором памяти и отладчиком сборщика мусора; JIT-компилятор для систем x86_64; интерпретатор для ARM и других платформ; инструментарий для выборочной компиляции в C++ и Java наиболее критичных к производительности частей кода; плагины для интеграции с редакторами кода Visual Code, Sublime Text, Kate и Emacs; генератор парсеров (PEG).

  1. Главная ссылка к новости (https://flow9.org/2019/04/26/w...)
  2. OpenNews: Facebook объявил о перелицензировании React, Jest, Flow и Immutable.js
  3. OpenNews: Facebook открыл код Flow, статического анализатора для языка JavaScript
  4. OpenNews: Facebook представил фреймворк React Native и среду разработки Nuclide
  5. OpenNews: GitHub и Facebook представили открытую интегрированную среду разработки Atom IDE
  6. OpenNews: Facebook сменил лицензию на React Native и Yoga
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/50602-flow9
Ключевые слова: flow9
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (53) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 16:56, 30/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Еще один нескучный язык программирования?
     
     
  • 2.13, A.Stahl (ok), 18:45, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +10 +/
    >нескучный

    С нормальной типизацией и вменяемым Си-подобным синтаксисом? Вполне может взлететь.

     
     
  • 3.16, Anonymouss (?), 19:03, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    С десятого года разработка?
     
     
  • 4.17, A.Stahl (ok), 19:11, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    И что? Все эти 10 лет язык варился внутри компании для внутренних нужд. Только сейчас показан общественности.

    Или что ты хотел сказать?

     
  • 3.35, Аноним (35), 05:39, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >нескучный
    >c Си-подобным синтаксисом

    Взаимоисключающие параграфы.

     

  • 1.2, Аноним (2), 17:08, 30/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Электрон всё?
     
     
  • 2.39, Аноним (39), 13:24, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да. Сообщество осознало, что электрон это дикий оверхед по памяти и CPU и ищет что-то такое же по функционалу, но более оптимальное по производительности, а то пользователи жалуються и разработка вопреки идеи, что HTML будет прям прост и удобен идет крайне меделнно, а все из-за вот этого всего Grunt, WebPack, TypeScript и т.д. короче нужно, что-то простое и выразительное... Так что ждем и смотрим на всякие поделия вроде Flow3.
     
     
  • 3.47, Аноним (47), 18:03, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Продавцы железок заметили что ты давно не обновлял свой компьютер.
     

  • 1.3, Аноним (3), 17:23, 30/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    Когда впервые узнал об этом языке из этой новости
     
     
  • 2.5, йож (?), 17:35, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    4 дня как явили миру.
     
     
  • 3.6, Аноним (3), 17:58, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    4 дня и сразу опенсорс?
     
     
  • 4.10, Аноним (10), 18:18, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >Язык развивается с 2010 года

    Статью не читай, комментарии пиши

     
     
  • 5.15, Аноним (3), 19:03, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Разве сюда приходят не ради комментов?
     
     
  • 6.20, Аноним84701 (ok), 21:13, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +14 +/
    > Разве сюда приходят не ради комментов?

    Ну, статью следует хотя бы просмотреть, чтобы знать, что лучше подбрасывать на вентилятор.
    Например:
    "а юникод в консоль вам уже завезли? Или в пуссиэкзе не нужно?" - скорее для соседней новости о БСД.
    "ветеранодминынадутыегуси не хочут учить новое и пойдут подметать улицы, потому что Леннарт лутьший а башпортянки ненужны" - тут тоже не очень хорошо воспримут.

    «... функционального языка программирования» и «web-приложений на HTML5/JavaScript (WebAssembly)» скорее предполагают такой комментарий:
    > Поперхнулся смузи и чуть не вейпнул жижку с гироскутера! Вот это да!

    или

    «похожий на язык Си, ... Язык очень компактный и включает всего 25 ключевых слов, а описание грамматики укладывается в 255 строк вместе с комментариями.»
    > О, вебмакаки должны оценить! А так у нас есть няшная сишечка и поэтому оно нинужно, вот!

    А о том, что сабж на самом деле такое, кто это уже тыкал для каких проектов и "как оно в деле" - писать не нужно, все равно это мало кому интересно.

     
     
  • 7.28, Аноним (3), 23:09, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Благодарю за наставление, о Аноним!
     
  • 7.32, jOKer (ok), 01:26, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >А о том, что сабж на самом деле такое, кто это уже тыкал для каких проектов и "как оно в деле" - писать не нужно, все равно это мало кому интересно.

    О, дело обстоит даже хуже: при попытке написать такую ересь, вполне можно нарваться на стандартное "держите нас в курсе" и большую кучу минусов.

     
  • 5.33, Ordu (ok), 03:56, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Статью не читай, комментарии пиши

    Ты испортил стихи:

    4 дня явили миру
    4 дня и сразу опенсорс
    4 дня бессонных без кефиру
    4 дня, 4 дня, 4 дня, 4 дня

     
     
  • 6.34, Аноним (1), 04:03, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > 4 дня явили миру

    4 всадника явили миру

     

  • 1.4, Анимайзер (?), 17:30, 30/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Flow9:
    > GPLv2
    > может как компилироваться в исполняемые файлы для Linux, iOS, Android, Windows и macOS, так и транслироваться в форму web-приложений на HTML5/JavaScript (WebAssembly) или в исходные тексты на языках Java, D, Lisp, ML и C++
    > рассчитан на применение строгой типизации, но при необходимости предусмотрена возможность использования динамической типизации с автоматическим определением типов
    > одно и то же приложение может запускаться в браузере, на мобильных устройствах с сенсорными экранами и на настольных системах с клавиатурой и мышью
    > включает всего 25 ключевых слов, а описание грамматики укладывается в 255 строк вместе с комментариями
    > для реализации идентичной функциональности на Flow9 требуется в 2-4 раза меньше кода, чем на HTML+CSS+JavaScript, C#, Swift или Java

    Впечатляет, однако. Кто-нибудь ещё имеет такой функционал и возможности?

     
     
  • 2.8, Аноним (8), 18:01, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что именно?
    Компилироваться во что попало много что умеет, например питон и си. Вот только пользы от этого не много, ибо получается довольно кастрированно, тк оно не для интерфейсиков создавалось.
    Да и по синтаксису flow9 не похоже, что на нем это будет удобно делать.
    Интерфейсики удобно на QML писать, который для этого и разрабатывался, но в веб он пока что не особо умеет. И еще вопрос должен ли уметь.
     
     
  • 3.25, Аноним (25), 22:23, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • –5 +/
    QML используют профнепригодные.
     
     
  • 4.52, zzz (??), 20:04, 02/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Профпригодные pfпрягают Bootstrap и ReactJS, ога.
     

  • 1.9, DEF (?), 18:06, 30/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    Язык должен развиваться открыто с сообществом. Недоязычки, рожденные в недрах шараг - должны умирать.
     
     
  • 2.14, Аноним (3), 19:01, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > рожденные в недрах шараг -

    Си родился в недрах Bell Labs

     
     
  • 3.27, Аноним (27), 23:09, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И ему давно пора.
     
     
  • 4.29, Аноним (3), 23:55, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Скорее мы уйдём, чем Си
     
     
  • 5.44, Аноним (44), 15:21, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Смотрел недавно исходничек на С, долго чесал репу, пока не дошло, что это K&R C ;))
     
     
  • 6.50, Аноним (50), 19:46, 02/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > долго чесал репу, пока не дошло, что это K&R C

    K&R досих пор встречается в коде проектов с историей и вполне понимается современными компиляторами.

    А вот Пре-K&R версии вообще отпад, особенно объявления типов: https://github.com/mrquincle/ancient-c-compilers/blob/master/primeval-c/last11

     
     
  • 7.51, Аноним (50), 19:51, 02/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > А вот Пре-K&R версии вообще отпад

    Лучше на main() ссылку дам. Там понятнее что это такое:

    https://github.com/mrquincle/ancient-c-compilers/blob/master/primeval-c/last11

     
  • 7.54, Аноним (44), 12:36, 03/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > А вот Пре-K&R версии

    Что значит "Пре", если K&R создали язык?

     
     
  • 8.55, Аноним (50), 22:30, 03/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    K R C называется конкретная версия диалекта C описанная в их книжке от 78-го г... текст свёрнут, показать
     
  • 2.26, Тот_Самый_Анонимус (?), 22:46, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Яркий пример того, как пропаганда человека-стола влияет на людей с некритическим мышлением.
     
  • 2.53, zzz (??), 20:08, 02/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Верните язык и требуйте деньги назад.
     

  • 1.11, Xasd (ok), 18:25, 30/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Для реализации идентичной функциональности на Flow9 требуется в 2-4 раза меньше кода, чем на HTML+CSS+JavaScript, C#, Swift или Java

    ды вы што?

    может просто устроим чемпионат по наименьшему количеству кода -- а потом просто весело посмеёмся над тем какое-несуразное-говнецо вышло в итоге у победителя? :-)

     
     
  • 2.12, Георгий (??), 18:30, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Победят J и APL.
     
     
  • 3.18, Лол (?), 20:12, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Победит однострочник на перле
     
     
  • 4.23, Аноним84701 (ok), 21:35, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Победит однострочник на перле

    Вряд ли ;)
    http://rosettacode.org/wiki/Conway's_Game_of_Life#J



    life=: (3 3 (+/ e. 3+0,4&{)@,;._3 ])@(0,0,~0,.0,.~])


    APL



    life←{↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵}


     
     
  • 5.42, Аноним (44), 15:03, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Круто. Писать, очевидно, на них можно. Осталось научиться читать.
     
  • 4.24, имя (?), 21:36, 30/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    перл в этом хорош, но сомневаюсь, что он переплюнет апл.
     

  • 1.22, Ддд (?), 21:33, 30/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чето не понял где там зарыто создание интерфейсов
     
     
  • 2.40, Аноним (39), 13:27, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да. Тупые создатели языков и приложений. Вот читаю маны по различным инструментам (проприетарным) по работе и вот поражаюсь для кого такую документацию пишут. Нужно сначала дать понять и показать что может на примерах вот тебе кнопка вот тебе раскладка, а потом уже детали расписывать. От простого к сложному и в глубину.
     
     
  • 3.56, ввввв (?), 22:46, 07/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    многабукав пишы исчо
     

  • 1.30, OpenEcho (?), 00:06, 01/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    >Flow9 сочетает привычный синтаксис, похожий на язык Си

    s2 = "#" + i2s(1); // кто то видел в С нативную функцию i2s ???
    a = ref 1; // кто то видел в С такой assignment ?
    b = ^a;  // кто то видел в С такой assignment of variable ?
    a := 2;  // classic C??? может все таки паскаль, a?
    a := 1 + ^a;  // ага практически тоже самое что a++;

    да этот язык даже на JavaScript не похож....

     
     
  • 2.31, KonstantinB (ok), 00:34, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну так похожий, а не идентичный. Степень схожести - понятие относительное :-)
     
  • 2.38, vdb (?), 12:41, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Не позорься, посмотри в словаре смысл слова «синтаксис», чудик.
     
     
  • 3.41, OpenEcho (?), 14:24, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    поумничал... "академик"... возьми пирожок с полки, как прожуешь перечитай:

    "Синтаксис языка программирования — набор правил, описывающий комбинации символов алфавита, считающиеся правильно структурированной программой"

    теперь будь столь любезен показать ссылочку где назначение переменной в _синтаксисе_ языка С используются "комбинации символов алфавита" - ":=" ну и в догонку что нибудь про синтаксис "^a"


     
     
  • 4.45, Аноним (45), 16:00, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > похожий на язык Си

    Просто вы не видели сильно непохожий на СИ синтаксис.

     
  • 4.46, Аноним (46), 16:10, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Тоже возьми словарь на досуге и найди слова "похожий" и "подобный", а затем вспомни или изучи что называют " Си-подобным синтаксисом"
     
  • 2.43, Аноним (44), 15:17, 01/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Синтаксис похож, но семантика сильно разная.
    В производных от ML языках нет переменных (в привычном для С понимании).

    s2 = "#" + i2s(1); // s2 по сути константа. i2s() -- integer to string -- явное приведение типов

    Для переменных используются "ссылки":

    a = ref 1; // Константе a присваивается адрес ячейки, где хранится значение 1.

    a := 2;  // в C выглядело бы как *a = 2;

    Не знаю, как всё это корректно называется в Flow9, но смысл, надеюсь ясен.

    Лично меня больше удивил if - else if - else вместо традиционного match. Возможно, про него "забыли" написать в примере, как раз что бы не смущать привыкших к JS.

     

  • 1.36, Аноним (36), 10:06, 01/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно. Надеюсь взлетит.
     
  • 1.37, Аноним (37), 12:12, 01/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >од компилятора открыт под лицензией GPLv2
    >при компиляции в C++ используется бэкенд на базе Qt

    Уважуха разработчикам.

     
  • 1.48, Аноним (47), 18:05, 01/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как же тогда libui?
     
  • 1.49, inferrna (ok), 09:07, 02/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Попробовал я сабж. Нативно собираться не захотел, Qt ему мой 5.9 не понравился, хочет 5.12. java ему тоже не java - хочет javafx, openjfx не подцепил. Казалось бы - ну тащи ты всё с собой, хоть через тот же maven/gradle, ан нет, буду просто неработать. И на закуску:
    "flow --js demos/tictactoe.flow" пишет "No file given!".
     

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



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

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