DRAKON.SU

Текущее время: Пятница, 29 Март, 2024 02:55

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




Начать новую тему Ответить на тему  [ Сообщений: 163 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 12 Июнь, 2009 00:00 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 140
Откуда: Троицк, Москва
Евгений Темиргалеев писал(а):
При работе на КП не припомню случая, когда мне пришлось бы "ломать мозг".
Чисто для статистики: мне тоже. (Правда, тут еще цикл Дейкстры подключить надо 8))


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 03:39 

Зарегистрирован: Среда, 27 Май, 2009 01:41
Сообщения: 33
Код:
CASE выбор OF

операторы языка ограничены: переключатель 0- отсутствует.
..
???


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 03:42 

Зарегистрирован: Среда, 27 Май, 2009 01:41
Сообщения: 33
Цитата:
Я не понимаю, что Вы имеете в виду под эффективностью. В первом примере, смысл происходящего раскрыт очень неплохо; учитывается некорректность данных, и даже видно, что веток в условном операторе может быть больше. Во втором примере смысл сильно сжат. По всему видно, что оба примера - про разные вещи. Можно ли их сравнивать между собой?

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 03:44 

Зарегистрирован: Среда, 27 Май, 2009 01:41
Сообщения: 33
Евгений Темиргалеев писал(а):
Tomba писал(а):
Вопрос - как реализовать данный функционал?
Код:
Процедура НекаяПроцедура()
   //некий код
   Если НуженВыход Тогда
      а=1;
   иначе
      //некий код
      Если НуженВыход Тогда
         а=2;
      иначе
         //некий код
         ..
         а = 99;
      КонецЕсли;
   КонецЕсли;
   b=99;
   с=99;
   Возврат;
КонецПроцедуры //НекаяПроцедура
[quote="Tomba"]
.
чем ваш код лучше вышеприведенного моего? отсутствием гото?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 03:54 

Зарегистрирован: Среда, 27 Май, 2009 01:41
Сообщения: 33
Цитата:
То что у Вас не получается пока писать программы без гото не ломая мозг никак не может быть доводом в пользу его необходимости (в ЯВУ).

Первое: то есть вы хотите сказать, что все в мире, абсолютно все, против использования гото в ЯВУ и гото в ЯВУ использую только я?
Второе: не надо приписывать мне несказанное мной. я нигде не доказываю необходимости наличия в ЯВУ гото. явсего лишь высказываю мнение, что гото имеет правол на жизнь и этого - достаточно."
Третье: если пошла такая бодяга ;-) то все беды от одного - от ухода от программирования в машинных кодах/мнемокодах/ассемблерах. Некоторые отщепенцы, чувствуя свою неспособность понять правила разумного использования гото и разумно этими правилами пользоваться - породили ЯВУ, как говориться - заставь дурака богу молиться - он и лоб расшибет...
.
Кстати, прямым подтверждением третьего тезиса является отмеченное выше мной наблюдение о несоответствии развитости ЯВУ качеству программ. То есть - с момента отхода от асссемблера - ситуация нискольо не изменилась. и есть гото или нет гото - здесь совершенно не при чем. Проблемы не в гото - проблемы - в головах...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 04:06 

Зарегистрирован: Среда, 27 Май, 2009 01:41
Сообщения: 33
Цитата:
Если принять, что программа описывает последовательность действий, то это нас приводит к вектору времени. Читая программу, мы выстраиваем координатную систему процесса и восстанавливаем временную цепь. А скачок go to нарушает последовательность и перебрасывает в другую систему координат.

Отсюда я делаю такой вывод - если вдруг мне обязательно требуется переход в другое время (в другую систему координат), то скорее всего, у меня что-то построено неверно. Другими словами, я создал два куска реальности, никак не связанные между собой. Но они всё-таки плавают на одной семантике (ведь проблемная область никуда не делась), которая - как вдруг оказывается! - не отражена мной в программе! И поэтому мне приходится преодолевать семантический разрыв в тексте с помощью гипертекстового скачка.

Блестяще! Мне оченнь понравилось это рассуждение! Вопрос только в том, что вот так вот получилось - да, есть такой семантический разрыв (в самом худшем случае) - смысл в том, что для его устранения без использования гото (что подобно квантовой телепортации) - надо перепроектировать треть системы - ну вот так вот получается! ну вот такие раззвиздяи писали!!! что делать? перепроектировать? - срок вышел... не успеем... да, использование гото в этом случае некрасиво, напряжно, коробит душу. НО ЧТО ДЕЛАТЬ??? если работает????!!!! (за счет того, что мы наплевав на ЯВУ, опустились на нижний уровень программистского Ада и как Орфей тянем за собой свою Эвридику...) Пусть работает!!! (а за 10 лет или осел сдохнет или султана укакошат...) а вот В НАШЕЙ СИСТЕМЕ, ооооо!!!! у нас все будет правильно и красиво!!!!! и спать будем спокойно!!!! уффф.....
.
Только вот что-то где-то в обсуждении Дракона проскальзывало что парадигма использования Дракона приводит к генерации кода с кучей гото - но это несущественно, так как гото будут корректными (при однозначно корректном преобразовании Дракона в текстовый язык кода). Тем более это несущественно, что мы-то, пишущие на Драконе гото видет-то не будем...
..
- Ты гото видишь?
- Нет..
- И я не вижу.... а он - есть...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 04:55 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 53
Tomba писал(а):
Кстати, прямым подтверждением третьего тезиса является отмеченное выше мной наблюдение о несоответствии развитости ЯВУ качеству программ. То есть - с момента отхода от асссемблера - ситуация нискольо не изменилась. и есть гото или нет гото - здесь совершенно не при чем.
Ни при чём. А под качеством программ Вы что понимали?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 06:42 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 140
Откуда: Троицк, Москва
Tomba писал(а):
с момента отхода от асссемблера - ситуация нискольо не изменилась. и есть гото или нет гото - здесь совершенно не при чем. Проблемы не в гото - проблемы - в головах...
Ну что вы. Изменилась производительность. А ошибки в основном не от goto, а от отсутствия type safety -- переполнения буфера, ошибки при работе с указателями и т.п.

Кстати, можно подозревать, что сей последний факт обусловлен как раз тем, что люди подучились писать структурно, и ошибки из-за goto отошли на второй план.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 07:41 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 143
Откуда: Россия, Орёл
Tomba писал(а):
Второе: не надо приписывать мне несказанное мной. я нигде не доказываю необходимости наличия в ЯВУ гото. явсего лишь высказываю мнение, что гото имеет правол на жизнь и этого - достаточно.
Уточните, пожалуйста, что Вы имели ввиду: "гото имеет правол на жизнь" в ЯВУ или ...?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 08:32 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 143
Откуда: Россия, Орёл
Tomba писал(а):
чем ваш код лучше вышеприведенного моего? отсутствием гото?
Мой код - это просто ответ на Ваш вопрос
Tomba писал(а):
например, я тупо не знаю как красиво реализовать такой функционал:
- есть процедура с несколькими точками выхода;
- точка выхода по сути есть набор неких операторов, выполняющих "закрытие процедуры";
- каждая точка выхода отличается только первым оператором "закрытия процедуры";
..
примерная реализация ...(с гото)...
Вопрос - как реализовать данный функционал?
Под красиво я понимал "читабельнее". Чем мой код читабельнее Вашего - в рассчёте на то, что читает другой человек:
1) Если я пишу на языке без гото, читающему не нужно проверять отсутствие гото дальше меткаВыходИзПроцедуры: в
Код:
//некий код
2) Если я пишу на языке без возврата из середины процедуры (неструктурный переход, "подмножество" гото), то читающий вообще не смотрит //некий код. У него сразу есть гарантия, что "закрытие процедуры" всегда будет выполнено.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 08:36 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 143
Откуда: Россия, Орёл
Tomba писал(а):
...где-то в обсуждении Дракона проскальзывало что парадигма использования Дракона приводит к генерации кода с кучей гото - но это несущественно...
- Ты гото видишь?
- Нет..
- И я не вижу.... а он - есть...
То же самое можно сказать про ЯВУ без гото и машкод с гото, который из него генерируется.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 11:56 

Зарегистрирован: Вторник, 27 Май, 2008 13:24
Сообщения: 155
Код:
Процедура НекаяПроцедура()
//некий код
Если НуженВыход=Да Тогда
     а=1;
     гото меткаВыходИзПроцедуры;
КонецЕсли;
//некий код
Если НуженВыход=Да Тогда
     а=2;
     гото меткаВыходИзПроцедуры;
КонецЕсли;
//некий код
..
а = 99;
меткаВыходИзПроцедуры:
    b=99;
    с=99;
    Возврат;
КонецПроцедуры //НекаяПроцедура

*********************************************************

Процедура НекаяПроцедура()
   //некий код
   Если НуженВыход Тогда
      а=1;
   иначе
      //некий код
      Если НуженВыход Тогда
         а=2;
      иначе
         //некий код
         ..
         а = 99;
      КонецЕсли;
   КонецЕсли;
   b=99;
   с=99;
   Возврат;
КонецПроцедуры //НекаяПроцедура


Вложенные Если- Иначе, особенно если их много, запутывают. Смысл кода здесь не понятен вне понимания цельной ЛОГИЧЕСКОЙ ФУНКЦИИ (c вложенностями, которых может быть много). Как раз здесь приходиться "телепортировать" в КонецЕсли (который может вообще оказаться за пределами экрана) а потом возвращаться и прыгать по внутренним Если- Иначе чтобы понять логику.

В этом примере код с goto гораздо понятнее: логика не напрягает потому что её понимания вообще не требуется. Каждый мелкий шаг для понимания своего смысла не требует разбираться в ОБЩЕЙ логической картине. То есть для схватывания смысла кода понимания ВСЕЙ ЛОГИЧЕСКОЙ ФУНКЦИИ И НЕ ТРЕБУЕТСЯ. Исключена лишняя работа. Чётко выделены смысловые фрагменты, "прыжок" только один и везде только в одну точку, возвратов и бега вверх-вниз по псевдографическим "ступенькам" Если- Иначе- КонецЕсли не требуется. GOTO здесь даёт может худшую в смысле теории структурность, но лучшую в смысле практики ПОНИМАЕМОСТЬ.

А что, стуктурность, она для понятности или для теоретической крутизны?

Такие ли уж на самом деле ЯВУ наши ЯВУ? Большей частью в них только укрупнены команды, остальное как а asm почти. Существенный шаг к реально ЯВУ делает ДРАКОН и не "стыдится" меток с гото, а наоборот именно их использует как ОСНОВУ структурирования.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 12:23 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 143
Откуда: Россия, Орёл
dvuugl писал(а):
Такие ли уж на самом деле ЯВУ наши ЯВУ? Большей частью в них только укрупнены команды, остальное как а asm почти. Существенный шаг к реально ЯВУ делает ДРАКОН и не "стыдится" меток с гото, а наоборот именно их использует как ОСНОВУ структурирования.
Мне кажется Вы пытаетесь противопоставить не сопоставимые вещи (визуальный ЯП и текстовый) и концептуально схожие:
Дракон использует как ОСНОВУ для структурирования - запреты, накладываемые на блок-схемы (запрет перечение линий, один вход/один выход у икон...). Точно также в текстовых ЯВУ как основу для структурирования применяют запреты на гото (те же пересечения границ структурных операторв с одним входом и одним выходом).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 12:34 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 28
Откуда: Ленинград, Емельянов Алексей Николаевич
dvuugl:
Цитата:
В этом примере код с goto гораздо понятнее: логика не напрягает потому что её понимания вообще не требуется. Каждый мелкий шаг для понимания своего смысла не требует разбираться в ОБЩЕЙ логической картине. То есть для схватывания смысла кода понимания ВСЕЙ ЛОГИЧЕСКОЙ ФУНКЦИИ И НЕ ТРЕБУЕТСЯ. Исключена лишняя работа. Чётко выделены смысловые фрагменты, "прыжок" только один и везде только в одну точку, возвратов и бега вверх-вниз по псевдографическим "ступенькам" Если- Иначе- КонецЕсли не требуется. GOTO здесь даёт может худшую в смысле теории структурность, но лучшую в смысле практики ПОНИМАЕМОСТЬ.

Кажется нащупали точку расхождения. Я то как раз считаю, это абсолютно не приемлемым. Смысловые фрагменты, если они не поняты в контексте "ВСЕЙ ЛОГИЧЕСКОЙ ФУНКЦИИ" не смысловые, а бессмысленные, а работа не лишней, а совершенно необходимой.
И не надо приплетать сюда дракон. Уже все договорились, что он основан на других выразительных принципах, мне кстати чуждых.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 13:01 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
dvuugl писал(а):
А что, стуктурность, она для понятности или для теоретической крутизны?

Такие ли уж на самом деле ЯВУ наши ЯВУ? Большей частью в них только укрупнены команды, остальное как а asm почти. Существенный шаг к реально ЯВУ делает ДРАКОН и не "стыдится" меток с гото, а наоборот именно их использует как ОСНОВУ структурирования.

Что такое понятность программного кода?
1. Минимум программного кода. Меньше коде - меньше в нем ошибок и меньше надо воспринимать.
2. Минимум локальных переменных. Меньше переменных - нет необходимости помнить о их назначении, значения получаем из функций.
3. Минимум вложености в структурные конструкции языка: циклы, проверки условий.
4. Минимум меток и Goto. Используются Continue, Break, Return (Exit).
5. Минимальное пребывание в процедуре, функции, методе. При получении отрицательного условия, при получении результата - выполнить Return. При этом локальнее становится получение результата, упрощается дальнейший программный код: нет необходимости добираться до конца процедуры, упрощается дальнейший программный код - нет локальных переменных для сохранения состояния, уменьшается вложенность конструкций.
6. Множественный выход, в отличии от единого, создает декомпозицию (разделенность) множества принимаемых значений результата.
7. Декомпозиция программы - разделение ее на функциональные процедуры, с минимальными функциональными целями. При этом создается функциональная среда проблемных решений и программирование идет в направлений их использования.
8. Отказ от универсальных, настраиваемых процедур. Они излишне сложны, имеют сложную логику, сложно тестировать, оторваны от проблемной области, требуют изучения при использовании, область применения определена не в полном обьеме.
9. Код писать максимально без пробелов в операторах (в отличии от табличного стиля), Можно при поиске найти не только переменную, но и присвоение ей значения (F:=2; , но не F := 2; ), можно найти фрагменты выражений.
10. Завершающие end писать на уровне отступа вложенного содержания.

Разрешите привести пример, без пояснения о назначении.
Код:
procedure GrPoisk;
var N,NGr,Prohod:Integer; El:tEl; Dr:tDr; LDr:TList;
begin
  Form1.MemoExit(Nil);
  Lt.SEl.Sort(@SortEl);
  LDr:=TList.Create;
  for N:=0 to Lt.SDr.Count-1 do LDr.Add(Lt.SDr.Items[N]);
  LDr.Sort(@SortLDr);
  try
    for Prohod:=1 to 2 do begin   // 1-До конца,2-от начала
      NGr:=0;
      if Form1.M32.Checked then begin
        if GrTestPoisk(Lt.UPrim,mUPrim,redLt,Lt,NGr) then Exit;
        if GrTestPoisk(Lt.APrim,mAPrim,redLt,Lt,NGr) then Exit;
        if GrTestPoisk(Lt.PPrim,mPPrim,redLt,Lt,NGr) then Exit;
        for N:=0 to LDr.Count-1 do begin
          Dr:=LDr.Items[N];
          if GrTestPoisk(Dr.UPrim,mUPrim,redDr,Dr,NGr) then Exit;
          if GrTestPoisk(Dr.APrim,mAPrim,redDr,Dr,NGr) then Exit;
          if GrTestPoisk(Dr.PPrim,mPPrim,redDr,Dr,NGr) then Exit;
          if GrTestPoisk(Dr.Id,mId,redDr,Dr,NGr) then Exit;
          end;
        end;
      for N:=0 to Lt.SEl.Count-1 do begin
        El:=Lt.SEl.Items[N];
        if El.Tip=elUzl then Continue;
        if GrTestPoisk(El.Id,mId,redEl,El,NGr) then Exit;
        if GrTestPoisk(El.TxT,mTxT,redEl,El,NGr) then Exit;
        if (El.Tip in [elVvd,elVyv,elPlk,elPPr])and
           GrTestPoisk(El.TxB,mTxB,redEl,El,NGr) then Exit;
        if Form1.M32.Checked then begin
          if GrTestPoisk(El.UPrim,mUPrim,redEl,El,NGr) then Exit;
          if GrTestPoisk(El.APrim,mAPrim,redEl,El,NGr) then Exit;
          if GrTestPoisk(El.PPrim,mPPrim,redEl,El,NGr) then Exit;
          end;
        end;
      PozGr:=1;
      if (Prohod=1) and (Application.MessageBox(
        'Достигнут конец документа. Продолжить поиск с начала?',
        'Найти в поле графики',
        mb_YesNo+mb_IconQuestion)<>idYes) then Exit;
      end;
    ShowMessage('В поле графики не найден: "'+Obraz+'"');
  finally
    LDr.Clear; LDr.Free;
  end;
end;
Примечание. В примере использована техника организации единого выхода через секцию finally при нескольких Exit, предложенная ain здесь, спасибо.


Последний раз редактировалось ==== Суббота, 13 Июнь, 2009 13:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 20:44 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 66
Откуда: Москва
Геннадий Тышов писал(а):
Разрешите привести пример, без пояснения о назначении.
Код:
procedure GrPoisk;
...
Поясните, пожалуйста, это пример чего - образцового кода или бреда?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 21:06 

Зарегистрирован: Среда, 27 Май, 2009 01:41
Сообщения: 33
dvuugl писал(а):
Вложенные Если- Иначе, особенно если их много, запутывают. Смысл кода здесь не понятен вне понимания цельной ЛОГИЧЕСКОЙ ФУНКЦИИ (c вложенностями, которых может быть много). Как раз здесь приходиться "телепортировать" в КонецЕсли (который может вообще оказаться за пределами экрана) а потом возвращаться и прыгать по внутренним Если- Иначе чтобы понять логику.

В этом примере код с goto гораздо понятнее: логика не напрягает потому что её понимания вообще не требуется. Каждый мелкий шаг для понимания своего смысла не требует разбираться в ОБЩЕЙ логической картине. То есть для схватывания смысла кода понимания ВСЕЙ ЛОГИЧЕСКОЙ ФУНКЦИИ И НЕ ТРЕБУЕТСЯ. Исключена лишняя работа. Чётко выделены смысловые фрагменты, "прыжок" только один и везде только в одну точку, возвратов и бега вверх-вниз по псевдографическим "ступенькам" Если- Иначе- КонецЕсли не требуется. GOTO здесь даёт может худшую в смысле теории структурность, но лучшую в смысле практики ПОНИМАЕМОСТЬ.

Большое спасибо! именно это япримерно и пытался выразить, вам это удалось гораздо лучше меня. Понятно, что ситуации могут быть не такие простые и ясные как в данном примере с гото - там я очень поостерегусь использовать гото или даже вообще не буду этого делать как бы не хотелось. Гото уместен там, где он не снижает ясности картины. Если же можно обойтись без гото без снижения ясности картины - то и гото не нужен...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июнь, 2009 21:20 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Peter Almazov писал(а):
Поясните, пожалуйста, это пример чего - образцового кода или бреда?
Вы оставили сообщение на форуме "Визуальный язык Дракон", в настоящее время пользователи применяют интегрированную среду "DRAKON" отсюда. Это код из программы, т.е. это является не образцом и не бредом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Июнь, 2009 00:43 

Зарегистрирован: Вторник, 27 Май, 2008 13:24
Сообщения: 155
Axcel писал(а):
Смысловые фрагменты, если они не поняты в контексте "ВСЕЙ ЛОГИЧЕСКОЙ ФУНКЦИИ" не смысловые, а бессмысленные, а работа не лишней, а совершенно необходимой. И не надо приплетать сюда дракон. Уже все договорились, что он основан на других выразительных принципах, мне кстати чуждых.
Вы способны схватить ВСЮ ЛОГИЧЕСКУЮ ФУНКЦИЮ, которую выполняет процессор вашего компа когда Вы набиваете текст? А собственно ВЕСЬ СМЫСЛ его работы при этом- редактирование текста- способны? Так вот, смысл структурирования не есть структура логической функции. Мы можем её не схватывать, а смысл работы кода (вообще- изделия) понимать. Именно эта, последняя задача для человека. Первая же, логика- для автомата, для робота. И хорошо то структурирование, в котором мы меньше озабочены логикой чем смыслом. И именно под это заточены синтаксические правила ДРАКОНа: логику в нём мы без напряга пробегаем одним взглядом. И именно это даёт ему возможность претендовать ещё и на звание языка спецификаций, описаний смысла, а не только программирования.


Последний раз редактировалось dvuugl Суббота, 13 Июнь, 2009 03:39, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Июнь, 2009 02:32 

Зарегистрирован: Вторник, 27 Май, 2008 13:24
Сообщения: 155
Евгений Темиргалеев писал(а):
Мне кажется Вы пытаетесь противопоставить не сопоставимые вещи (визуальный ЯП и текстовый) и концептуально схожие:
Дракон использует как ОСНОВУ для структурирования - запреты, накладываемые на блок-схемы (запрет перечение линий, один вход/один выход у икон...). Точно также в текстовых ЯВУ как основу для структурирования применяют запреты на гото (те же пересечения границ структурных операторв с одним входом и одним выходом).
Прежде всего: визуальный ЯП "против" текстовый ЯП - это ложное противопоставление, иллюзорное. Это интеллектуальная иллюзия. Происходит она из выработанного с детства автоматизма: текст мы практически уже не видим, а сразу слышим звуки речи или вообще сразу воспринимаем смысл до речевой реставрации. Реально же текст есть ВИЗУАЛЬНЫЙ набор знаков и, соответственно, есть визуальное явление. Первые формы знаков повторяли формы животных, разных предметов- пиктографическое и, позже, иероглифическое письмо менее провоцируют такую иллюзию. В полной мере возникает она на стадии изобретения звукоподражательного алфавита. Здесь, в буквах, человек впервые ВИЗУАЛИЗИРУЕТ то что не может видеть, но только слышать- ЗВУК. Текстовое ИЗОБРАЖЕНИЕ состояния ячейки памяти в виде знаков 1 - 0 (или наборов знаков true-false, да-нет) есть ИСКУССТВЕННАЯ ВИЗУАЛИЗАЦИЯ физических явлений, которые мы принципиально не способны ни ВИДЕТЬ, ни СЛЫШАТЬ, ни вообще никак непосредственно воспринимать.
То, что сейчас называется "визуальный ЯП", есть часть более общего явления- поиска иных форм письма. Взрыв этой поисковой активности (по-видиму ещё не осознающей себя как именно разработку нового шага в письменности) связан с появлением новых технических возможностей отображения информации: графических дисплеев, интерфейсов. Идёт поиск адекватных этим новым техническим возможностям форм визуального отображения. Если скале, как носителю, адекватен высеченный рисунок, папирусу- иероглиф, бумаге- алфавитное письмо, то монитору- что? Причём, заметьте, возможности каждого нового носителя позволяют использовать типы старого письма. Книжки издают с картинками. ДРАКОН не отказавется от текста, а интегрирует его в свои графоэлементы.

Запреты в ДРАКОНе - это не собственно основа структурования, а правила синтаксиса языка. И в силу этого они порождают некую начальную структурность. Даже соблюдая все синтаксические правила ДРАКОНА возможно составлять безобразные по критериям структурированности схемы, чему есть примеры в книгах Паронджанова. Правила структурности - они, вообще говоря, ВНЕ синтаксиса того или иного языка, они есть дополнительные, не обязательно входящие в синтаксис правила и/или рекомендации. Синтаксис сам по себе, без внешних правил, может быть заточен под структурность (как в ДРАКОНе или PASCALе), а может и нет. Даже если заточен, то "автоматом" он обеспечивает структурность только на низком уровне.
Но иногда навязывание стандартов структур- изнутри синтаксиса или извне- не позволяет сгенерить наиболее адекватную задаче конструкцию. Вот такой парадокс, задача оказалась сложнее и не лезет в схемы: cтруктурированность не позволяет создать структуру.. Лишённые математико-бюрократического фанатизма авторы лучших ЯВУ, предвидя такие коллизии, включили таки в них GOTO.
В "силуэте" же ДРАКОНА именно метка (имя ветки) и переход на неё (адрес), то есть GOTO во всей своей варварской красе, и составляет его (силуэта) специфическую основу структурирования. Именно "силуэт" с его вопиющим GOTO позволяет выпрыгнуть за синтаксические ограничения "примитива" и породить структурность там, где её не способен поддерживать жёстко зарегулированный "примитив". То есть ситуация точно та же что и в "невизуальном" языке, GOTO в обоих случаях играет одинаковою роль. И в том и в другом случае GOTO работает НА структурность, а не против неё. Что ещё раз подтверждает иллюзорность противостояния "текстовости" и "визуальности". Это одно и то же явление на разных этапах (и в разных точках приложения) развития.


Последний раз редактировалось dvuugl Суббота, 13 Июнь, 2009 10:23, всего редактировалось 2 раз(а).

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

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


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

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


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

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