Артём Неганов писал(а):
...
Мне не совсем ясно, что имеется ввиду - поддержка синтаксиса и процедурной части языка, или серьезная поддержка современного JavaScript, как объектного процедурно-функционального языка? И вообще, ДРАКОН умеет это делать?
...
Первое - на что уже указали. И некоторая конкретика.
usr345 писал(а):
...
Для этого нужно использовать что-то другое, позволяющее визуализировать, как меняется структура данных по ходу работы программы.
Для первой функции я бы вообще Дракон не использовал. А нарисовал бы дерево HTML элементов и пояснение, как идет обход дерева в коде:
Код:
node = node.firstChild;
while (node) {
walk(node, func);
node = node.nextSibling;
}
...
Да, это уже будет спецификация программы. Подобно тому, как
обсуждалось для
этой статьи - см. раздел "Балансировка".
Подобная задача ставилась раньше. Вот некоторые мысли:
viewtopic.php?p=72538#p72538 - м.б. поможет.
usr345 писал(а):
...
Отвечаю на вопросы:
1. как описывать наиболее интересные prototypes и наследование объектов
На Драконе - никак. Это язык для описания алгоритмов, а не структур данных.
Короче, в связке д.б. схемы типов. Допустим, такие, как
здесь описано. Но также нужно как-то задать связывание данных и действий в исполнителе. Т.е. снова возвращаемся к задаче, указанной выше...
Мейер для своей системы решил задачу реализацией схемы наследования. Синтаксис и примеры можно найти в выдержке отсюда:
viewtopic.php?p=72093#p72093. Решение кажется в целом оптимальным для "классовых" языков. По структуре такие схемы, конечно, не маршрутные, как импер-схемы процессов. Это или "прошитые" деревья, или сети (многосвязные графы). Их тоже можно выводить "исчислением графов".
usr345 писал(а):
...
2. closures
Функциия, возвращающая другую функцию. Это гибрид структуры и процесса. На чистом Драконе вы сможете описать только процесс. Для описания closure как таковой придется использовать что-то дополнительно к Дракону.
Видимо, снова схему типа - только процедурного.
usr345 писал(а):
...
3. события
Событие - это просто функция плюс условия, при котором она будет вызвана: нажатие клавиши, таймер и т.д.
Условие вызова, конечно, является частью схемы вызывающего процесса - вместе с оператором вызова-возврата (обычно Вставкой). Также его можно продублировать в схеме процесса-обработчика события - как часть предусловия. Возможный синтаксис предусловий см. в
этом примере.
usr345 писал(а):
...
4. callbacks
Функция в качестве аргумента. Аналогично: гибрид процесса и структуры.
Тут, пожалуй, как со вторым - только уже процедуру передаём как параметр.