O.G.A.S. English

Виды узлов

Из чего собирают граф: каждый вид узла, его входы, выходы и настройки, а ещё приёмы, которые из них складываются, и законы, по которым узлы работают вместе.

Введение

Документ содержит каталог узловой системы: её состав, класс каждого предмета и место его описания. Собственных утверждений каталог не содержит: каждая запись называет предмет, относит его к классу и отсылает к месту описания. При расхождении каталога с описанием рабочего процесса (Программа: граф и запуски) верным считается описание, а каталог исправляется.

Каталог отличается от предметного указателя: указатель сообщает название предмета и место его описания, а каталог — устройство узловой системы в целом: что неприводимо, что является сокращением, что переносит работу через границу миров и что к платформе не относится.

Проверка. make ci сверяет каталог с кодом: виды узлов в разделах 2 и 3 должны быть ровно те, что знает движок, каждый ровно один раз, и каждая ссылка должна вести в существующий раздел документации.

1 Устройство каталога

1.1 Две оси

Предмет описывается двумя независимыми признаками. Первый — роль в базисе:

Таблица 1 — Ось смысла

Класс Признак
примитив не собирается из остальных, либо требует неделимости, которой у составной конструкции не будет
сокращение собирается, но оставлено отдельным видом ради читаемости; нового смысла не вводит
нотация смысла не несёт, служит чтению графа

Второй — охват:

Таблица 2 — Ось охвата

Класс Признак Место
универсальное ничего не знает о предметной области платформа
передаточное переносит работу через границу миров, и по ту сторону законы графа не действуют платформа, со своим законом границы
промежуточное собирается из универсального, но повторяется в разных областях библиотека готовых подграфов
специализированное имеет смысл ровно в одной области модуль

1.2 Поля записи

Поля записи едины для всех предметов: шифр · название по-русски · имя в коде · класс · определение одной фразой · где описано.

1.3 Шифры

Таблица 3 — Шифры

Буквы Что нумеруют
УП узел-примитив
УС узел-сокращение
ПГ передаточный элемент — граница миров
ПБ промежуточное — готовый кусок для библиотеки
ЗС закон среды: не элемент, а свойство среды, в которой работают элементы
ВГ граница: чего в графе нет и не будет

Карточка на каждый вид — что делает, входы и выходы с их смыслом, что задаёт человек, что важно при рисовании: приложение А.

2 Примитивы

Операции-примитивы выражаются видами узлов (их счёт — раздел 8): слияние объединяет два разных примитива, а ожидание внешнего события имеет три формы.

2.1 Начало и действие

Таблица 4 — Начало и действие

Шифр Название В коде Класс Определение Где описано
УП-01 событие event примитив, передаточный пакет появляется и начинает прогон; источник задаёт source Программа: граф и запуски, раздел 5
УП-02 модуль module примитив, передаточный единственный вид, вызывающий внешний код; граница платформы Программа: граф и запуски, 4, 12.4
УП-15 «Отправить» send примитив, передаточный передаёт данные другой программе: сообщение начинает её прогон, сигнал будит её ожидающую ветку; единственный вид, выходящий за пределы своей программы Программа: граф и запуски, раздел 23
УП-16 «Показать» show примитив, передаточный показывает человеку то, что пришло, и пропускает пакет дальше без изменений Программа: граф и запуски, 24.3; Форматы файлов, 16.5
УП-19 «Уведомить» notify примитив, передаточный зовёт человека уведомлением поверх окна и пропускает пакет дальше без изменений Программа: граф и запуски, 24.6

2.2 Развилка

Одна операция с двумя осями: субъект проверки (пакет или переменная) и число выходов (два или много). Условие выражает саму операцию; выбор и переключатель являются сокращениями.

Таблица 5 — Развилка

Шифр Название В коде Класс Определение Где описано
УП-03 условие condition примитив проверка из закрытого набора; выходы true и false, данные пакета не меняются Программа: граф и запуски, раздел 8

2.3 Схождения

Таблица 6 — Схождения

Шифр Название В коде Класс Определение Где описано
УП-04 слияние-И merge при policy: all примитив ожидает по пакету на каждом входе и отдаёт объект из них Программа: граф и запуски, 10.4
УП-05 слияние-ИЛИ merge при policy: first примитив берёт первый доставленный; то же делает правило входов any Программа: граф и запуски, 10.3, 10.4

2.4 Рамки

Таблица 7 — Рамки

Шифр Название В коде Класс Определение Где описано
УП-06 рамка «Повторять» repeat примитив круг: тело возвращает пакет на again, пока не вернёт на finish Программа: граф и запуски, 11.1
УП-07 рамка «Для каждого» for_each примитив элемент списка — свой круг; является примитивом, так как счётчика в графе нет Программа: граф и запуски, 11.2

2.5 Данные

Таблица 8 — Данные

Шифр Название В коде Класс Определение Где описано
УП-08 взять поле take примитив одно поле пакета становится пакетом Программа: граф и запуски, раздел 21
УП-17 отметка stamp примитив время начала прогона и номер записи, который не повторяется; холодный источник, повторяется при продолжении Программа: граф и запуски, раздел 25
УП-18 отбор pick примитив записи списка, которые проходят проверку из закрытого набора, и их число Программа: граф и запуски, раздел 26
УП-20 время moment примитив момент по календарю: от даты пакета или начала прогона через столько-то дней, в такой-то час Программа: граф и запуски, раздел 27
УП-21 шаблон template примитив текст, в который подставлены поля пакета; подставляет, не считает Программа: граф и запуски, раздел 28

2.6 Состояние

Таблица 9 — Состояние

Шифр Название В коде Класс Определение Где описано
УП-09 переменная variable примитив отдаёт текущее значение переменной; холодный источник Программа: граф и запуски, разделы 6, 7
УП-10 запись write примитив кладёт пакет или его поле в переменную и передаёт пакет дальше Программа: граф и запуски, раздел 7
УП-11 «Впервые?» first_time примитив по неделимости проверяет и запоминает одним действием, без промежутка между проверкой и записью Программа: граф и запуски, раздел 20

2.7 Ожидания

Три формы одного примитива: ожидание времени, человека и сигнала. Формы устроены одинаково (открытие ожидания, получение пришедшего, закрытие); у каждой свой срок и своя запись в контрольной точке.

Таблица 10 — Ожидания

Шифр Название В коде Класс Определение Где описано
УП-12 «Подождать» wait примитив, передаточный ветка ожидает до названного момента по реальному времени Программа: граф и запуски, раздел 19
УП-13 «Вопрос» ask примитив, передаточный ветка ожидает, пока человек не ответит на пульте Программа: граф и запуски, раздел 9
УП-14 «Дождаться сигнала» signal примитив, передаточный ветка ожидает, пока снаружи не придёт сигнал с этим именем Программа: граф и запуски, раздел 22

3 Сокращения и нотация

Собираются из примитивов и нового смысла не вводят. Оставлены, так как читаются лучше своего развёрнутого вида.

Таблица 11 — Сокращения и нотация

Шифр Название В коде Класс Во что разворачивается Где описано
УС-01 выбор choice сокращение цепочка условий на равенство с именованными выходами Программа: граф и запуски, раздел 8
УС-02 переключатель switch сокращение выбор, у которого субъект сравнения — переменная Программа: граф и запуски, раздел 8
УС-03 вызов процесса process сокращение макрос: граф вызываемого разворачивается внутрь до прогона; входы, выходы и параметры — те, что объявил вызываемый Программа: граф и запуски, раздел 18
УС-04 результат result сокращение вторая половина вызова; при разворачивании исчезает Программа: граф и запуски, раздел 18
УС-05 постоянная constant сокращение значение параметра, поданное ребром Программа: граф и запуски, разделы 4, 6
УС-06 заметка note сокращение ничего: место графа со словами человека для того, кто его читает Мастерская, 5.1

Надстройки, не виды узлов: группа (Программа: граф и запуски, раздел 17), рамка как граница (Программа: граф и запуски, раздел 11), сквозной объект (Программа: граф и запуски, раздел 16).

Заметки на холсте и точки на связях — тоже надстройки, а не виды узлов: заметка ничего не делает, а точка только ведёт связь в обход — тождеством служит само ребро (Мастерская, 5.1). Заметка лежит в документе среди узлов видом-сокращением note (УС-06) — так холст ставит, переносит, кладёт в группу и убирает её, как узел, — но портов у неё нет, и прогон к ней не приходит: сокращает она пустое место графа; точка — поле via ребра (Форматы файлов, раздел 5).

4 Передаточные элементы: границы миров

Передаточный элемент — место, где работа пересекает границу и законы графа за границей не действуют. Каждый такой элемент должен отвечать на пять вопросов.

Таблица 12 — Передаточные элементы: границы миров

Шифр Граница Срок Отказ Повтор Отмена Владение
ПГ-01 модуль (УП-02) timeout_ms манифеста выход failed retry и объявленная идемпотентность метод cancel рабочая папка прогона
ПГ-02 человек (УП-13) timeout_ms, 0 — без срока выход declined вопрос открывается заново после сбоя закрывается с прогоном ответ принадлежит прогону
ПГ-03 сигнал извне (УП-14) timeout_ms, 0 — без срока — сигнал не хранится: при отсутствии получателя отбрасывается с записью снимается с прогоном данные сигнала принадлежат прогону
ПГ-04 часы: расписание и таймер (УП-01) сам момент — пропущенное при остановке машины даёт один прогон выключением программы —
ПГ-05 часы: пауза (УП-12) сам момент — момент лежит в контрольной точке снимается с прогоном —
ПГ-06 пульт (УП-01 при source: pult) — — правило наложения overlap — данные элемента
ПГ-07 файл и артефакт — отказ модуля, который его открывал — — файл после появления не изменяется; файл, данный человеком, живёт столько, сколько место, куда его дали (Программа: граф и запуски, 24.4)
ПГ-08 вызов процесса (УС-03) своего нет: разворачивается до прогона отказ внутри — отказ снаружи — общая с вызывающим общее с вызывающим
ПГ-09 другая программа (УП-15; УП-01 при source: message) своего нет: отправка не ждёт получателя выход unsent с причиной нет: сообщение подчиняется правилу наложения получателя, сигнал не хранится — данные переходят получателю; файлы, которые они называют, копируются в его files/
ПГ-10 человек: показ (УП-16) — не отказывает: поле, которого нет в пакете, показано отсутствующим, прогон идёт дальше — — показанное держит программа, пока включена
ПГ-11 человек: уведомление (УП-19) — не отказывает — — уведомление не хранится: его видит, кто у окна

5 Промежуточное: библиотека готовых кусков

Промежуточные элементы собираются из примитивов, повторяются в разных областях и платформе не принадлежат. Механизм библиотеки — вызов процесса (УС-03); изменений платформы библиотека не требует.

Таблица 13 — Промежуточное: библиотека готовых кусков

Шифр Приём Из чего собирается
ПБ-01 дебаунс: «через N после последней правки» наложение replace + пауза
ПБ-02 «по одному за раз», очередь печати наложение queue
ПБ-03 «кто первый» слияние-ИЛИ (УП-05)
ПБ-04 ограничение частоты рамка «Для каждого» + пауза
ПБ-05 конечный автомат событие-такт + переключатель + запись
ПБ-06 эскалация вопрос со сроком + сигнал со сроком
ПБ-07 «собрать за окно времени» список-переменная + расписание; числа у слияния нет
ПБ-08 вхождение в список (∈) перебор списка + сравнение
ПБ-09 свёртка списка в одно круг + переменная прогона
ПБ-10 упорядоченный веер цепочка вместо разветвления

6 Законы среды

Законы среды — не элементы, а свойства среды, в которой работают элементы.

Таблица 14 — Законы среды

Шифр Закон Суть Где описано
ЗС-01 очередь входа у каждого входного порта FIFO длины graph.queue_depth; переполнение — ошибка, а не потеря без сообщения Программа: граф и запуски, 10.1
ЗС-02 правило входов all ожидает все входы, any берёт первый; невыбранное уходит на overflow или записывается отброшенным Программа: граф и запуски, 10.3
ЗС-03 наложение прогонов queue, skip, replace, parallel — поведение, если прогон этого события ещё выполняется Программа: граф и запуски, раздел 5
ЗС-04 ацикличность стрелка назад — только внутри рамки; постоянную работу обеспечивает включённая программа, а не кольцо в графе Программа: граф и запуски, раздел 3
ЗС-05 тотальность рамки ограничены, рекурсия запрещена, у шага модуля есть срок: всякий прогон конечен, кроме ожидания без срока (ПГ-02, ПГ-03) —
ЗС-06 воспроизводимость путь прогона повторяется при продолжении; случайности в графе поэтому нет — она в модуле Программа: граф и запуски, раздел 14
ЗС-07 два места недетерминизма схождение-ИЛИ (УП-05) и правило входов any — единственные места, где результат зависит от порядка поступления —
ЗС-08 сохранение потока узел, ожидающий пакетов с двух путей одной развилки, никогда не сработает: предупреждение never_fires до прогона и запись stalled после Программа: граф и запуски, 10.4
ЗС-09 горячее и холодное холодный вход не ожидается: значение читается в момент шага Программа: граф и запуски, раздел 6
ЗС-10 правило пополнения набора новый вид узла оправдан, только если он примитив; остальное — подграф или модуль Программа: граф и запуски, раздел 3, правило 8

7 Границы узловой системы

Таблица 15 — Границы узловой системы

Шифр Отсутствующее Обоснование
ВГ-01 арифметика и выражения новые операции над значениями бесконечны; их место — модуль (ЗС-10). Из модулей вынуты две операции, одинаковые у всех, — сдвиг по календарю (УП-20) и подстановка полей в текст (УП-21); общих модулей-кирпичей для остального платформа не везёт
ВГ-02 неограниченный поиск, рекурсия условие завершения прогона (ЗС-05)
ВГ-03 откат сделанного, компенсация не потребовал ни один из пятидесяти сценариев
ВГ-04 приоритеты заданий очередь строго FIFO (ЗС-01)
ВГ-05 случайность в графе нарушила бы воспроизводимость (ЗС-06)
ВГ-06 явный обрыв прогона выражается отказом модуля и поэтому не является примитивом

8 Численные характеристики

Таблица 16 — Численные характеристики узловой системы

Показатель Значение
видов узлов 26
из них несут примитивы 20
из них сокращения 6
операций-примитивов 21
передаточных границ 11
законов среды 10
готовых кусков для библиотеки 10
названных границ 6

Набор видов закрыт. Добавление вида является изменением документации и по закону ЗС-10 допускается только при доказательстве, что вид является примитивом.

Приложение А (справочное). Справочник видов узлов

Справочник содержит по одной карточке на каждый вид узла: назначение, входы и выходы с их смыслом, класс, параметры, задаваемые человеком, и сведения для рисования.

Справочник является снимком работающей платформы. Порты и тексты сняты с работающей платформы (process.kinds, process.node.template, i18n.catalog). Определяющими являются код и Программа: граф и запуски; каталог и классы — в разделах 1–8 настоящего документа. При расхождении справочник снимается заново, а не исправляется вручную. make ci следит, чтобы здесь были все виды, которые знает движок.

Обозначения портов. *обязателен* — без пакета на этом входе узел не срабатывает; *необязателен* — порт существует всегда, но пакет по нему передаётся, только если из него проведено ребро.

А.1 Сведения, необходимые для рисования

Семь свойств, от которых внешний вид узла зависит сильнее, чем от его смысла.

Таблица А.1 — Свойства видов узлов, важные для рисования

Свойство Виды Почему важно для рисования
нет входов — начинает сам событие, переменная, постоянная, отметка слева к ним ничего не подходит; это источники
нет выходов — конец результат справа от него ничего не отходит
число портов задаёт человек слияние (входы), выбор и переключатель (выходы) у одного и того же вида на холсте будет разное число точек: от одной до многих
число портов задаёт манифест модуль у двух узлов-модулей рядом порты разные; плюс failed, который даёт граф
число портов задаёт вызываемый процесс вызов процесса у двух вызовов разных процессов порты разные и названы словами человека
область, а не коробка рамка «Повторять», рамка «Для каждого» у них порты снаружи и внутрь: тело лежит в области
ветка может стоять «Подождать», «Вопрос», «Дождаться сигнала» нужен вид ожидания: узел не работает и не кончил, он стоит

Холодное ребро идёт от переменной или постоянной. Узел на его конце ребро не ожидает, а читает значение в момент шага. На холсте холодное ребро рисуется пунктиром (Мастерская, 5.3).

Параметр из переменной ({ "variable": "<id>" }, Программа: граф и запуски, раздел 15) читается так же — в момент шага. На холсте он стоит на узле строкой переменной с отметкой чтения (Мастерская, 5.3): по холсту видно, откуда узел берёт данные.

Семейство вида говорит, зачем узел, и задаёт цвет его шапки на холсте (Мастерская, 5.3). Семейств работы пять: начало и конец (start) — событие и результат; работа (work) — модуль, «Отправить», «Уведомить» и вызов процесса; ход (flow) — условие, выбор, переключатель, «Впервые?», слияние и обе рамки; данные (data) — переменная, постоянная, запись, «Взять поле», «Показать», «Отметка», «Отбор», «Время» и «Шаблон»; ожидание (wait) — «Подождать», «Вопрос» и «Дождаться сигнала»; и шестое, не узлов работы, — заметка (note). Семейство называет сам вид в своём описании (family, Методы графа, раздел 1); у группы шапка своя.

А.2 Карточки

А.2.1 УП-01 · Событие · event

Что делает. Событие: с него начинается работа. Его вызывают пульт, часы, включение программы, вызов из другого процесса, сообщение другой программы или значение, которое изменил человек.

Таблица А.2 — УП-01 · Событие · event

Поле Значение
класс примитив · передаточный
входы —
выходы event — Данные, с которых начинается запуск.
число портов нет входов: начинает прогон
человек задаёт name, overlap, source, variable; у timer — interval_ms; у schedule — at, weekdays, month_days; что событие принимает — takes
для рисования по виду источника меняется смысл: pult, start, timer, schedule, call, message, change; у call параметр name — имя входа у узла, вызывающего процесс; у change параметр variable — переменная, за которой событие следит

А.2.2 УП-02 · Модуль · module

Что делает. Модуль делает работу: у него свои входы, выходы и настройки.

Таблица А.3 — УП-02 · Модуль · module

Поле Значение
класс примитив · передаточный
входы —
выходы failed необязателен — Сюда уходит отказ модуля, когда из этого выхода проведена связь: запуск не падает, а идёт по этой ветке. Данные — код ошибки, её текст и то, что пришло на вход. Без связи отказ, как обычно, останавливает запуск.
число портов порты задаёт манифест модуля
человек задаёт параметры — по схеме манифеста модуля; поля самого узла: memory, у узла службы — overlap
для рисования failed есть всегда, но несёт пакет, только если из него провели ребро

А.2.3 УП-03 · Условие · condition

Что делает. Условие: данные идут по ветке «да» или «нет».

Таблица А.4 — УП-03 · Условие · condition

Поле Значение
класс примитив
входы input обязателен — Данные, которые проверяет условие.
выходы true — Сюда идут данные, если условие выполнено.
false — Сюда идут данные, если условие не выполнено.
число портов два выхода всегда
человек задаёт predicate
для рисования смотрит на пакет или на переменную — по полю variable

А.2.4 УП-04, УП-05 · Слияние · merge

Что делает. Слияние: собирает данные с нескольких входов в одни.

Таблица А.5 — УП-04, УП-05 · Слияние · merge

Поле Значение
класс примитив (два: all и first)
входы input обязателен — Один из входов слияния. Если сюда ведут несколько связей, выберите, как их собирать.
выходы success — Данные, собранные с нескольких входов.
число портов входы называет человек — по одному на источник
человек задаёт join_key, policy, shape
для рисования input в шаблоне — только первый, имена остальных свои

А.2.5 УП-06 · Повторять · repeat

Что делает. Рамка «Повторять»: узлы внутри неё повторяются, пока она не скажет «готово».

Таблица А.6 — УП-06 · Повторять · repeat

Поле Значение
класс примитив
входы input обязателен — Данные, с которых начинается первый круг.
again — Сюда тело возвращает данные на следующий круг.
finish — Сюда тело отдаёт данные, когда кругов хватит.
выходы body — Отсюда данные уходят в узлы внутри рамки.
done — Повторение закончилось: данные идут дальше.
число портов рамка: область, а не коробка
человек задаёт max_iterations, max_loop_ms, on_limit
для рисования порты смотрят и наружу (input, done), и внутрь (body, again, finish)

А.2.6 УП-07 · Для каждого · for_each

Что делает. Рамка «Для каждого»: узлы внутри неё работают с каждым элементом списка по очереди, а рамка собирает результаты.

Таблица А.7 — УП-07 · Для каждого · for_each

Поле Значение
класс примитив
входы list обязателен — Список, который рамка разберёт по элементам.
result — Результат одного элемента — тело возвращает его рамке.
выходы item — Один элемент списка — уходит в тело рамки.
done — Список результатов в порядке элементов, когда прошли все.
число портов рамка: область, а не коробка
человек задаёт parallel, path
для рисования наружу list и done, внутрь item и result

А.2.7 УП-08 · Взять поле · take

Что делает. Взять поле: берёт одно поле из данных и делает его новыми данными. Остальное отбрасывается. Поле называется последней частью пути или именем, которое вы зададите.

Таблица А.8 — УП-08 · Взять поле · take

Поле Значение
класс примитив
входы input обязателен — Данные, из которых берём одно поле.
выходы value — Данные из одного взятого поля.
число портов один вход, один выход
человек задаёт as, path
для рисования единственная операция над данными в графе

А.2.8 УП-09 · Переменная · variable

Что делает. Переменная: отдаёт своё нынешнее значение. Узел её не ждёт — берёт значение в момент работы.

Таблица А.9 — УП-09 · Переменная · variable

Поле Значение
класс примитив
входы —
выходы value — Нынешнее значение переменной. Узел, к которому оно придёт, его не ждёт.
число портов нет входов: холодный источник
человек задаёт variable
для рисования ребро от него — холодное: узел на том конце его не ждёт

А.2.9 УП-10 · Запись · write

Что делает. Запись: кладёт данные в переменную и передаёт их дальше.

Таблица А.10 — УП-10 · Запись · write

Поле Значение
класс примитив
входы value обязателен — Данные, которые лягут в переменную.
выходы success — Те же данные дальше по графу.
число портов один вход, один выход
человек задаёт mode, path, variable; у put и remove — key; у spread — variables вместо variable
для рисования пакет проходит насквозь, значение уходит в переменную

А.2.10 УП-11 · Впервые? · first_time

Что делает. Впервые?: смотрит, встречалось ли это значение раньше. Не встречалось — выход «да», и значение запоминается в списке; встречалось — выход «нет». Данные идут дальше без изменений.

Таблица А.11 — УП-11 · Впервые? · first_time

Поле Значение
класс примитив по неделимости
входы input обязателен — Данные, о которых спрашиваем, встречались ли они раньше.
выходы true — Впервые: значение только что запомнено.
false — Уже встречалось раньше.
число портов два выхода всегда
человек задаёт path, variable
для рисования единственный узел, который и проверяет, и меняет состояние

А.2.11 УП-12 · Подождать · wait

Что делает. Подождать: эта ветка стоит заданное время, остальные работают дальше. Пауза записана в контрольную точку — после сбоя ветка досидит остаток, а не начнёт ждать заново.

Таблица А.12 — УП-12 · Подождать · wait

Поле Значение
класс примитив · передаточный
входы input обязателен — Данные, которые подождут здесь и пойдут дальше без изменений.
выходы done — Время вышло: те же данные идут дальше.
число портов один вход, один выход
человек задаёт wait_ms
для рисования ветка может стоять: нужен вид ожидания

А.2.12 УП-13 · Вопрос · ask

Что делает. Вопрос человеку: эта ветка ждёт ответа на пульте или на самом узле, остальные работают дальше.

Таблица А.13 — УП-13 · Вопрос · ask

Поле Значение
класс примитив · передаточный
входы question обязателен — Данные, которые человек увидит как вопрос.
выходы answer — Вопрос вместе с ответом человека.
declined — Человек отказался отвечать или ответил «нет».
timeout — Ответа не дождались: срок вышел.
число портов три выхода всегда
человек задаёт choices, kind, timeout_ms; у text — fill: поле данных, текст которого уже стоит в ответе
для рисования ветка может стоять; единственный узел, который показывает себя на пульте

А.2.13 УП-14 · Дождаться сигнала · signal

Что делает. Дождаться сигнала: ветка стоит, пока снаружи не придёт сигнал с этим именем, — остальные работают дальше. Сигнал посылают модуль, пульт или другой процесс. Не дождались в срок — ветка уходит на выход «не дождались».

Таблица А.14 — УП-14 · Дождаться сигнала · signal

Поле Значение
класс примитив · передаточный
входы input обязателен — Данные, с которыми ветка встаёт ждать.
выходы signal — Сигнал пришёл: данные, с которыми ждали, и данные сигнала.
timeout — Сигнала не дождались: срок вышел.
число портов два выхода всегда
человек задаёт key, name, timeout_ms
для рисования ветка может стоять: ждёт снаружи

А.2.14 УП-15 · Отправить · send

Что делает. Отправить данные другой программе — или этой же. Сообщение начинает её запуск событием «сообщение» с тем же именем; сигнал будит её ветку, которая ждёт этого сигнала. Никто не принял — данные уходят на выход «не отправлено» с причиной.

Таблица А.15 — УП-15 · Отправить · send

Поле Значение
класс примитив · передаточный
входы input обязателен — Что отправить.
выходы sent — Принято: данные идут дальше, как были.
unsent — Не принято: причина и данные. Программа выключена, нет события или ждущей ветки с этим именем, событие не взяло новый запуск.
число портов два выхода всегда, идёт ровно один
человек задаёт key, mode, name, process_id или to
для рисования связь уходит за пределы программы: получатель — другая программа, по имени

А.2.15 УП-16 · Показать · show

Что делает. Показать: то, что пришло, видно прямо на узле, а взятое в интерфейс — и там. Данные идут дальше без изменений, поэтому узел ставят и в конец ветки, и в середину.

Таблица А.16 — УП-16 · Показать · show

Поле Значение
класс примитив · передаточный
входы value обязателен — Данные, которые узел покажет.
выходы success — Те же данные дальше по графу, без изменений.
число портов один вход и один выход: стоит и в конце ветки, и в середине
человек задаёт path
для рисования под строками портов — просмотр того, что пришло: текст, число, список, картинка, звук, видео, файл

А.2.16 УС-01 · Выбор · choice

Что делает. Выбор: данные уходят на выход того варианта, чьё значение совпало; не совпал ни один — на «прочее».

Таблица А.17 — УС-01 · Выбор · choice

Поле Значение
класс сокращение
входы input обязателен — Данные, которые выбор разложит по вариантам.
выходы other — Данные, которым не подошёл ни один вариант.
число портов выходы называет человек: варианты плюс other
человек задаёт cases, path; variable — проверять значение переменной, а не данные
для рисования число выходов от одного до многих

А.2.17 УС-02 · Переключатель · switch

Что делает. Переключатель: развилка не по данным, а по переменной — той, что человек ставит на пульте. Данные идут дальше без изменений; значение, не совпавшее ни с одним вариантом, уходит на «остальное».

Таблица А.18 — УС-02 · Переключатель · switch

Поле Значение
класс сокращение
входы input обязателен — Данные, которые надо развести по положению переключателя.
выходы other — Значение переменной не совпало ни с одним вариантом.
число портов выходы называет человек: варианты плюс other
человек задаёт cases, variable
для рисования то же, что выбор, но смотрит на переменную

А.2.18 УС-03 · Процесс · process

Что делает. Вызывает другой процесс как узел: его граф разворачивается сюда перед запуском. Входы и выходы узла — входы и выходы вызываемого процесса, под их именами. Поправили вызываемый процесс — вызов получит правку при следующем запуске.

Таблица А.19 — УС-03 · Процесс · process

Поле Значение
класс сокращение
входы по одному на каждое событие call вызываемого процесса, под именем события; input — у события без имени и у вызова, который ещё не назвал процесс
выходы по одному на каждый узел «Результат» вызываемого процесса, под именем узла; success — у узла без имени и у вызова, который ещё не назвал процесс
число портов задаёт вызываемый процесс
человек задаёт process_id, values — значения переменных вызываемого процесса
для рисования внутри — чужой граф; разворачивается до прогона. На шапке — название вызываемого процесса; в прогоне узел показывает то, что делают узлы развёрнутого графа

А.2.19 УС-04 · Результат · result

Что делает. Чем этот процесс отвечает, когда его вызвали узлом из другого процесса. Данные, дошедшие сюда, выходят из вызывающего узла — через выход с именем этого узла. Узлов «Результат» может быть несколько, у каждого своё имя.

Таблица А.20 — УС-04 · Результат · result

Поле Значение
класс сокращение
входы value обязателен — Данные, которыми этот процесс отвечает вызвавшему.
выходы —
число портов нет выходов: конец
человек задаёт name — имя выхода у узла, вызывающего процесс
для рисования есть только у процесса, который вызывают

А.2.20 УС-05 · Постоянная · constant

Что делает. Постоянная: отдаёт заданное значение. Узел её тоже не ждёт.

Таблица А.21 — УС-05 · Постоянная · constant

Поле Значение
класс сокращение
входы —
выходы value — Заданное значение. Узел, к которому оно придёт, его не ждёт.
число портов нет входов: холодный источник
человек задаёт value, type
для рисования ребро от него — холодное

А.2.21 УП-17 · Отметка · stamp

Что делает. Отметка: время начала прогона и номер записи, который не повторяется. Узел, к которому она придёт, её не ждёт.

Таблица А.22 — УП-17 · Отметка · stamp

Поле Значение
класс примитив
входы —
выходы value — { time, id }: время начала прогона и номер этого шага.
число портов нет входов: холодный источник
человек задаёт —
для рисования ребро от него — холодное

А.2.22 УП-18 · Отбор · pick

Что делает. Отбор: из списка — записи, которые проходят проверку, и их число.

Таблица А.23 — УП-18 · Отбор · pick

Поле Значение
класс примитив
входы input обязателен — Данные, к которым добавится найденное.
выходы success — Те же данные с полем найденного: { items, count }.
число портов один вход, один выход
человек задаёт variable или list, test, as
для рисования смотрит в список переменной или пакета; пакет проходит дальше с найденным

А.2.23 УП-19 · Уведомить · notify

Что делает. Уведомить: человек видит уведомление поверх окна, на какой бы вкладке и в каком окне он ни был, — напоминание, новое письмо, конец долгой работы. Данные идут дальше без изменений.

Таблица А.24 — УП-19 · Уведомить · notify

Поле Значение
класс примитив · передаточный
входы value обязателен — Данные, из которых берётся текст уведомления.
выходы success — Те же данные дальше по графу, без изменений.
число портов один вход и один выход: стоит и в конце ветки, и в середине
человек задаёт title, path
для рисования шапка семейства «работа»: узел действует наружу, на человека

А.2.24 УП-20 · Время · moment

Что делает. Время: момент от начала запуска или от даты в данных — через столько-то дней, в такой-то час. Данные идут дальше, а момент добавлен к ним полем.

Таблица А.25 — УП-20 · Время · moment

Поле Значение
класс примитив
входы input обязателен — Данные, к которым добавится момент; в их поле может лежать дата, от которой его считают.
выходы success — Те же данные с полем момента: дата и время по часам этой машины.
число портов один вход, один выход
человек задаёт from, days, at, as
для рисования пакет проходит дальше с добавленным моментом

А.2.25 УП-21 · Шаблон · template

Что делает. Шаблон: текст, в который подставлены поля данных. Считать он не умеет, только подставляет. Данные идут дальше, а текст добавлен к ним полем.

Таблица А.26 — УП-21 · Шаблон · template

Поле Значение
класс примитив
входы input обязателен — Данные, поля которых подставляются в текст.
выходы success — Те же данные с полем готового текста.
число портов один вход, один выход
человек задаёт text, as
для рисования пакет проходит дальше с добавленным текстом

А.2.26 УС-06 · Заметка · note

Что делает. Заметка: слова человека на холсте о программе — что здесь делается и почему. Ничего не делает и в запуске не участвует.

Таблица А.27 — УС-06 · Заметка · note

Поле Значение
класс сокращение
входы —
выходы —
число портов портов нет: связи к ней не бывает
человек задаёт text
для рисования под шапкой своего цвета — текст, строка в строку, от двух до восьми строк