DRAKON.SU

Текущее время: Понедельник, 16 Июнь, 2025 18:25

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 172 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 9  След.
Автор Сообщение
СообщениеДобавлено: Понедельник, 13 Май, 2013 11:42 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
              Прошу уважаемых участников форума (и, в особенности Алексея Николаевича Донского) внимательно прочитать статью Сергея Дмитриевича Ефанова. Эта статья содержит ключ к обсуждению данной темы. По сути вся тема является комментарием к тем фундаментальным идеям, которые выдвинул Ефанов в своей статье.


Автор статьи Сергей Ефанов

Программирование микроконтроллеров на ДРАКОНе
http://we.easyelectronics.ru/drakon/pro ... akone.html

Цитата:
Некоторое время назад мне на глаза попалось упоминание о языке ДРАКОН. Я немного почитал, ничего не понял, закрыл, забыл.
Но почему-то забылось не совсем.
Тут подвернулась поездка. Снова нашёл, закачал файл в электронную книжку, взял с собой. В поезде всё равно делать нечего.

Медленно и со вкусом прочитал.

И — понял! Это просто клад!

По возвращении уже думал только об одном: где бы найти инструмент для работы?
К счастью, такой инструмент нашелся.
Попробовал небольшие примерчики — вроде какой то код генерится. Переписал на ДРАКОНе довольно запутанную функцию из реального проекта.

Функция заработала сразу! Более того, при переносе алгоритма в дракон-схему, я обнаружил, что у меня в ней была ошибка! Эта функция работала уже довольно давно, не в одной сотне изделий. Ошибка не была фатальной, она возникала редко, и компенсировалась переподключением к серверу. Но она была!

В тексте на Си её было незаметно. А при попытке перенести алгоритм на дракон-схему, ошибка стала не просто заметной — алгоритм в этом месте «не вырисовывался»!

С тех пор прошло чуть больше года. Я программирую только на ДРАКОНе.
Попытаюсь сказать несколько слов о том, что это мне дало, и как выглядит процесс.

Написание программы распалось на два этапа — проработка алгоритма, и собственно программирование.

Главное в любой программе — алгоритм. В ДРАКОНе он рисуется, точнее — составляется из графических элементов. Очень похожих на элементы блок-схем.

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

На ДРАКОНЕ запутанный и непонятный алгоритм нарисовать просто нельзя. И наоборот, любой сложный алгоритм, нарисованный согласно этим правилам, становится очень понятным.

При разработке алгоритма теперь его не надо держать в голове при написании текста программы. Работа сводится к визуальному конструированию алгоритма. Это гораздо легче. Не требуется такое сосредоточение, как обычно. Так как нарисованный алгоритм очень понятен — работу можно спокойно прервать в любой момент, потом легко вернуться к её продолжению.

И только когда весь алгоритм «отлизан» — переходим к собственно программированию. В чём оно теперь заключается? В том, что для каждой иконы нужно написать код, который выполнит то, что написано на этой иконе. Как правило это 1 строчка. На высоких уровнях иерархии проекта — это может быть вызов одной функции, или одного метода класса (заметим, что все функции и классы тоже нарисованы на ДРАКОНЕ). На нижнем уровне — это может быть изменение одного бита.

В этом месте, наверняка, у многих вырвется вопрос: — «Ну и зачем весь этот огород, если код всё равно надо писать самому?!».

Не торопитесь!

В чём сложность программирования? (с тем, что программирование — сложная работа, думаю, никто спорить не будет?).

Разве в написании строчек типа printf(«Hello, Word»);?
Станет ли сложной программа от того, что мы напишем 1000 подобных строчек? А 10000?
Нет, она не станет от этого сложной. Сложной программу делают сложные взаимосвязи между её частями.

Так вот, на этапе программирования икон об этом думать уже не надо.

Совсем. Вообще. Никак. Не надо, и всё тут!

Всё, что нужно — аккуратно запрограммировать ОДНУ икону. Только ОДНУ! Когда будем программировать другую — про предыдущую уже можно не вспоминать. В тот код, который сгенерирует редактор — смотреть не нужно. Так же, как мы не смотрим в машинные коды, полученные после компиляции.

Программирование на этом этапе превратилось в чисто техническую процедуру. Несложную.

Уже перестал удивляться тому, что программы работают сразу после включения…

=======

Как начать использовать ДРАКОН?

Нужно потрудится. Нужно прочитать книгу «Язык Дракон».

Прочитать неспеша и вдумчиво.

Мне помогло, что я её читал в поезде, где не было отвлекающих факторов. Книга написана очень хорошо, просто, доходчиво, интересно. drakon-practic.ru/drakon.pdf

Если по прочтении возникло желание попробовать ( а я не сомневаюсь, что возникнет ) — тогда скачивайте ИС ДРАКОН, и начинайте. drakon-practic.ru/is_drakon.zip

Не пытайтесь получить представление о языке по приводимым видеороликам. Их цель совершенно другая.

Дело в том, что сегодня за пределами РосКосмоса почти нет инструментов, пригодных для практической работы с языком ДРАКОН. «ИС ДРАКОН» пишется на голом энтузиазме одним человеком, в свободное время.

На сегодняшний день справка к программе устарела. Начать работу по ней очень трудно. Я кое как разобрался — и что бы помочь другим преодолеть этот этап — записал пару видеоуроков. Самое ценное в которых — это куда ткнуть мышкой, что бы получить то или это.

Понятно же, что программа, которая в процессе этих уроков создаётся, может быть написана в текстовом редакторе за пару минут без всех этих хлопот. Делать на основе этого урока заключение о языке — это тоже самое, что писать рецензию на «Война и Мир» по «Мама мыла раму».

Но конечно же, Вы начнёте с видеороликов! Ну что же. Имеющий уши — услышит, имеющий глаза — увидит.


Видеоролики уроков теперь размещены и на youtube:
http://www.youtube.com/watch?v=Ua9dUUON ... re=related
http://www.youtube.com/watch?v=zeIq_JQh ... re=related
http://www.youtube.com/watch?v=Sp6AMGzT ... ure=relmfu
http://www.youtube.com/watch?v=1PWDuPeJ ... re=related

Урок 1. Текст http://drakon-practic.ru/is_drakon_part1.pdf
Урок 2. Текст http://drakon-practic.ru/is_drakon_part2.pdf


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 12:26 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
Владимир Паронджанов писал(а):
3. Из этих аксиом математически строго выводится любой слепыш (шампур-схема).

4. Слепыш (шампур-схема) представляет собой теорему, которая выводится из аксиом методом логического вывода.

5. Это означает, что слепыш не может содержать ошибок (если дракон-конструктор спроектирован правильно).


Почему же не дать возможность Владимиру Даниеловичу попробовать доказать корректность слепышей? Хотя я, как и Алексей Донской, полностью не согласен с его утверждениями.

И я утверждаю, что найдется хотя бы одна схема, содержащая ошибки даже в слепыше, которые не распознаются предложенным исчислением икон. И такую схема была предложена в начале форума. Я красным сделал 2 пометки. Внизу - явная ошибка, нет действия, транслируется в
Код:
    item_63 :
    if ((q10) && (q11)) {
        goto item_63;
    } else {
        return;
    }

Выше справа - какое-то goto в произвольное место схемы.
Я утверждаю, что goto в произвольное место схемы есть логическая ошибка, ибо определить правильное это место или нет, означенный мат аппарат не позволяет.

Значит - корректность слепышей не может быть доказана. И исключающий ошибки маршрутный транслятор не может быть построен.

Как результат, Дракон нужно приводить в соответствие с правилами структурного программирования:
1) Реализовывать циклы WHILE DO; REPEAT UNTIL вместо макроикон
2) Запрет на GOTO
3) Стрелки от условия (IF) не должны пересекаться в одних иконах Действие.
и т.д.


Вложения:
aa.png
aa.png [ 15.49 КБ | Просмотров: 18377 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 13:19 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Дмитрий Дагаев писал(а):
Внизу - явная ошибка, нет действия, транслируется в
Выше справа - какое-то goto в произвольное место схемы.
Я утверждаю, что goto в произвольное место схемы есть логическая ошибка, ибо определить правильное это место или нет, означенный мат аппарат не позволяет.


Дмитрий, не совсем понял, что Вы имеете в виду.
Ну, нет там действия, программист ещё не добавил - ну и что?
Может быть, это цикл жадного ожидания WHILE A & B DO ничего не делать END?

А во втором красном овале обычный цикл UNTIL с CASE внутри, разве нет?

А так, в этой схеме другие грубые ошибки - там, где из развилок идут прямые линии вправо, прямо внутрь циклов.
Это какое редактор позволил сделать так второй вход в цикл??


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 13:43 

Зарегистрирован: Четверг, 21 Январь, 2010 18:06
Сообщения: 63
Откуда: Нижний Новгород
Я перерисовал представленную схему в И.С. Дракон и подсунул транслятору.
Прошу прокоментировать, где ошибки? Я их невижу.
Вложение:
Слепышь_21.png
Слепышь_21.png [ 24.59 КБ | Просмотров: 18360 ]

Код:
Схема от форума(?Параметры)
{
L181:
L170:
L155:
L143:
   ?Действие
L178:
   if(!(?Вопрос))[attachment=0]Слепышь_21.png[/attachment]
      goto L203;
   else
   {
      if(!(?Вопрос))
      {
L192:
         switch(?Выбор)
         {
            case ?Вариант:
               break;
            case ?Вариант:
               break;
            case ?Вариант:
               break;
         }
         if(!(?Вопрос))
            goto L192;
         ?Действие
         if(!(?Вопрос))
            goto L178;
         goto L143;
      }
      else
      {
         if(!(?Вопрос))
         {
            if(!(?Вопрос))
            {
L203:
               ?Действие
               if(!(?Вопрос))
                  goto L178;
               goto L143;
            }
            else
            {
               if(!(?Вопрос))
                  goto L155;
               else
               {
                  if(!(?Вопрос))
                     goto L170;
                  else
                  {
                     switch(?Выбор)
                     {
                        case ?Вариант:
                           break;
                        case ?Вариант:
                           switch(?Выбор)
                           {
                              case ?Вариант:
                                 break;
                              case ?Вариант:
                                 if(!(?Вопрос))
                                    goto L181;
                                 break;
                           }
                           switch(?Выбор)
                           {
                              case ?Вариант:
                                 break;
                              case ?Вариант:
                                 break;
                           }
                           break;
                     }
                  }
               }
            }
         }
      }
   }
L146:
   if(!(?Вопрос))
   {
      if(!(?Вопрос))
         goto L146;
   }
}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 13:47 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
Илья!

Если мы говорим о верификации маршрутной логики, то предполагается, что эта логика определяет алгоритм программы. И я смею предположить для слепыша, что в иконах УСЛОВИЕ, ВЫБОР нет побочных эффектов, а только операторы сравнения. А отсутствие ДЕЙСТВИЕ - ошибка.

А вставить в данные иконы с побочными эффектами можно всякого
Код:
WHILE Search(pattern, string, pos) >= 0 DO END;


Кстати, для Вашего хорошего примера с жадным ожиданием я бы слева от иконы УСЛОВИЕ поставил бы таймер с нулевой задержкой. Как там - макроикона таймерный цикл?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 13:49 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Дмитрий Дагаев писал(а):
И я смею предположить для слепыша, что в иконах УСЛОВИЕ, ВЫБОР нет побочных эффектов, а только операторы сравнения. А отсутствие ДЕЙСТВИЕ - ошибка.


Может быть, условие изменяется в результате изменения состояния внешнего по отношению к алгоритму объекта.
Допустим, это жадный опрос сокета.
Ну, бывают же и такие извращения :) Чисто теоретически :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 14:04 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
Насчет жадного опроса сокета - это, значит мы ждем, когда будет прерывание от системы В/В. После чего resume процесс с заданной точки. Но все равно WHILE ~a DO sleep(0) END лучше. Так обычно и делают. Плюс вы сможете поменять на не очень жадное sleep(1).

Но суть дела не в том. Прицепив икону таймера слева, Вы отражаете в маршрутной логике периодический опрос внешней переменной.
А так Вы пытаетесь спасти некорректный слепыш с помощью Вашего программисткого таланта :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 14:10 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
Петр Приклонский писал(а):
Я перерисовал представленную схему в И.С. Дракон и подсунул транслятору.
Прошу прокоментировать, где ошибки? Я их невижу.

Петр!

Ошибки - отсутствие икон действие в местах, отмеченным красным, приводящие к бесконечному циклу.

Возражения типа найдется такая программа, в которой это будет работать - не принимаются, ибо тема о заведомой корректности слепыша.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 14:27 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Дмитрий Дагаев писал(а):
Ошибки - отсутствие икон действие в местах, отмеченным красным, приводящие к бесконечному циклу.
Ну вот и ещё аргумент в пользу бессмысленности теоретических рассуждений в данной теме! :wink:

В данном случае, как и у меня в теме "Что такое алгоритм?", "чисто алгоритмический" слой существенно связан со свойствами исполнителя.

Нет, конечно, мы можем в качестве паллиатива ввести формальное правило необходимости хоть одного действия внутри цикла (а хотя бы и ДО первой развилки в этом примере). Но в целом это:
- всё равно не гарантирует формальной "технической безошибочности";
- хотя и является полезной эвристикой при анализе алгоритма... так, уровень предупреждения, а не грубой ошибки...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 14:29 

Зарегистрирован: Четверг, 21 Январь, 2010 18:06
Сообщения: 63
Откуда: Нижний Новгород
Дмитрий Дагаев писал(а):
Ошибки - отсутствие икон действие в местах, отмеченным красным, приводящие к бесконечному циклу.


А Вы предполагаете, что "слепышь" должен быть абсолютно правильным (рабочим) без наполнения содержимым? Я считаю, что речь в этой теме идет о безошибочной трансляции маршрутной части, построенной по принципам ДРАКОНа.

Кстати, в системах типа RTOS задачи строятся на бесконечных циклах while(1) {};


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 14:38 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
А смысл-то как раз в математическом доказательстве (от противного) необходимости приведения Дракона в соответствие принципам структурного программирования.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 14:45 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
Петр Приклонский писал(а):
А Вы предполагаете, что "слепышь" должен быть абсолютно правильным (рабочим) без наполнения содержимым?


Владимир Паронджанов писал(а):
5. Это означает, что слепыш не может содержать ошибок (если дракон-конструктор спроектирован правильно).

Это не я полагаю, тема такая.

Петр Приклонский писал(а):
Кстати, в системах типа RTOS задачи строятся на бесконечных циклах while(1) {};

Знаю, уже ответил И.Ермакову и про В/В, и про прерывания.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 15:09 

Зарегистрирован: Четверг, 21 Январь, 2010 18:06
Сообщения: 63
Откуда: Нижний Новгород
Дмитрий Дагаев писал(а):

Владимир Паронджанов писал(а):
5. Это означает, что слепыш не может содержать ошибок (если дракон-конструктор спроектирован правильно).

Это не я полагаю, тема такая.



А "слепышь" и не содержит ошибок, т.к. описывает только лишь маршрут, а не рабочую программу. А уж если говорить о комплексе (изделии), тогда необходимо учитывать и декларативную часть, о чем уже не раз говорилось.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 16:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Дмитрий Дагаев писал(а):
А смысл-то как раз в математическом доказательстве (от противного) необходимости приведения Дракона в соответствие принципам структурного программирования.


Дмитрий, а Вы читали по этому поводу:
viewtopic.php?f=94&t=4164
Я считаю, что как раз не нужно, потому что расширение структурного программирования (ослабление) для случая плоскости - это как раз хороший прорыв, имхо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 16:52 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
Илья!

Я читал, но давно, вечерком еще гляну и отвечу в Вашей теме.

Илья Ермаков писал(а):
А так, в этой схеме другие грубые ошибки - там, где из развилок идут прямые линии вправо, прямо внутрь циклов.

И, чтоб не забыть, отмечу прямоугольником побочный вход в цикл. Тут я не могу доказать однозначно неправильность алгоритма, но это грубая ошибка.


Вложения:
aa2.png
aa2.png [ 15.6 КБ | Просмотров: 18316 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 20:39 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Илья Ермаков писал(а):
А так, в этой схеме другие грубые ошибки - там, где из развилок идут прямые линии вправо, прямо внутрь циклов.
Это какое редактор позволил сделать так второй вход в цикл??
Дмитрий Дагаев писал(а):
И, чтоб не забыть, отмечу прямоугольником побочный вход в цикл. Тут я не могу доказать однозначно неправильность алгоритма, но это грубая ошибка.

Таки нет там вторых (побочных) входов в цикл.
И в одном и в другом случае вход один (обозначен второй сверху стрелкой).
Есть побочные выходы : )


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 20:54 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 234
Откуда: Украина, Киев
Мало того что есть побочный вход так ещё и эргономичность этой схемы низкая. При таком количестве икон нужно было использовать силуэт :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 21:17 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Дмитрий Дагаев писал(а):
Выше справа - какое-то goto в произвольное место схемы.

Почему же в произвольное? В строго определённое.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 21:23 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Уважаемые коллеги!

Благодарю всех, кто принял участие в дискуссии.

Благодарю всех, кто выложил чертежи слепышей и соответствующие им коды. А также тех, кто анализировал эти чертежи и коды. И высказал по ним критические замечания.

Большое спасибо.

==========================================

Я хотел бы добавить два замечания.

1. Некоторые из представленных слепышей выполнены в редакторе, который НЕ поддерживает исчисление икон. Эти слепыши (строго говоря) надо исключить из рассмотрения и не рассматривать их на предмет ошибок.

2. Существует некоторый класс ошибок, которые я буду называть "особыми". Это маловероятные графические ошибки, которые НЕ могут быть выявлены с помощью исчисления икон. Приведу примеры таких ошибок:

              2.1. В алгоритме должна быть развилка, но разработчик забыл ее вставить. Такую ошибку не могут выявить ни дракон-конструктор, ни маршрутный транслятор.

              2.2. В алгоритме должен быть цикл, но разработчик забыл его вставить. Такую ошибку не могут выявить ни дракон-конструктор, ни маршрутный транслятор.

              2.3. В алгоритме на линейном участке должна быть цепочка из 10 икон действие, а разработчик нарисовал только 9, а про 10-ю забыл. Такую ошибку не могут выявить ни дракон-конструктор, ни маршрутный транслятор.

Все эти примеры ошибок являются графическими ошибками, но исчисление икон НЕ может их выявить. Хотя подобные ошибки возможны, я считаю их маловероятными. Подобные ошибки оказывают крайне незначительное влияние на судьбу проекта.


Последний раз редактировалось Владимир Паронджанов Понедельник, 13 Май, 2013 21:30, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Май, 2013 21:28 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Дмитрий Дагаев писал(а):
Ошибки - отсутствие икон действие в местах, отмеченным красным, приводящие к бесконечному циклу.

Значения q10 и q11 неопределены. Это означает что возможен и выход из цикла.
К тому же q10 и q11 могут быть определены в d0 (см. икону Действие в начале).
Здесь же q10 и q11 просто placeholder'ы, которые ожидают своего наполнения.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 172 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 9  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2025, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB