Лучшая реализация языка диаграмм функциональных блоков, что я видел - это "графы событий" из Unreal Engine.
Unreal Engine - это бесплатный физикографический движок с открытым исходным кодом, предназначенный для создания компьютерных игр.
Не вдаваясь в подробности самого движка, так как тема не о нем, перечислю основные свойства тамошнего ЯДФБ, которые мне особенно понравились.
Во-первых - это явное управление потоком вычислений. Каждый блок кроме блока получения значения переменной или чистой функции имеет особый вход и выход "исполнение". Соединяя блоки через них мы таким образом указываем, в каком именно порядке происходит вычисление. Начинается любое вычисление из блока события, который имеет только выход исполнения.
Это особенно радует, потому что во-первых, все ЯДФБ предназначенные для программирования контроллеров исполняются в порядке одному Богу известному, а во-вторых, каждый раз когда где-то изменяется переменная (введена в поле ввода, изменена каким-то алгоритмом, поступила из СКАДЫ), то программист часто оказывается бессилен как бы то ни было согласовать поступившие из разных мест значения между собой (хотя бы проигнорировать ввод по какой либо причине). В "графах событий" никакое событие не изменяет никаких переменных, а лишь при наступлении вызывает исполнение и может быть, возвращает некие значения, а уже пользователь использует или не использует это событие для изменения переменных.
Существует событие "тик", вызывающее исполнение каждый вычислительный такт, и возвращающее время прошедшее с предыдущего такта.
Поддерживаются циклы (внутри одного вычислительного такта), массивы. Пользователь может создавать свои функции и макросы.
Все используемые переменные обязательно имеют инициализирующее значение. Все случаи глюков в моих проектах в Лоджике связаны с тем, что блоки отрабатывают операции на переменных инициализированных нулем, причем блоки работающие с выходами и переменными связанными с этими-же выходами отрабатывают в разное время, поэтому в работе проекта в Лоджике постоянно возникают неведомые ужасы, вызванные неинициализированными переменными плюс непонятной последовательностью исполнения.
Ну и наконец, о чем мечтают некоторые юзеры - вместо использования языка блоков, пользователь может писать те-же самые скрипты на c++ текстом, так как в данном виде взаимно-однозначное соответствие диаграммы и текстового кода полностью очевидно.
Очень хотелось бы, чтобы программисты, разрабатывающие Лоджик, посмотрели, как это выглядит, а то и в исходники, и вдохновились концепцией, потому что в таком виде на мой взгляд, Лоджик стал бы самым удобным и простым для разработки ЯДФБ.
Внешний вид графа событий
Event Graph.png
PS заранее извиняюсь за то, что эта тема имеет слишком косвенное отношение к Лоджику.