NoFlo-это потоко-ориентированный язык, построенный с использованием JavaScript, который вызывает небольшую сенсацию в средствах массовой информации. Отчет о том, что всего за несколько дней он собрал половину своей цели в 100 000 долларов, привлек большое внимание. Является ли это началом новой эры в вычислительной технике? Это будущее программирования?
Скорее всего, нет.
NoFlo-это язык плюс графический редактор, и именно графический редактор привлекает наибольшее внимание. Это обещает сделать программирование проще и гораздо менее техническим, позволяя программисту подключать компоненты. Идея заключается в том, что данные передаются от компонента к компоненту, а график компонентов и линий определяет, как они передаются.
Потоковое программирование было изобретено в начале 1970-х годов, да, нет ничего нового под солнцем, еще в те времена, когда Фортран и Кобол были доминирующими языками. Идея о том, что вы используете потоковый график для создания программ, не является огромным скачком воображения, поскольку программы имеют естественную структуру, подобную графу. Вот почему мы использовали блок-схемы и до сих пор рисуем всевозможные графики на досках, которые показывают, как работают наши программы. Идея потокового программирования, и в частности NoFlo, состоит в том, чтобы попытаться преобразовать усилия по рисованию графика в реализацию программы.
Хорошая идея, и утверждается, что этот подход обладает некоторыми дополнительными хорошими свойствами, такими как масштабируемость и естественная тенденция не создавать спагетти-системы. Как говорится в сообщении Kickstarter:
«Программное обеспечение начинается с коробок и стрелок на доске, давайте так и оставим! Представьте себе платформу, которая исключает спагетти-код…»
Kickstarter должен собрать деньги для достижения множества целей, но главная из них-разработка пользовательского интерфейса для перетаскивания для языка. Пользовательский интерфейс преобразует график в JavaScript, который работает на любом Node.js или в браузере. Есть несколько целей растяжения, которые включают реализацию Java для создания приложений для Android и версию, генерирующую приложения для iOS в Objective C.
В настоящее время NoFlo в основном является доменным языком (DSL) для подключения компонентов. Например:
‘somedata’ -> Процесс порта(компонент) отправляет исходные данные somedata в порт порта процесса Процесса, который запускает componentComponent
A(Компонент 1) X -> Y B(Компонент 2) устанавливает соединение между портом X процесса A, который запускает компонент Component1 и порт Y процесса B который запускает компонент Component2
Существует также формат JSON, который можно использовать для описания графика со связями, подобными описанным выше. Если вы посмотрите документацию, вы должны прийти к выводу, что все это очень просто.
Все это звучит великолепно, и промо обещает многое, и, давайте будем честными, мы все чувствуем, что должен быть лучший способ программирования, чем то, что мы делаем в данный момент.
Итак, НоФло-это земля обетованная?
Идея соединения компонентов вместе имеет более долгую историю, чем просто программирование потоков. Вы можете думать о команде pipe в Unix как о рудиментарном способе подключения программ. Еще в самые первые дни программирования Майкл Джексон заметил, что алгоритмы, как правило, следуют форме данных — если в данных есть повторяющийся элемент, то вам нужен цикл для обработки его в коде. Метод Джексона, вероятно, был самым обнадеживающим методом автоматизации программирования до тех пор, пока не появилось объектно-ориентированное программирование. Такие системы, как BizTalk, LabVIEW и т. Д., Используют соединение компонентов вместе, но ничто не привело к переходу к программированию общего назначения.
Ловушка заключается в том, что, когда вы думаете о конкретных проблемах, легко понять, как построить систему, которая автоматизирует задачу программирования, но затем появляется кто-то с другим классом проблем, и ваши попытки кажутся ограниченными. В данном случае мы смотрим на что-то немного другое. NoFlo-это способ подключения компонентов. и компоненты написаны на JavaScript. Это означает, что вы всегда можете использовать систему для решения проблемы — потому что вы можете написать один компонент, который решает ее с помощью одного потока данных «проблема в, решение из». Конечно, это не очень полезно, и есть надежда, что проблемы реального мира могут быть разбиты на более мелкие компоненты, а затем подключены к «проводке»NoFlo. Но очевидно, что NoFlo просто предоставляет архитектуру более высокого уровня — реальная работа все еще выполняется вручную закодированным JavaScript (на самом деле классы CoffeeScript):
«Компоненты NoFlo реагируют на входящие сообщения или пакеты. Когда компонент получает пакеты в своих входных портах, он выполняет предопределенную операцию и отправляет свой результат в виде пакета в свои выходные порты. Общего состояния не существует, и единственный способ связи между компонентами-это отправка пакетов.»
Этого, однако, может быть достаточно, чтобы сделать его стоящим, но ошибочно полагать, что графические методы неспособны производить спагетти. Пока система проста, график кажется простым, но если в нем много компонентов, он вырождается в нечто, похожее на шар из спагетти. Как и во всех схемах реализации, без возможности построения иерархий уровней спагетти неизбежны — даже если это относительно упорядоченные спагетти.
Настоящая проблема с NoFlo заключается в том, что он просто думает в слишком малом масштабе. У нас уже есть графические методы работы с компонентами и построения детальных алгоритмов на микроуровне. Взгляните на Scratch, AppBuilder или любой другой существующий графический язык. Возьмите один из них в качестве отправной точки, и у вас может появиться что-то новое.
Нам нужны графические инструменты и просто лучшие инструменты в целом для создания программ, но NoFlo — это всего лишь одна возможность, и не очень инновационная-я, например, не могу понять, почему ей уделяется так много внимания.