NoFlo Kickstarter Для Легкого Программирования


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 — это всего лишь одна возможность, и не очень инновационная-я, например, не могу понять, почему ей уделяется так много внимания.


Добавить комментарий