Re[16]: LOOP
От: Amidlokos Россия  
Дата: 23.06.05 11:50
Оценка: :)
Здравствуйте, Сергей Губанов, Вы писали:

СГ>WHILE и REPEAT — синтаксический сахар поверх LOOP.


Нет, позвольте! Тогда уж не сахар, а оверхед!
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Re[12]: Так Вы определитесь
От: Amidlokos Россия  
Дата: 23.06.05 11:50
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


A>> Однако имеет смысл только для одной проверки. Ну двух. А если точек выхода десяток (по найденному, по обнаруженному битому, срочно по переключению мютекса и т.п.)?


СГ>Так Вы определитесь, что конкретно нужно. Приведите конкретный пример. Чтобы потом без всяких там, а вот если бы да кабы, то в носу бы выросли грибы...


Да, Сергей... Видно, что никогда у вас не было необходимости к уже созданному дополнительно привинтить мгновенный фоновый экспорт в excel, а затем возможность быстрой остановки всего процесса, а затем индексацию...

Кроме того, пример синтетический. Я имею полное право вставлять сколько угодно "если" и прочих "грибов в носу". Равно как и вы. А тот факт, что с каждым следующим "если" код без break-а оказывается не дописан, а переписан, ни о чём хорошем не говорит.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Re[10]: Синтаксический оверхед
От: xBlackCat Россия  
Дата: 23.06.05 11:52
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Здравствуйте, Сергей Губанов, Вы писали:


A>>>В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.


СГ>>Это было бы так если бы использовался Modula/Oberon в которых из цикла WHILE нельзя выйти ни каким другим способом. В С# же был выход по break. Поэтому значение n на реальных данных всегда было больше нуля, а не то что больше -1. Ошибку я нашел просто случайно поглядев на исходник, а вовсе не от того что программа упала (она не падала) и я залезши в дебагер стал там чего-то крутить.


SJA>Ну вот я написал в обероне прогу. Аналог.


[вырезано]

SJA>Поскольку пост декремента там нету, то я написал свой. Использовал отличный WHILE, как положено, а лажа — та же....


О! Молодца! Ату его, ату!

а если серьёзно — то пример очень даже правильный и демонстрирует, что и на прямом месте можно спотыкнуться, если не осматриваться.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Rojac &mdash; Rsdn Offline JAva Client
Анонсы и обсуждение здесь
Автор: xBlackCat
Дата: 08.02.10
Re[17]: LOOP
От: Пацак Россия  
Дата: 23.06.05 11:54
Оценка: :)
Здравствуйте, Amidlokos, Вы писали:

СГ>>WHILE и REPEAT — синтаксический сахар поверх LOOP.

A>Нет, позвольте! Тогда уж не сахар, а оверхед!

Это уже даже не оверхед, это уже просто баян.
Ку...
Re[11]: Синтаксический оверхед
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.06.05 12:01
Оценка:
Здравствуйте, xBlackCat, Вы писали:

BC>а если серьёзно — то пример очень даже правильный и демонстрирует, что и на прямом месте можно спотыкнуться, если не осматриваться.


Он очень хорошо демонстрирует, что верифицировать императивные языки, в которых есть побочные эффекты при вызове функций почти нельзя (за исключением тривиальных случаев), и Оберон тут ну ничем не лучше ни сей, ни явы, ни шарпа. Другое дело строгие функциональные языки, но не уверен, что Сергей хотябы представление о них имеет нормальное...
Re[24]: Синтаксический оверхед
От: Трурль  
Дата: 23.06.05 12:14
Оценка: -1
Здравствуйте, Privalov, Вы писали:

P>Есть в украинском: їхній. А в русском из нас это слово еще в школе каленым железом выжигали.

Плохие у вас в школе учителя были.
Re[17]: Яркий пример
От: Трурль  
Дата: 23.06.05 12:16
Оценка:
Здравствуйте, Пацак, Вы писали:


П>Просто замечательно. То есть любой while-цикл, который требует прерывания по break в обероне автоматически превращается в LOOP.

Цикл, который требует прерывания по break не является while-циклом по определению.
Re[18]: Яркий пример
От: Пацак Россия  
Дата: 23.06.05 12:21
Оценка:
Здравствуйте, Трурль, Вы писали:

П>>Просто замечательно. То есть любой while-цикл, который требует прерывания по break в обероне автоматически превращается в LOOP.

Т>Цикл, который требует прерывания по break не является while-циклом по определению.

Угу, то есть поскипанная тобой часть верна — если изначально break не планировалось, а затем возникла такая необходимость — программисту придется переписывать весь цикл, меняя его с while на loop? Да, удобство языка прям из всех щелей прет.
Ку...
Re[18]: While Loop - Definition
От: Mamut Швеция http://dmitriid.com
Дата: 23.06.05 12:26
Оценка: 2 (1)
Чтобы я делал без Wikipadia и запроса define: в Гугле?
Wikipedia:While Loop

In most computer programming languages, a while loop is a control structure that allows code to be executed repeatedly based on a given boolean condition.

The while construct consists of a block of code and a condition. The condition is first evaluated — if the condition is true the code within the block is then executed. This repeats until the condition becomes false. Because while loops check the condition before the block is executed, the control structure is often also known as a pre-test loop. Compare with the do while loop, which tests the condition after the loop has executed.

Note that it is possible, and in some cases desirable, for the condition to always evaluate to true, creating an infinite loop. When such a loop is created intentionally, there is usually another control structure (such as a break statement) that controls termination of the loop.



dmitriid.comGitHubLinkedIn
Re[18]: Яркий пример
От: Privalov  
Дата: 23.06.05 12:28
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>Цикл, который требует прерывания по break не является while-циклом по определению.


Нельзя ли посмотреть на это определение, попутно автора узнать?
Re[19]: Яркий пример
От: Пацак Россия  
Дата: 23.06.05 12:31
Оценка:
Здравствуйте, Пацак, Вы писали:

Т>>Цикл, который требует прерывания по break не является while-циклом по определению.

П>Угу, то есть поскипанная тобой часть верна — если изначально break не планировалось, а затем возникла такая необходимость — программисту придется переписывать весь цикл, меняя его с while на loop? Да, удобство языка прям из всех щелей прет.

Дополнение: особенно это удобно если, как предлагал Сергей, программист где-то в дальнейшем коде заложился на то, что условие завершения while-цикла будет ложным. Чрезвычайно познавательно будет потом искать причину, по которой программа начнет падать там, где раньше не падала.
Ку...
Re[19]: While Loop - Definition
От: Privalov  
Дата: 23.06.05 12:32
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Чтобы я делал без Wikipadia и запроса define: в Гугле?

[...]

Великолепно! Вот только если бы г-н Трурль сам нашел его... Да видно не судьба.
Re[9]: Синтаксический оверхед
От: alexku Россия  
Дата: 23.06.05 12:35
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


A>>В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.


СГ>Это было бы так если бы использовался Modula/Oberon в которых из цикла WHILE нельзя выйти ни каким другим способом. В С# же был выход по break. Поэтому значение n на реальных данных всегда было больше нуля, а не то что больше -1. Ошибку я нашел просто случайно поглядев на исходник, а вовсе не от того что программа упала (она не падала) и я залезши в дебагер стал там чего-то крутить.


Что ж, поправлюсь.


СГ>n = 100;
СГ>while(n-- > 0)
СГ>{
        //Здесь есть какая-то проверка и выход и никаких манипуляций с n
СГ>}
СГ>assert(n <= -1);


Вы всегда получите на выходе из цикла значение n-1, при этом n никогда не станет меньше -1 (см. assert). Диапазон значений на выходе — -1...99. И никогда никаких "иногда". Результат предсказуем на 100%. Получили некорректное значение n — получили некорректный результат, даже если он "иногда" совпадает с необходимым. И Modula/Oberon здесь ни при чём. Знание языка рулит. А этим примером вы показали его незнание.
Re[12]: Очередной яркий пример
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 12:50
Оценка: +1 -1
Здравствуйте, Аноним, Вы писали:

СГ>>a — обозначает саму себя как процедурную переменную

СГ>>a() — обозначает результат, который вернула процедура-функция после исполнения

СГ>>Как иначе-то, может быть?


А>Значит скобки все-таки нудны в вашем знаменитом WHILE a DO x END? То есть нужно писать x()?


Нет, не нужно.

Скобки () нужны для активации процедуры-функции даже если у нее нет аргументов.
Для активации процедуры скобки писать не нужно если у нее нет аргументов.
Re[13]: Очередной яркий пример
От: boomsic Россия  
Дата: 23.06.05 12:55
Оценка: -1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Аноним, Вы писали:


СГ>>>a — обозначает саму себя как процедурную переменную

СГ>>>a() — обозначает результат, который вернула процедура-функция после исполнения

СГ>>>Как иначе-то, может быть?


А>>Значит скобки все-таки нудны в вашем знаменитом WHILE a DO x END? То есть нужно писать x()?


СГ>Нет, не нужно.


СГ>Скобки () нужны для активации процедуры-функции даже если у нее нет аргументов.

СГ>Для активации процедуры скобки писать не нужно если у нее нет аргументов.


что за бред??????
ICQ 227964124
Re[12]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 12:55
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>Здравствуйте, Сергей Губанов, Вы писали:


СГ>>
СГ>>myfunc();           (* НЕЛЬЗЯ! Возвращаемое значение не используется!!! *)
СГ>>

Т>Таки, монжно.

У меня BlackBox ругается: "procedure call of a function".
Re[26]: СИНТАКСИС
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 12:59
Оценка:
Здравствуйте, Курилка, Вы писали:

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


К>>>Интересная ссылочка, только вот из виртовских детищ только паскаль, ну, видимо, не интересно людям что там в оберонах всех этих творится...


M>>Там еще Modula-3 мелькает иногда


К>А она ещё Виртовская? Я уже в этих клонах запутался, если честно, кто там что и куда — хрен разберёшь, зато синтаксис офигенный


Modula 2 Виртовская, а третья модула нет (это как Turbo Pascal — тоже не Виртовский).
Re[13]: Очередной яркий пример
От: qwertyuiop Российская Империя  
Дата: 23.06.05 13:01
Оценка: +2
А>>Значит скобки все-таки нужны в вашем знаменитом WHILE a DO x END? То есть нужно писать x()?

СГ>Нет, не нужно.


СГ>Скобки () нужны для активации процедуры-функции даже если у нее нет аргументов.

СГ>Для активации процедуры скобки писать не нужно если у нее нет аргументов.

А если у процедуры есть аргументы, то тоже нужны скобки. Спасибо, я понял. Все логично и интуитивно понятно.

P.S. Значти, если в вашем знаменитом WHILE a DO x END у процедуры x будут аргументы, то надо написать скобки? Так же как и в С? Но тогда это повлияет на подсчет оверхеда! Вы не находите, что вы здесь слегка лукавите, придумывая выгодные вам примеры? А когда дело дошло до более-менее реального примера и Mamut посчитал полученный оверхед вы почему-то проигнорировали этот факт... Нехорошо... А еще научный работник.
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Re[14]: Очередной яркий пример
От: Пацак Россия  
Дата: 23.06.05 13:03
Оценка: +3
Здравствуйте, boomsic, Вы писали:

B>что за бред??????


Не бред, а паскалятина, с тем только отличием, что у функции без парамеров теперь обязательны скобки:


procedure p_no_paprams;
....
procedure p_one_param(s: String);
...
function f_no_params: String;
...
function f_one_param(s: String): String;
...

{вызов}
p_no_params;
p_one_param(str);
str := f_no_params();
str2 := f_one_param(str);


Как по мне — совершенно неудобно. Единообразие рулит.
Ку...
Re[15]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 13:05
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Здравствуйте, Сергей Губанов, Вы писали:


СГ>>Ни кто не кричал что в Обероне не существует слова BEGIN.



P>

P>Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)
P>[...]

P>Обратите внимание: слово "BEGIN" отсутствует вообще во всех инструкциях — оно лишнее.


Во всех инструкциях типа: IF, WHILE, REPEAT, CASE, WITH, и т.д. что очевидно из контекста обсуждения (модули и процедуры не обсуждались вообще).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.