GUEST писал(а):
При всем при том то, что ввести контроль за недопущением подобных выражений в Си на уровне компилятора (плюс их преобразования) можно, должно было быть известно профессору Вирту лучше кого бы то ни было.
Не хочу оправдывать Вирта. Но этот момент мы детально с Черновым обсудили. Я высказал свою точку зрения. Судя по всему, Вы разделяете точку зрения Чернова. Он тоже привел опровержение слов Вирта путем примера реакции компилятора. Думаю, мне имеет смысл привести свою аргументацию. Прошу прощения, что пересказываю, но в той дискуссии все это было размазано по нескольким сообщениям.
Почему при разрешении подобных вопросов мы апеллируем к реализации языка (чьей-то интерпретации, возможно ошибочной), а не к его описанию (закону)? Описание одно, компиляторов и их версий много. Сегодня там кто-то предусмотрел проверку, завтра ее отключил...
Нужно смотреть описание языка. Именно оно является основой разрешения подобных сомнений. Выражение x+++++y должно быть допустимо в языке, ибо это x++ + ++y. Сумма двух допустимых операндов. Я посмотрел три описания языка Си и убедился в справедливости слов Вирта. Хотя мог быть невнимателен.
1. Dennis Ritchie "C Reference Manual" (1975) --
http://www.europrog.ru/book/cmdr1975e.pdf2. B.Kernighan, D.Ritchie “C Programming Language” – Second Edition, 1988 -=
http://www.europrog.ru/paper/kr_c.pdf3. "C Language. ISO/IEC 9899:1999" --
http://www.europrog.ru/doc/doc-iso1999-009899e.pdfСобственно, это авторское описание, ANSI C, а также ISO-стандарт языка.
Чернов в ответ привел конкретную ссылку на ISO-стандарт:
Цитата:
Нет, это x++ ++ + y. При лексическом анализе выделяется лексема максимальной длины. ISO/IEC 9899:1999 6.4 (Lexical elements), EXAMPLE 2.
Моя реакция была следующей:
Цитата:
Значит, судя по Вашей информации (нет оснований не доверять), это невозможно для ISO C? А возможно ли для K&R C, для ANSI C? Вы уверены, что Вирт имел в виду именно ISO-стандарт Си? Вопрос не праздный: для Паскаля существует классический вариант (Вирта) и ISO-вариант (к Вирту не имеет отношения). Для Modula-2 – аналогично (причем это сильно разные языки). Вирт рассматривает вопросы промышленной стандартизации как нечто неизбежное, к нему не относящееся. Собственно, поэтому интересно понять, что там будет в отношении классического Си.
А в ответ -- тишина.
Уточняю ссылку на нашу дискуссию:
http://pedsovet.org/forum/index.php?sho ... 763&st=205Теперь в отношении примеров Вирта. Они представляют загадку не для компилятора, а для программиста. И это существенно. Я подробно пояснил Чернову, в чем были допущены неточности при переводе с оригинала.
В отношении Вашей реакции -- меня она, признаюсь, не удивляет. Для меня анализ важнее синтеза, а компилятор я рассматриваю как программу, которая полна ошибок. Основой работы считаю описание языка. В этом и разница в подходах. Для одних важнее закон, для других -- его интерпретация, закрепленная в компиляторе.
Цитата:
P.S.Относительно END , ";" и проблем на голом месте: должно быть это любимое нацинальное занятие. Собственно поэтому в Форте одна единственная ";" в конце.
Возможно, действительно любимое национальное занятие. Что делать, каждый ищет на свою голову приключений по-своему. В Форте единственная? Так в Фортране она вообще не нужна. Вы считаете Форт образцом наглядного синтаксиса?