Это, IMHO, стандартный метод превращения дискуссии во флейм. Вместо ответа по существу — выпячивание мелочей и игнорирование сути. Хорошо, что кроме такого рода ответов здесь есть что почитать.
P.S. А BEGIN в Обероне существует! А кто-то кричал не своим голосом, что нет и что это устаревший синтаксис.
Здравствуйте, Курилка, Вы писали:
К>Сергей, если Вы не удосуживаетесь просто прочитать документацию
Странная реакция.
Я пишу:
вот я на си-образном языке по недосмотру сделал глупую ошибку, которую не смог бы сделать в Modula/Oberon-образном языке
мне в ответ:
покажи-покажи, что за ошибку?
Я пишу:
вот такую-то
мне в ответ:
ты не почитал доки, а человект не удосуживающийся просто прочитать документацию... бла-бла-бла...
Приехали.
Я для этого что-ли ошибку-то тут засвечивал? Я ее тут засвечивал для того чтобы показать, что в Modula/Oberon-образном синтаксисе ошибки таких сортов невозможны.
Здравствуйте, Mamut, Вы писали:
P>>>Еще раз, универсальным типом цикла является WHILE (цикл с предусловием).
СГ>>Как же WHILE если LOOP?
M>Ох. Если бы вы хоть изредка читали то, что вам говорят оппоненты
Он не только оппонентов, он и классику не читает. Сейчас вряд ли найду, но эти положения у Вирта обсуждаются. Видимо, он и его не читал. О чем тогда еще говорить?
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Наоборот, это WHILE и REPEAT выводятся из LOOP как частные случаи.
СГ>WILE a DO ... END можно понимать как сокращенную запись: LOOP IF a THEN ... ELSE EXIT END END, СГ>REPEAT ... UNTIL b можно понимать как сокращенную запись: LOOP ... IF b THEN EXIT END END.
Здравствуйте, xBlackCat, Вы писали:
BC>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>Так ведь я же и написал, что именно в этом-то и состяла моя ошибка. До Вас это только сейчас дошло что ли?
BC>До меня дошло ещё раньше. BC>Просто объясни мне, как можно написать операцию, и думать, что она не выполнится?
BC>Но, как говорится, RTFM вначале, прежде чем что-то использовать
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Я для этого что-ли ошибку-то тут засвечивал? Я ее тут засвечивал для того чтобы показать, что в Modula/Oberon-образном синтаксисе ошибки таких сортов невозможны.
M>>"Не плоди сущностей без необходимости" LOOP — такая вот ненужная сущность.
СГ>Странно, а если нужно проверить условие прекращения итерации уже находясь внутри итерации, тогда как быть?
Вы издеваетесь? Посмотрите в практически любой другой язык программирования.
while(cond)
{
if(another_cond)
break;
}
Для for и do аналогично. Какие могут быть насчет этого есть проблемы?
СГ>Наоборот, это WHILE и REPEAT выводятся из LOOP как частные случаи.
СГ>WILE a DO ... END можно понимать как сокращенную запись: LOOP IF a THEN ... ELSE EXIT END END, СГ>REPEAT ... UNTIL b можно понимать как сокращенную запись: LOOP ... IF b THEN EXIT END END.
Еще раз, по буквам.
В обероне циклы while, for, repeat слепо следуют структурной парадигме, из которой следует, что в цикле должна быть одна точка выхода. Но в реальном мире необходимо больше точек выхода. Так в Обероне рождается LOOP. Скажите, от того, что в while есть возможность выхода — это плохо? Нет и еще раз нет:
Cтруктурный подход, в котором есть логическая ошибка
int errorCode = 0;
while(sockeatread() != eof) // eof не обязательно наступит!
{
processData();
if(data != expectedData)
errorCode = BAD_DATA;
}
легким движением руки превращается в неструктурный,
но без ошибки:
int errorCode = 0;
while(sockeatread() != eof) // eof не обязательно наступит!
{
if(bytesRead > ALLOWED_SIZE) {
errorCode = HACKER_ATTACK;
break;
}
processData();
if(data != expectedData) {
errorCode = BAD_DATA;
break; // зачем нам продолжать читать данные, если они неверны?
}
}
а в случае с Обероном трансформация не настолько тривиальна
и не эквивалентна логически
errorCode := 0;
WHILE socketRead # eof DO
processData;
IF data # expectedData THEN errorCode := BAD_DATA END;
END;
превращается в
errorCode := 0;
LOOP
IF socketRead # eof THEN
IF bytesRead > ALLOWED_BITES THEN
errorCode := HACKER_ATTACK;
EXIT;
END;
processData;
IF data # expectedData THEN
errorCode := BAD_DATA;
EXIT;
END;
END;
END;
В обероновском случае нам приходится менять логику работы с сокетом с понятного "пока есть данные" на "данные есть всегда., только надо проверить, а не закончился ли поток". Хуже того, трансформация кода должна проходить очень тщательно. Один while do end заменяется на громоздкую конструкцию loop if then end end.
Ну и где преимущества убогих, кастрированных циклов Оберона над великолепно-гибкими циклами других языков?
И, хотя это являтся оффтопиком для данной подветки, еще одно замечание:
// С++
if(data != expectedData) // сравниваем две переменные, видно из кода
{* Oberon *}
IF data # expectedData THEN // сравинваем две переменные?
// переменную и значение функции?
// значения двух функций?
Здравствуйте, jazzer, Вы писали:
J>Потому что он создавался именно для облегчения программирования на С (как и С по отношению к асму, кстати). J>Цель сугубо практическая. J>И обкатывался язык не на теоремах, а в руках действующих программистов на С. J>Почитай D&E.
Не надо быть прорицателем, чтобы понять, что реальная цель у аспиранта Страуструпа была защитить диссеру чтобы его взяли на работу.
SJA>>Нет. Нам стандарт de jure пожалста. Ну, тот которым все Оберонщики очень гордятся, что он маленький и компактный. Это должно быть там.
P>Я читал. Нет там ничего. Ссылку навскидку не вспомню.
What advantage do you see in using Oberon rather than other widespread programming languages?
A: The following was reported by Antonio Cisternino :
Reading the old book "Godel, Echer, Bach: an eternal golden braid", Hofstadter, 1980, I have found the following in chapter X:
"Programming in different languages is like composing pieces in different keys, particularly if you work at the keyboard. If you have learned or written pieces in many keys, each key will have its own special emotional aura. Also, certain kinds of figurations "lie in the hand" in one key but are awkward in another. So you are channeled by your choice of key. In some ways, even enharmonic keys, such as C-sharp and D-flat, are quite distinct in feeling. This shows how a notational system can play a significant role in shaping the final product."
I think it's a nice way to say that multiple languages may help solving complex problems if each language is used to exploit its strength. It is related with CLR and the music context is appropriate to the name C#.
Здравствуйте, Sergey J. A., Вы писали:
SJA>Кстати ! Когда иссякнет эта тема, предлагаю начать следующую ! Как извесно в С/С++ индескы начинаются с 0, а в Обероне с 1 (т.е. я так предполагаю). "Спрашивается как долго ...". Ну и так далее. Убедительные примеры, доказательства и процентные соотношения выдумаете сами.
Увы, должен Вас огорчить. Ваше предположение не соответствует действительности. Но отчаиваться не стоит. Есть масса других вещей, о которых можно приятно пофлеймить. Например: Почему модуль на Обероне должен завершаться точкой?
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Socrat, Вы писали:
S>>А еще типичная ошибка — вместо "==" в условии поставить "="...
СГ>Ну да, точно. Как-то забыл упомянуть. Спасибо что напомнили. За одно только это си-образный синтаксис не имеет права существовать...
За одно только := паскалеобразные языки не имеют права на существование! Это же 100% оверхед по операции присваивания!