Re[6]: Идеологически правильный мегарулез
От: xBlackCat Россия  
Дата: 27.06.05 14:02
Оценка:
У меня всё больше и больше возникает желание посмотреть на лично Ваш код работающей (пусть даже не комерческой) программы. Не удовлетворите любопытство ссылочкой?
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Rojac &mdash; Rsdn Offline JAva Client
Анонсы и обсуждение здесь
Автор: xBlackCat
Дата: 08.02.10
Re[5]: FOR
От: Кодт Россия  
Дата: 27.06.05 14:05
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

К>>Кстати говоря, при step=0 в "эквивалентном коде" мы наблюдаем 6-секундную задержку


СГ>step — константа известная на момент компиляции (с нулем просто не скомпилируется).


То есть, нельзя записать
PROCEDURE Iterate(x1,x2:INTEGER)
VAR i:INTEGER;
BEGIN
  FOR i:=x1 TO x2 STEP Sign(x2-x1) DO ..... END;
END;

? Абыдна, да!

СГ>А что такое 6-секундная задержка?


Время выполнения LOOP END на машине Cray-II.
Перекуём баги на фичи!
Re[12]: Определение циклов
От: Sergey J. A. Беларусь  
Дата: 27.06.05 14:08
Оценка: +1 :))) :)
Здравствуйте, Сергей Губанов, Вы писали:

SJA>> Дайте правила, по которым можно определить — структрная конструкция или нет.


СГ>Не дам. Тут смысл нужно понимать.


Ок. Отвественно заявляю, что Оберон ни для чего не пригоден. Доказательств не дам. Тут смысл нужно понимать.
Я — свихнувшееся сознание Джо.
Re[6]: Идеологически правильный мегарулез
От: Sergey J. A. Беларусь  
Дата: 27.06.05 14:08
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>>>EXIT дешево и сердито завершает ближайший LOOP. Чего такого-то?


SJA>>break дешево и сердито завершает ближайший while/for/do-while. Чего такого-то?


СГ>Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию.

Короче, это уже не смешно.
На всякий случай, напомню, что EXIT может выбросить из WHILE или REPEAT по совершенно другому условию, если WHILE находится внутри LOOP.
А может вы решились на моё предложение называть такие циклы LOOP-n-WHILE. Тогда да. WHILE сможет выйти только по одному условию. Но тогда в Обероне будет оверхед по циклам ! Выбирайте !
Я — свихнувшееся сознание Джо.
Re[6]: Синтаксический оверхед - Новая порция
От: achp  
Дата: 27.06.05 14:12
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Попробуйте спросить это большинство современных программистов на C++. Найдите мне хотя бы одного, испытавшего мучения по этому поводу.


Наверное, они не в курсе данной возможности.
Re[13]: Определение циклов
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 27.06.05 14:23
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Но терминология не так интересна. Меня больше интересует как спастись от "index out of range" например ? Перехватить нельзя.... Что ж делать то ???


А что делать когда в Си происходит buffer overflow и ни каких exception при этом нет (программа хромает дальше пока совсем не скопытится)?

Ответ: Надо писать правильные программы.
Re[7]: Идеологически правильный мегарулез
От: Кодт Россия  
Дата: 27.06.05 14:35
Оценка: 2 (1) +1
Здравствуйте, Sergey J. A., Вы писали:

СГ>>>>EXIT дешево и сердито завершает ближайший LOOP. Чего такого-то?


SJA>>>break дешево и сердито завершает ближайший while/for/do-while. Чего такого-то?


СГ>>Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию.

SJA>Короче, это уже не смешно.
SJA>На всякий случай, напомню, что EXIT может выбросить из WHILE или REPEAT по совершенно другому условию, если WHILE находится внутри LOOP.
SJA>А может вы решились на моё предложение называть такие циклы LOOP-n-WHILE. Тогда да. WHILE сможет выйти только по одному условию. Но тогда в Обероне будет оверхед по циклам ! Выбирайте !

Вот именно:
while(condition)
{
  foo...;
  break;
  bar...;
}

эквивалентно
LOOP
  WHILE condition DO
    foo...;
    EXIT;
    bar...;
  END;
  EXIT (* чтобы сразу же выйти при удачном завершении *)
END
Перекуём баги на фичи!
Re[13]: Определение структурного программирования
От: Mamut Швеция http://dmitriid.com
Дата: 27.06.05 14:35
Оценка:
SJA>Ок. Отвественно заявляю, что Оберон ни для чего не пригоден. Доказательств не дам. Тут смысл нужно понимать.



Ладно, эксперта по поиску в Гугле вызывали? Тута я

define: strucutred programming

This is a design approach where complex systems are broken down into smaller, more manageable pieces.
www.davidgould.com/Glossary/Glossary.htm

(IEEE) Any software development technique that includes structured design and results in the development of structured programs. See: structured design.
www.validationstation.com/glossary/glossarys.htm

A style of programming in which the programmer divides his program's source code into logically structured chunks of code.
docs.rinet.ru/KofeynyyPrimer/ch38.htm

Structured programming can be seen as a subset or subdiscipline of procedural programming, one of the major programming paradigms. It is most famous for removing or reducing reliance on the GOTO statement (also known as "go to").
en.wikipedia.org/wiki/Structured_programming



dmitriid.comGitHubLinkedIn
Re[7]: Идеологически правильный мегарулез
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 27.06.05 14:43
Оценка: -3 :))
Здравствуйте, Sergey J. A., Вы писали:

SJA>Короче, это уже не смешно.

SJA>На всякий случай, напомню, что EXIT может выбросить из WHILE или REPEAT по совершенно другому условию, если WHILE находится внутри LOOP.

Существует разница между завершением и прерыванием цикла.

EXIT — завершает цикл LOOP, но прерывает вложенные в LOOP другие циклы навроде WHILE/REPEAT

Прервать циклы WHILE/REPEAT можно несколькими способами: HALT(), ASSERT(FALSE), RETURN, LOOP-ный обертывающий EXIT.

Но завершить циклы WHILE/REPEAT можно только одним единственным способом.

Поэтому следующий код корректен
WHILE отмерено меньше семи раз DO отмерять END;
Отрезать (* Режем не делая более ни каких проверок.  Мы уже не спрашиваем можно ли отрезать, а просто режем!!! *)

REPEAT узнавать где брод DO узнал END
Соваться в воду (* Суемся в воду не делая более ни каких проверок. Просто суемся!!! *)

В Си while/do можно завершить несколькими способами (+break, +goto), поэтому они не могут называться WHILE/REPEAT циклами.
Для Си код аналогичный вышепреведенному, вообще говоря может быть не корректен, так как причина завершения сишных циклов while/do с break и goto на момент написания и компиляции программы не известна. Истинная причина завершения сишных while/do с break и goto может быть выяснена только динамически во время работы программы.
while (отмерено меньше семи раз) {отмерять +"break", +"goto"}
if(отмерено не меньше семи раз) // лишняя проверка
{
  Отрезать
}
else
{
  Error!!!
}

do {узнавать где брод +"break", +"goto"} while (не узнал)
if(узнал) // лишняя проверка
{
  Соваться в воду 
}
else
{
  Error!!!
}
Re[14]: Определение циклов
От: Sergey J. A. Беларусь  
Дата: 27.06.05 14:44
Оценка: :)
Здравствуйте, Сергей Губанов, Вы писали:

SJA>>Но терминология не так интересна. Меня больше интересует как спастись от "index out of range" например ? Перехватить нельзя.... Что ж делать то ???


СГ>А что делать когда в Си происходит buffer overflow и ни каких exception при этом нет (программа хромает дальше пока совсем не скопытится)?


Мы всё-ж о Оброне говорим. Не так-ли ?

СГ>Ответ: Надо писать правильные программы.


Ну да ? Ну вот дали вам модуль проверки орфографии. Без исходников. Вы написали текстовый редактор, привинтили модуль. И тут обнаружили, что фраза "Правоспособность-способность лица иметь гражданские права и нести обязанности" вызывает исключение. Думаю пользователь не очень то образуется, если результаты его часовой работы будут потеряны.
Ваше решение ? (разумеется программа написана на обероне).
Я — свихнувшееся сознание Джо.
Re[7]: Синтаксический оверхед - Новая порция
От: xBlackCat Россия  
Дата: 27.06.05 14:50
Оценка:
Здравствуйте, achp, Вы писали:

A>Здравствуйте, Sinclair, Вы писали:


S>>Попробуйте спросить это большинство современных программистов на C++. Найдите мне хотя бы одного, испытавшего мучения по этому поводу.


A>Наверное, они не в курсе данной возможности.


Возможности угрызения совести?
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Rojac &mdash; Rsdn Offline JAva Client
Анонсы и обсуждение здесь
Автор: xBlackCat
Дата: 08.02.10
Re[8]: Идеологически правильный мегарулез
От: xBlackCat Россия  
Дата: 27.06.05 14:50
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>
СГ>while (отмерено меньше семи раз) {отмерять +"break", +"goto"}
СГ>if(отмерено не меньше семи раз) // лишняя проверка
СГ>{
СГ>  Отрезать
СГ>}
СГ>else
СГ>{
СГ>  Error!!!
СГ>}

СГ>do {узнавать где брод +"break", +"goto"} while (не узнал)
СГ>if(узнал) // лишняя проверка
СГ>{
СГ>  Соваться в воду 
СГ>}
СГ>else
СГ>{
СГ>  Error!!!
СГ>}
СГ>


А кто вам сказал, что в такого смысла циклах будут белать break или goto? Поясните их смысл, пожайлуста. А лучше — нарисуйте
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Rojac &mdash; Rsdn Offline JAva Client
Анонсы и обсуждение здесь
Автор: xBlackCat
Дата: 08.02.10
Re[6]: Идеологически правильный мегарулез
От: Mamut Швеция http://dmitriid.com
Дата: 27.06.05 14:53
Оценка:
СГ>Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию. Цикл завершающийся более чем по одному условию или не завершающийся ни по какому условию называется по другому. Только и всего. В Oberon это LOOP, WHILE, REPEAT, в Си циклы while/for/do-while — есть по сути модификации цикла LOOP, а циклов WHILE и REPEAT нету. (На всякий случай еще раз напоминаю о существующей разнице между завершением цикла и прерыванием цикла.)


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

Едиственное, в чем нужен LOOP, — это когда надо выйти из нескольких вложенных циклов. Вне этой функции он нафиг не нужен, если возможность выхода по условию внутри цикла можно встроить в иклы while и for. То, что такая возможность появится в while/for не сделает их каким-то другими циклами.


dmitriid.comGitHubLinkedIn
Re[7]: Синтаксический оверхед - Новая порция
От: Mamut Швеция http://dmitriid.com
Дата: 27.06.05 14:54
Оценка:
S>>Попробуйте спросить это большинство современных программистов на C++. Найдите мне хотя бы одного, испытавшего мучения по этому поводу.

A>Наверное, они не в курсе данной возможности.


Абсолютно не в курсе. По С++ практически первые примеры программ — это cout << "Hello, world". Сдвиги по битам учатся этак в главе 15-й...


dmitriid.comGitHubLinkedIn
Re[8]: Идеологически правильный мегарулез
От: Sergey J. A. Беларусь  
Дата: 27.06.05 15:43
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Sergey J. A., Вы писали:


SJA>>Короче, это уже не смешно.

SJA>>На всякий случай, напомню, что EXIT может выбросить из WHILE или REPEAT по совершенно другому условию, если WHILE находится внутри LOOP.

СГ>Существует разница между завершением и прерыванием цикла.


СГ>EXIT — завершает цикл LOOP, но прерывает вложенные в LOOP другие циклы навроде WHILE/REPEAT

Ну в таком случае считайте, что в С циклы while/for/do-while это синтаксический сахар над WHILE:

LOOP
    WHILE cond DO
        action;
    END;
    EXIT;
END;

эквивалентен
while(cond) action();


Вот. Теперь посчитаем ! 6 строк против 1 в С ! 6.1 = 600%
Ну о каком оверхеде в С можно вообще говорить ?
Чтобы выйти по EXIT из while, столько нужно городить !

Иначе говоря, если нужно программеру выйти из WHILE (а это часто нужно), то в обероне ему придется дописать 3 строки + условие и EXIT. В С только условие и break. Как видим оберон бъёт по рукам любителям брейков только неудобным синтаксисом. А поскольку break более полезен, чем вреден то непонятно, доколе в обероне будет такой неудобный синтаксис.


СГ>Поэтому следующий код корректен

СГ>
СГ>WHILE отмерено меньше семи раз DO отмерять END;
СГ>Отрезать (* Режем не делая более ни каких проверок.  Мы уже не спрашиваем можно ли отрезать, а просто режем!!! *)
СГ>


Вот пжалста:
LOOP
    WHILE отмерено меньше семи раз DO
        отмерять;
        IF чего-то THEN EXIT;
    END;
    EXIT;
END;
Отрезать (* Всё-таки проверка нужна... Вдруг кто-то решит улучшить WHILE ещё одним выходом *)
Я — свихнувшееся сознание Джо.
Re[14]: Определение структурного программирования
От: Sergey J. A. Беларусь  
Дата: 27.06.05 15:47
Оценка: :))) :)
Здравствуйте, Mamut, Вы писали:

SJA>>Ок. Отвественно заявляю, что Оберон ни для чего не пригоден. Доказательств не дам. Тут смысл нужно понимать.


M>


M>Ладно, эксперта по поиску в Гугле вызывали? Тута я


Тссс ! Это Серёга должен нервничать, и искать ссылки, приводить доказательства. А мы будем степенно возражать
"Нет, это не так." И ждать дальнейших доказательств.
Я — свихнувшееся сознание Джо.
Re[5]: FOR
От: Пацак Россия  
Дата: 27.06.05 17:32
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

К>>Кстати говоря, при step=0 в "эквивалентном коде" мы наблюдаем 6-секундную задержку

СГ>step — константа известная на момент компиляции (с нулем просто не скомпилируется).

То есть вычислить шаг цикла в рантайме я не могу? В печку такой язык! (с) проф. Преображенский.
Ку...
Re[24]: Яркий пример
От: Пацак Россия  
Дата: 27.06.05 17:32
Оценка: :)
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Гениальная идея. Только, тогда придется кроме VAR ... END еще сделать TYPE ... END, и еще CONST ... END.


Во-первых не вижу препятствий — чем не пожертвуешь ради избавления от ненавистного BEGIN'а! Правда со звездочками может наладка получиться — чередоваться перестанут, мерзавки. Ну тогда есть другая возможность — объявить конструкцию TYPE ... CONST ... VAR ... END составной и начать дико гордиться тем, что она имеет всего один завершающий END.

СГ>Потом впомнить, что процедуры могут быть вложеными...


... циклы, впрочем, тоже — и ничего, обходятся без BEGIN'ов.

СГ>У меня есть другая идея. Лично я бы вместо слова BEGIN выбрал бы слово CODE

....
СГ>Аналогично для тела инициализации модуля. Вот тогда слово BEGIN исчезло бы вовсе.

Отличная идея! И как это Вирт ее прощелкал! Я бы даже дальше пошел — заменил бы слово END на слово э-э-э... скажем FINISH, после чего с радостью декларировал бы отсутствие в языке и BEGIN'ов и END'ов.

СГ>Блоки # тело.


Блок == группа инструкций компилятору. В этом смысле BEGIN END из объявления процедуры — вполне себе блок. То, что он оформлен в виде отдельной процедуры — дело восемнадцатое.
Ку...
Re[6]: Идеологически правильный мегарулез
От: Пацак Россия  
Дата: 27.06.05 17:35
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию.


Если не сложно, подсчитайте, пожалуйста, количество условий, по которым может завершиться внутренние WHILE и UNTIL здесь
Автор: Сергей Губанов
Дата: 24.06.05
.
Ку...
Re[6]: FOR
От: Кодт Россия  
Дата: 27.06.05 17:39
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>"Новые процессоры Intell Pentium 3647 такие быстрые, что выполняют

C>бесконечный цикл всего за 6 секунд!" (с) анекдот.

Кстати, интересно: как должен отреагировать пень с предсказанием на такой код
@@infinite: jmp @@infinite
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.