ibnteo писал(а):
для создания произвольных схем, можно будет сделать свой текстовый формат, в нём как раз можно будет запретить использование висящих икон
Как-то сомнительно, раз уж речь о массовом программировании, что мейнстрим сможет обойтись без "висящих" икон. Наоборот, наблюдается "гиперусиление" противоположной тенденции.
ibnteo писал(а):
Всё же нужен логический конструктор, не только разворачивать if(?), но и в присваивании a=?, в return ?, в циклах. Иначе сложные логические конструкции придётся строить в текстовом виде, а не на схеме.
Есть ещё и конъюнкция функций, обозначаемое через умножение (преимущественно в "функциональщине") или, в основном, через точку. Также есть и операторы вида "|>", "<|", и "каскадные" операторы (например "..": "a = [1,2,3] ..push(4) ..push(5);").
Это композитные функции, как минимум, подразумевающие операцию следования (отображаемую на схемах как связь между вершинами графа).
ibnteo писал(а):
Вот таким образом можно раскрывать логические выражения, тернарные операторы тоже так можно создавать.
Кроме тернарных операторов есть и "множественный выбор" в виде "case..of/match...with", возвращающие значения. Такие операторы могут соединяться в цепочки (результат выбора подается на вход следующему блоку).
А в целом, необходимо предполагать, что сейчас любой чих есть ака expression с результатом. Те же циклы уже возвращают значения (например, см. Rust как фактически уже мейнстрим). К тому же, видимо, модель циклов с else-частью (исполняемой, если тело цикла не завершилось через break) скоро уже будет всеобщим стандартом.
Формат условных выражений (для if, циклов и пр.) будет расширяться: от уже распространенного на сегодня как "init; condition", где init -- необязательная часть обычно с введением новых локальных переменных, до произвольного блока вычислений с конечным результатом, трансформируемым к логической валентности. Например, как для циклов в новой Scala:
https://dotty.epfl.ch/docs/reference/dropped-features/do-while.htmlТакой произвольный "условный" блок может возникать где угодно, например, внутри "иконы выбор" как в этих примерчиках на Rust (где результаты -- это "варианты" для "выбора", подобный функционал уж очень вероятно будет не только прототипным):
https://github.com/rust-lang/rfcs/issues/1380Нет сомнений, что такая фичастая "императивная функциональщина" пролезет во все дыры мейнстрима.
ibnteo писал(а):
При наличии висящих икон (break, continue, return) зачастую потребуется делать выход ДА справа, иначе шампур будет разорван. Возможность поворачивать икону это большой плюс, избавляемся от отрицания в вопросах, где зачастую и не ответишь Да или Нет, "Не переходить вниз?", Да (не переходить), Нет (не переходить), это будет узкое место в построении логических связей, и источник ошибок.
Есть ещё такие операторы как "guard" в Swift -- специальная форма "if" без then с else-частью, как правило, с return, при этом вводимые переменные (если есть) ассоциируются с дальнейшей внешней областью.
Также есть и такие "защитные" операторы как "?" в Rust, осуществляющий досрочный return из любого выражения (собственно-то, даже "не имеющий своих вопросов").
ibnteo писал(а):
Внутрь других структур переходов не будет
Ключевое -- необходимо ещё поиметь эти "структуры", или обобщённо -- "области определения", и не только как условные и циклические зоны (вплоть до "просто блок"). Переменные возникают где угодно (внутри условных выражений, в блоках), с переменными могут быть ассоциированны неявные действия (напр., деструктуры), скрываемые "ненаглядным" текстом. Возможны такие модные управляющие конструкции как "defer" из Go (а также "panic" и "recover") -- вновь текст "скрывает" следование таких действий (в смысле не точку их определения, а реальное исполнение). В Go 2 добавятся дополнительные инструкции "check" и "handle" для расширения политики отложенных действий. В языке D есть инструкция scope(exit/success/failure) -- также отложенные действия с учётом (или нет) возникших исключений (такой механизм не заменяет исключения).
Вновь нет сомнений, что отложенные действия станут повсеместными в мейнстриме (часть функционала эмулируются имеющимися средствами языка, если нет специализированных).
ibnteo писал(а):
Анонимная функция идёт справа от Действия.
Не редко встречается так называемый паттерн "конструкторов" (ака builder-ы, если не ошибаюсь, мода на которые полезла когда-то от Ruby и его подражателей аля Groovy и пр.). Через инъекцию блоков как анонимные функции выстраиваются определенные структуры, в том числе и иерархические. Характер таких структур может быть и как "данные" (ака построение DOM), и как "управляющий", к примеру, реализация сопрограмм в Kotlin. Подобные структуры могут заменить такие операторы как reset/shift в Scala (организация "продолжений"), реализовать политику "исключений" как "condition/restart" (из Lisp -- возможность возобновления работы после уточнений где-то "сверху" в обработчиках исключений), асинхронное взаимодействие и пр. Причём точки "входа/выхода" в алгоритме могут быть не только как вызов неких функций/специальных операторов (ака yield, операции чтения/записи и т.п.), но и аргументы анонимных функций могут символизировать "события".
В общем, по сути, в текстовом языке на сегодня могут быть уж очень разнообразные декларирующие и управляющие конструкты. Часть из них относится не ко времени исполнения -- явные операторы препроцессора, модные ныне constexpr в каком-либо виде (в т.ч. и как условный if и пр.).
Могут быть какие-то макро/шаблонные инъекции, выглядящие как исполнимый код (ака вызов функций), но создающие типы, переменные, описывающие операции и т.п.
Такие структуры требуют разметки с уточнением семантики.