Цитата(Andrew2000 @ May 29 2006, 15:35)

Владимир Е. Зюбин в начале ветки писал:
"В основу языка Рефлекс легли идеи, почерпнутые из языков ЯРУС, Си, QuickStep, СПАРМ. Да, до СПАРМ был проходной вариант ЯРУС-П (ЯРУС на Паскале, 1985-86), не оконченный."
И рассматривать Рефлекс надо как развитие этой ветки, и сравнивать его с языками IEC61131, а не С.
Думается, все же не стоит ограничивать рассмотрение Рефлекса только сравнительным анализом с МЭК 61131-3, ЯРУС, ЯЛУС, QuickStep, СПАРМ и т.д. При рассмотрении Рефлекса как расширения Си, ортагонального Си++, весьма интересно. Приводит к весьма забавным мыслям и идеям относительно объектно-ориентированного программирования и его составляющих (наследование, инкапсуляция, полиморфизм).
Истина, она же в сравнении познается, не правда ль? ;-) Кстати, на эту тему, в конце прошлого года были публикации (по гиперавтомату), да и в этом уже появились, ну и, надеюсь, еще появятся.
Цитата(Andrew2000 @ May 29 2006, 15:35)

Цитата(Владимир Е. Зюбин @ May 29 2006, 08:51)

Расширений Си действительно много: ....
Но диалект Си для класса задач управления один - это язык Рефлекс. ;-)
Ну, это Вы замахнулись. Есть еще, например, CLL - "Язык программирования алгоритмов логического управления". Это я откопал устаревшее описание, последний вариант использует язык С (асм, тоже никто не отменял).
Кстати, хотелось бы услышать Ваше мнение по CLL (в стиле "найдите 10 отличий") :)
Спасибо за ссылку. Интересно узнать были ли публикации по ЯЛУС, где и когда. И вообще, каким образом Вы на этот язык вышли. Очень интересно.
Что касается 10-ти отличий:
Первое впечатление очень хорошее, радует русскоязычный синтаксис, видно, что проделана очень большая и полезная работа, чувствуется влияние идей ЯРУСа (не только в названии).
Если заменить понятие "программа" на "процесс", а "ситуацию" на "состояние", то ЯЛУС-CLL (текстовая форма ЯЛУС) становится очень похож на СПАРМ.
Конкретнее ремарки по тексту (отличия CLL и Рефлекс, кроме уже упомянутых терминологических отличий):
1. стр. 4. В CLL есть таймерные переменные в Рефлексе их нет (работа со временными интервалами реализуется через оператор ТАЙМАУТ). В терминах переменных - таймерные переменные в Рефлексе описываются неявно и их очень много.
2. стр. 4 В CLL программы могут быть установлены извне в произвольную ситуацию (пустую), включены и выключены, в Рефлексе "пустые" ситуации жестко специфицированы, это два пассивных состояния: состояние нормального останова (СТОП) и состояние останова по ошибке (ОШИБКА), и, соотвественно, извне процесс может быть либо запущен (переведен в начальное состояние оператором СТАРТ), либо остановлен - т.е. переведен либо в состояние СТОП, либо ОШИБКА (операторы СТОП/ОШИБКА). Если кратко - в Рефлексе реализован некий аналог структурного программирования.
3. стр. 5. Похоже, что в CLL предполагается, что параллелизм обеспечивается на уровне ОС, или некоего ядра-супервизора - разделение по времени (отсюда рассуждения о семафорах и т.д., стр.23...), Рефлекс не исключает такой реализации, однако больше ориентирован на кооперативную многопоточность в стиле round-robin (нет проблем с конфликтами доступа).
4. стр. 6. В CLL автоматическая привязка к модулям УСО специфицируется одним числом, в Рефлексе - двумя (исторически это база+смещение). Не принципиально, но может привести к проблемам. В CLL - для привязки переменной следует указывать бит в порту, в Рефлексе - автоматически, по мере перечисления. В некоторых случаях, способ CLL удобнее.
5. В CLL - выход на ассемблер, в Рефлексе выход на Си (ассемблер, только если он предусмотрен целевым транслятором)
6. стр. 6. Про блок-схему я не понял. Сначала говорится, что графика - это одна из версий модели ЯЛУС, при чем тут CLL?
7. стр.7. в CLL есть переменные типа "флаг". В Рефлексе такого нет. ну и вообще - В Рефлексе переменные "классические": логические, короткое целое, целое, длинное целое, плавающие, с двойной точностью (могут быть прявязаны к УСО), а в CLL - флаги, вход, выход, таймер, целое и короткое целое. Т.е. в Рефлексе есть дополнительная прослойка между переменными (обычными) и портами УСО.
8. стр. 7. В CLL встречаются следы Паскаля: оператор "конец". В Рефлексе - Си-шный стиль - тела процессов и сотсояний обрамляются фигурными скобками - {}.
9. в CLL имеются особые операторы (вкл, откл, считать) для работы с переменными, в Рефлексе сохранен "сишный" стиль - операторы =, !=, == и т.д. Небольшое исключение - операторы работы с процессами (СТАРТ/СТОП/ОШИБКА).
10. Похоже, что в CLL отсутствует конструкции типа ЕСЛИ-ТО-ИНАЧЕ, без ИНАЧЕ - тяжело. В СПАРМЕ его не было. Мучались. Кроме этого в Рефлексе и оператор ВЫБОР есть (аналог switch). ну и вообще, в Рефлексе - сишный стиль ЕСЛИ-ИНАЧЕ... скобки, произвольная вложенность и т.д.
11. стр. 8 В CLL переменные глобальные, "видимы из всех программ"... а в Рефлексе - переменные имеют степень доступа и видимости. Можно использовать переменные с одними и теми же именами.
12. стр. 9. В CLL начальное состояние программ специфицируется "вручную" (операторы вкл, выкл), в Рефлексе состояние процессов по запуску специфицировано жестко - активен только начальный процесс, все остальные - пассивны.
13. стр.9-10. В CLL - есть механизм меток, в чем-то альтернативный ситуациям. В Рефлексе этого механизма нет, более того, как уже говорилось, воздействия извне ограничены тремя командами (СТАРТ/СТОП/ОШИБКА).
14. стр. 12, стр. 14 упоминается о кодах времени, спецификации интервалов времени n.m (сек.мс), и длительности цикла. спецификация интервалов - это достаточно удобная вещь, в Рефлексе ее нет (только планируется), а вот о спецификации длительности цикла я ничего не нашел. В Рефлексе - тактируемая цикличность исполнения описывается прямо - оператором спецификации такта - ТАКТ.
15. Не встретилось в описании CLL (может пропустил) упоминание об арифметических операциях типа умножение, деление. По-видимому, ориентация языка CLL в основном на логическое управление, Рефлекс не ограничивает использование Си-операторов, и позволяет описывать те же ПИД-регуляторы, делать другие математические расчеты.
16. Вообще по тексту примеров несколько озадачило присутствие идентификаторов типа _001, _086 (стр.17), и малоинформативных имен программ/ситуаций. Но это скорее по стилистике.
В общем. Очень хорошее впечатление. Было бы интересно историю языка узнать, ну и жаль, конечно, что публикаций по языку мало, и в инете он слабо представлен. Ну и с разработчиками было бы очень интересно пообщаться.