Re[11]: Синтаксический оверхед
От: Трурль  
Дата: 23.06.05 09:01
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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

Таки, монжно.
Re[15]: LOOP
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 09:02
Оценка: +1 -1
Здравствуйте, Mamut, Вы писали:

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.
Re[12]: Синтаксический оверхед
От: Трурль  
Дата: 23.06.05 09:05
Оценка:
Здравствуйте, 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>


Че-то не уловил смысла примера. Где грабли-то?
Re[12]: Синтаксический оверхед
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.06.05 09:08
Оценка: :)
Здравствуйте, Трурль, Вы писали:

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


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

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

Неужто Сергей по поводу Оберона опростоволосился?
"И эти люди не разрешают мне ковыряться в носу?" (ц)Вовочка
Re[13]: Синтаксический оверхед
От: Mamut Швеция http://dmitriid.com
Дата: 23.06.05 09:13
Оценка:
Т>Че-то не уловил смысла примера. Где грабли-то?

Что-то я торможу Сотрите и забудьте, как страшный сон


dmitriid.comGitHubLinkedIn
Re[22]: Синтаксический оверхед
От: Трурль  
Дата: 23.06.05 09:15
Оценка: -1
Здравствуйте, Курилка, Вы писали:


К>Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском!

Есть!
Re[22]: Синтаксический оверхед
От: Mamut Швеция http://dmitriid.com
Дата: 23.06.05 09:18
Оценка:
К>Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском!
К>А утверждения далеки от правоты. Наводящий вопрос: США единственная страна, говорящая по-английски? Если вы хоть немного знаете историю и географию, то гораздо большее значение Англии, а не США (хотя влияние последних тоже немалое, но и туда английский из Англии пришёл)

Можно почитать еще вот эту статью про Lingua Franca. Наиболее популярными и используемыми никогда не становились простые, логические языки.

Кстати. Вопрос на засыпку. Почему Эсперанто до сих пор не стало языком международного общния? А ведь такой правильный язык


dmitriid.comGitHubLinkedIn
Re[15]: Яркий пример
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 09:20
Оценка:
Здравствуйте, 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-ах, активация процедуры-функции обозначается скобками "()" даже если список аргументов пуст. (Это не относится к просто процедурам — у них скобки писать не обязательно если аргументов нет.)
Re[16]: LOOP
От: Mamut Швеция http://dmitriid.com
Дата: 23.06.05 09:24
Оценка:
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:

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.


Как раз об этой ветке


dmitriid.comGitHubLinkedIn
Re[23]: Синтаксический оверхед
От: Privalov  
Дата: 23.06.05 09:25
Оценка: +2
Здравствуйте, Трурль, Вы писали:

К>>Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском!

Т>Есть!

Есть в украинском: їхній. А в русском из нас это слово еще в школе каленым железом выжигали.
Re[14]: Синтаксический оверхед
От: Privalov  
Дата: 23.06.05 09:29
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

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



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

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


А это
Автор: Сергей Губанов
Дата: 09.06.05
что?
Re[17]: Яркий пример
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 09:32
Оценка:
Здравствуйте, Amidlokos, Вы писали:

A>Вызов функции в C++ всегда обозначен скобками: somebody(). Скобок нет — переменная. "Виртовский бесскобочный" синтаксис не указывает на то, что это за такое somebody в коде встретилось.


Разумеется нет. Вы путаете процедуру с процедурой-функцией. Вызов процедуры-функции обязывает писать () даже если нет аргументов, в противном случае этот идентификатор обозначает процедурную константу, которую можно, например, присвоить какой-то процедурной переменной.
Re[24]: Синтаксический оверхед
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.06.05 09:35
Оценка: :)
Здравствуйте, Privalov, Вы писали:

P>Здравствуйте, Трурль, Вы писали:


К>>>Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском!

Т>>Есть!

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


Есть просторечное слово и, естетсвенно, что в литературном языке оно не рекомендуется. Но литературный язык полон оверхэдов, конечно
Потоэтому афтары им и не умеют пользоваться — неоптимально.
Re[22]: СИНТАКСИС
От: Mamut Швеция http://dmitriid.com
Дата: 23.06.05 09:36
Оценка: 2 (2)
Здравствуйте, Mamut, Вы писали:

СГ>>Если в будущем, например, IBM или Intel соберется изобрести новый язык, то почему-бы им не взять в качестве синтаксической основы правильный синтаксис Modula/Oberon? Их язык от этого только выиграет.


M>Кто сказал, что этот синтаксис — правильный? Только не надо ссылки на самого себе приводить. Требуется ссылка на строгое математическое доказательство правильности данного синтаксиса.


Как всегда, все приходится делать самому. Не знаю, увидят ли это сообщение в этой ветке, ну да ладно.

Syntax across languages

Некоторые варианты синтаксиса просто великолепны.


dmitriid.comGitHubLinkedIn
Re[17]: Яркий пример
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 09:37
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Это я сказал про BEGIN. И единственной моей целью было показать методы ведения спора, применяемые некоторыми товарищами. Вот смотрите: несколько раз эти товарищи утверждают, что BEGIN устарел, но в нужный момент вытаскивают его для подтверждения очередной своей теории. Ссылок не привожу, все, читавшие этот топик, знают, о чем я. И, кроме отдельно взятого BEGIN есть еще масса подобных примеров. Подобное поведение говорит о глубоких и прочных знаниях языка?


Речь шла не о служебном слове BEGIN, а о самостоятельном блоке BEGIN ... END, которого в Обероне нет.
Re[17]: Яркий пример
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 09:39
Оценка:
Здравствуйте, qwertyuiop, Вы писали:

Q> какова его практическая польза


Его можно использовать для математического доказательства правильности алгоритмов. Об этом говорилось в самом начале (верификация).
Re[17]: Яркий пример
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 09:43
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Только посмотрев в описание модулей можно понять, что Out.Ln — процедура, а Display.get — это переменная


Уверяю Вас это было видно сразу же по тексту программы. Ведь активация процедуры-функции всегда помечается скобками () даже если список параметров пуст.

M>То есть скобки не нужны при вызове


Для вызова процедуры не обязательны, а для вызова процедуры-функции обязательны.
Re[9]: Синтаксический оверхед
От: qwertyuiop Российская Империя  
Дата: 23.06.05 09:44
Оценка: +1
Q>>Большинство современных компиляторов выдают на такую строчку предупреждение

СГ>Это хорошо. Правда на прошлой неделе компилировал нечто написанное на Си не мной, там столько предупреждений выдалось, ёёёё-о-у, во всех них копаться даже не стал. Раз уж сами авторы не стали, я-то что?


Сказать-то что хотели?
Может лучше ответите на какой-нибудь конкретный вопрос, например этот
Автор: qwertyuiop
Дата: 22.06.05
или этот
Автор: qwertyuiop
Дата: 22.06.05
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Re[15]: Яркий пример
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 23.06.05 09:44
Оценка:
Здравствуйте, Cyberax,

while(true) = LOOP
Re[16]: Яркий пример
От: Mamut Швеция http://dmitriid.com
Дата: 23.06.05 09:48
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


M>>Просьба к коду не придираться


СГ>Если исполнить эту просьбу, то надо кратко ответить — "У Вас ошибки". Но Вы же наверняка потом спросите, а где именно у меня ошибки? Ведь так, да? Ладно, вместо того чтобы придираться, я сразу напишу по грамотному.


Я вас просил????
Дети, сегодня мы будем учиться читать
Автор: Mamut
Дата: 22.06.05
:

В обероне циклы while, for, repeat слепо следуют структурной парадигме, из которой следует, что в цикле должна быть одна точка выхода. Но в реальном мире необходимо больше точек выхода. Так в Обероне рождается LOOP. Скажите, от того, что в while есть возможность выхода — это плохо?
...

В обероновском случае нам приходится менять логику работы с сокетом с понятного "пока есть данные" на "данные есть всегда., только надо проверить, а не закончился ли поток". Хуже того, трансформация кода должна проходить очень тщательно. Один while do end заменяется на громоздкую конструкцию loop if then end end.

Ну и где преимущества убогих, кастрированных циклов Оберона над великолепно-гибкими циклами других языков?



dmitriid.comGitHubLinkedIn
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.