#import "@preview/diagraph:0.3.6": render, raw-render == "Дорожная карта" (план развития) языка plcc === Ограничения, накладываемые на разработку языка В основе языка plcc предусмотрены принципы и ограничения: 1. Выполнения в условиях реального времени. 2. Принципах продвинутого статического анализа кода, в частности... 3. контент-адресуемости (если формулы эквивалентны, то считаются равными; возможно отслеживание изменений на уровне абстрактного синтаксического дерева) 4. Ориентации на исполнение на ПЛК. 5. Ориентации на возможность распределенного исполнения программ. === Перспективы 1. Поддержка распределенного исполнения 2. Поддержка трехзначной и Null Convention логики 3. "Стимулирование" использования чистых функций вместо функциональных блоков, сокращение количества внутренних переменных == Пример АСД === Пример построения полной формы АСД языка plcc Полная форма АСД включает в себя управляющие узлы и примитивные функции: #render(" digraph { none -> C0 C0 -> sin C0 -> C1 C1 -> \"+\"; C1 -> ┴; ┴ -> C2 C2 -> cos; C2 -> x1; ┴ -> C3 C3 -> \"3*\"; C3 -> x2; none [label=\"\", shape=none] x1 [label=x, shape=block]; x2 [label=x, shape=block]; sin [shape=block] \"+\" [shape=block] cos [shape=block] \"3*\" [shape=block] } ") === Пример построения краткой формы АСД языка plcc Краткая форма АСД состоит в сокрытии композиционного управляющего узла с под одноместными функциями: #render(" digraph { none -> sin sin -> \"+\"; \"+\" -> ┴; ┴ -> cos; cos -> x1; ┴ -> \"3*\"; \"3*\" -> x2; x1 [label=x]; x2 [label=x]; none [label=\"\", shape=none] } ") == Пример равенства АСД За счет свойства коммутативности операции сложения для чисел $a + b = b + a$, одно поддерево плюс другое равно те же самые деревья, но сложенные в обратном порядке: #render(" digraph { none -> sin sin -> \"+\"; \"+\" -> ┴; ┴ -> cos; cos -> x1; ┴ -> \"3*\"; \"3*\" -> x2; x1 [label=x]; x2 [label=x]; nonen -> sinn sinn -> plusn; plusn -> ┴n [color=red]; ┴n -> triple [color=red]; triple -> x2n; ┴n -> cosn [color=red]; cosn -> x1n; x1n [label=x]; x2n [label=x]; none, nonen [label=\"\", shape=none] sinn [label=sin] plusn [label=\"+\", color=red] cosn [label=cos] ┴n [label=┴, color=red] triple [label=\"3*\"] } ")