Здравствуйте, Mamut, Вы писали:
M>Писец. И это — правильный синтаксис???? У меня уже слов не осталось. Грабли, не хуже, чем в С++
M>Пример. Полупсевдокод. M>
M>Было
M>PROCEDURE someProcedure : INTEGER
M>BEGIN
M> RETURN 1;
M>END;
M>Стало
M>PROCEDURE someProcedure
M>BEGIN
M>END;
M>Где-то в коде:
M>{* много кода *}
M>myVar := someProcedure;
M>{* много кода *}
M>
К>Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском! К>А утверждения далеки от правоты. Наводящий вопрос: США единственная страна, говорящая по-английски? Если вы хоть немного знаете историю и географию, то гораздо большее значение Англии, а не США (хотя влияние последних тоже немалое, но и туда английский из Англии пришёл)
Можно почитать еще вот эту статью про Lingua Franca. Наиболее популярными и используемыми никогда не становились простые, логические языки.
Кстати. Вопрос на засыпку. Почему Эсперанто до сих пор не стало языком международного общния? А ведь такой правильный язык
Здравствуйте, Mamut, Вы писали:
M>Просьба к коду не придираться
Если исполнить эту просьбу, то надо кратко ответить — "У Вас ошибки". Но Вы же наверняка потом спросите, а где именно у меня ошибки? Ведь так, да? Ладно, вместо того чтобы придираться, я сразу напишу по грамотному.
LOOP
IF socketRead # eof THEN
IF bytesRead <= ALLOWED_BYTES THEN
processData;
IF data # expectedData THEN errorCode := BAD_DATA; EXIT END
ELSE
errorCode := HACKER_ATTACK; EXIT
END
ELSE EXIT END
END
IF data # expectedData THEN ... END
Здесь сравниваются две переменные.
IF data # expectedData() THEN ... END
Здесь сравниваются переменная и значение возвращаемое процедурой-функцией
IF data() # expectedData() THEN ... END
Здесь сравниваются значения возвращаемые процедурами-функциями
Вот в Delphi с этим проблема, а в Modula/Oberon-ах, активация процедуры-функции обозначается скобками "()" даже если список аргументов пуст. (Это не относится к просто процедурам — у них скобки писать не обязательно если аргументов нет.)
M>>Любой цикл и условие в программе можно переписать с использованием только цикла while.
СГ>а его, в свою очередь, через LOOP:
СГ>WHILE a DO x END = LOOP IF a THEN x ELSE EXIT END END СГ>REPEAT x UNTIL b = LOOP x; IF b THEN EXIT END END
СГ>WHILE и REPEAT — синтаксический сахар поверх LOOP.
Syntactic sugar is a term coined by Peter J. Landin for additions to the syntax of a computer language that do not affect its expressiveness but make it "sweeter" for humans to use. Syntactic sugar gives the programmer (designer, in the case of specification computer languages) an alternative way of coding (specifying) that is more practical, either by being more succinct or more like some familiar notation. It does not affect the expressiveness of the formalism.
WHILE и FOR в Обероне ухудшают выразительность языка по сравнению с LOOP так как они не прдеставляют более одной точки выхода, и поэтому не могут называться синтаксическим сахаром.
И вообще, там есть великолепное изречение:
The correct amout of both syntactic sugar and syntactic salt in a language is a matter of personal opinion, and thus is the subject of never-ending debate.
Здравствуйте, Трурль, Вы писали:
К>>Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском! Т>Есть!
Есть в украинском: їхній. А в русском из нас это слово еще в школе каленым железом выжигали.
Здравствуйте, Amidlokos, Вы писали:
A>Вызов функции в C++ всегда обозначен скобками: somebody(). Скобок нет — переменная. "Виртовский бесскобочный" синтаксис не указывает на то, что это за такое somebody в коде встретилось.
Разумеется нет. Вы путаете процедуру с процедурой-функцией. Вызов процедуры-функции обязывает писать () даже если нет аргументов, в противном случае этот идентификатор обозначает процедурную константу, которую можно, например, присвоить какой-то процедурной переменной.
Здравствуйте, Privalov, Вы писали:
P>Здравствуйте, Трурль, Вы писали:
К>>>Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском! Т>>Есть!
P>Есть в украинском: їхній. А в русском из нас это слово еще в школе каленым железом выжигали.
Есть просторечное слово и, естетсвенно, что в литературном языке оно не рекомендуется. Но литературный язык полон оверхэдов, конечно
Потоэтому афтары им и не умеют пользоваться — неоптимально.
Здравствуйте, Mamut, Вы писали:
СГ>>Если в будущем, например, IBM или Intel соберется изобрести новый язык, то почему-бы им не взять в качестве синтаксической основы правильный синтаксис Modula/Oberon? Их язык от этого только выиграет.
M>Кто сказал, что этот синтаксис — правильный? Только не надо ссылки на самого себе приводить. Требуется ссылка на строгое математическое доказательство правильности данного синтаксиса.
Как всегда, все приходится делать самому. Не знаю, увидят ли это сообщение в этой ветке, ну да ладно.
Здравствуйте, Privalov, Вы писали:
P>Это я сказал про BEGIN. И единственной моей целью было показать методы ведения спора, применяемые некоторыми товарищами. Вот смотрите: несколько раз эти товарищи утверждают, что BEGIN устарел, но в нужный момент вытаскивают его для подтверждения очередной своей теории. Ссылок не привожу, все, читавшие этот топик, знают, о чем я. И, кроме отдельно взятого BEGIN есть еще масса подобных примеров. Подобное поведение говорит о глубоких и прочных знаниях языка?
Речь шла не о служебном слове BEGIN, а о самостоятельном блоке BEGIN ... END, которого в Обероне нет.
Здравствуйте, Mamut, Вы писали:
M>Только посмотрев в описание модулей можно понять, что Out.Ln — процедура, а Display.get — это переменная
Уверяю Вас это было видно сразу же по тексту программы. Ведь активация процедуры-функции всегда помечается скобками () даже если список параметров пуст.
M>То есть скобки не нужны при вызове
Для вызова процедуры не обязательны, а для вызова процедуры-функции обязательны.
Q>>Большинство современных компиляторов выдают на такую строчку предупреждение
СГ>Это хорошо. Правда на прошлой неделе компилировал нечто написанное на Си не мной, там столько предупреждений выдалось, ёёёё-о-у, во всех них копаться даже не стал. Раз уж сами авторы не стали, я-то что?
Сказать-то что хотели?
Может лучше ответите на какой-нибудь конкретный вопрос, например этот
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Mamut, Вы писали:
M>>Просьба к коду не придираться
СГ>Если исполнить эту просьбу, то надо кратко ответить — "У Вас ошибки". Но Вы же наверняка потом спросите, а где именно у меня ошибки? Ведь так, да? Ладно, вместо того чтобы придираться, я сразу напишу по грамотному.
Я вас просил????
Дети, сегодня мы будем учиться читать
В обероне циклы while, for, repeat слепо следуют структурной парадигме, из которой следует, что в цикле должна быть одна точка выхода. Но в реальном мире необходимо больше точек выхода. Так в Обероне рождается LOOP. Скажите, от того, что в while есть возможность выхода — это плохо?
...
В обероновском случае нам приходится менять логику работы с сокетом с понятного "пока есть данные" на "данные есть всегда., только надо проверить, а не закончился ли поток". Хуже того, трансформация кода должна проходить очень тщательно. Один while do end заменяется на громоздкую конструкцию loop if then end end.
Ну и где преимущества убогих, кастрированных циклов Оберона над великолепно-гибкими циклами других языков?