OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 20 Апрель, 2019 05:19

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 74 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 09 Сентябрь, 2007 23:16 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 22:34
Сообщения: 431
Откуда: Москва
GUEST писал(а):
При всем при том то, что ввести контроль за недопущением подобных выражений в Си на уровне компилятора (плюс их преобразования) можно, должно было быть известно профессору Вирту лучше кого бы то ни было.


Не хочу оправдывать Вирта. Но этот момент мы детально с Черновым обсудили. Я высказал свою точку зрения. Судя по всему, Вы разделяете точку зрения Чернова. Он тоже привел опровержение слов Вирта путем примера реакции компилятора. Думаю, мне имеет смысл привести свою аргументацию. Прошу прощения, что пересказываю, но в той дискуссии все это было размазано по нескольким сообщениям.

Почему при разрешении подобных вопросов мы апеллируем к реализации языка (чьей-то интерпретации, возможно ошибочной), а не к его описанию (закону)? Описание одно, компиляторов и их версий много. Сегодня там кто-то предусмотрел проверку, завтра ее отключил...

Нужно смотреть описание языка. Именно оно является основой разрешения подобных сомнений. Выражение x+++++y должно быть допустимо в языке, ибо это x++ + ++y. Сумма двух допустимых операндов. Я посмотрел три описания языка Си и убедился в справедливости слов Вирта. Хотя мог быть невнимателен.

1. Dennis Ritchie "C Reference Manual" (1975) -- http://www.europrog.ru/book/cmdr1975e.pdf
2. B.Kernighan, D.Ritchie “C Programming Language” – Second Edition, 1988 -= http://www.europrog.ru/paper/kr_c.pdf
3. "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 , ";" и проблем на голом месте: должно быть это любимое нацинальное занятие. Собственно поэтому в Форте одна единственная ";" в конце.


Возможно, действительно любимое национальное занятие. Что делать, каждый ищет на свою голову приключений по-своему. В Форте единственная? Так в Фортране она вообще не нужна. Вы считаете Форт образцом наглядного синтаксиса?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 10 Сентябрь, 2007 17:15 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Руслан Богатырев писал(а):
В отношении Модулы-2 и Оберона могу предположить, что Вирт руководствовался, скорее, не римскими традициями, хотя обращение к античности -- это стильно (если, правда, люди об этом знают). Такой прием Вирт наверняка позаимствовал у языка Mesa (первого языка модульного программирования, блестящая разработка исследовательского центра Xerox PARC начала 1970-х годов). Именно под его влиянием Вирт создавал Модулу-2 из своей экспериментальной Модулы (кстати, в Модуле в отличие от Модулы-2 был принят паскалевский подход, без чувствительности к регистру и с нижним регистром зарезервированных слов). Этот же принцип (верхний регистр) использовался и в языке Cedar (Xerox PARC), который Вирт изучал при создании Оберона. Этот же принцип использовал язык Modula-3 (разработка исследовательских лабораторий DEC SRC). В категорию этих языков можно отнести Occam(-2), в разработке которого участвовал Тони Хоар. Собственно, можно даже говорить, что это традиция модульных языков, которые прошли мимо подавляющей массы программистов. Другая культура. Думаю, это не изобретение Вирта. И даже не изобретение европейской школы программирования.


По-моему все намного проще. Вирт последние n-десятков лет не писал ни на чем кроме своих языков. Поэтому черпать идеи (в том числе и в плане эргономики синтаксиса) и сравнивать ему было не с чем. Опровергните меня, если я не прав.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 10 Сентябрь, 2007 17:30 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 22:34
Сообщения: 431
Откуда: Москва
Vlad писал(а):
По-моему все намного проще. Вирт последние n-десятков лет не писал ни на чем кроме своих языков. Поэтому черпать идеи (в том числе и в плане эргономики синтаксиса) и сравнивать ему было не с чем. Опровергните меня, если я не прав.


Опровергнуть несложно. Из первого утверждения "Вирт последние n-десятков лет не писал ни на чем кроме своих языков" не следует второе "Поэтому черпать идеи (в том числе и в плане эргономики синтаксиса) и сравнивать ему было не с чем".

Кроме процесса "писать" ("работать на передачу") существует еще процесс "читать" ("работать на прием"). К сожалению, мы свыклись с мыслью о том, что обогащение идеями подразумевает занятие исключительно процессом написания.

Хорошо известно, что Вирт дважды был продолжительное время в Xerox PARC (в середине 1970-х и в начале 1980-х), где знакомился с Mesa и Cedar. Сравнивать ему было с чем. И он немало приобрел от изучения этих разработок. Второго такого специалиста в области языков программирования сыскать трудновато (Вы, кстати, не изучали его язык Euler? Советую посмотреть). По осведомленности в этой области опять-таки с ним мало кто мог поконкурировать. Ваш выпад не по делу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Форт, Фортран и описание языка С
СообщениеДобавлено: Понедельник, 10 Сентябрь, 2007 18:11 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1020
Судя по всему Вы невнимательно меня прочитали. Об опровержении слов Вирта речь не шла. Если же аппелировать, то к тем проблемам, которые испытывают использующие тот или иной синтаксис. Что Вирт и сделал. Жаль, что этим дело и ограничилось.
Цитата:
В отношении Вашей реакции -- меня она, признаюсь, не удивляет. Для меня анализ важнее синтеза, а компилятор я рассматриваю как программу, которая полна ошибок. Основой работы считаю описание языка. В этом и разница в подходах. Для одних важнее закон, для других -- его интерпретация, закрепленная в компиляторе.

Не совсем. Основой работы считаю сформировавшийся подход к ней, а не возможности описываемые языком.
Цитата:
Вы считаете Форт образцом наглядного синтаксиса?

Вы считаете, что здесь об этом уместно говорить? Наглядность синтаксиса Форта зависит от того, кто его использует.
P.S."END" в Фортране уже отменили?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 00:38 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 22:34
Сообщения: 431
Откуда: Москва
GUEST писал(а):
Судя по всему Вы невнимательно меня прочитали. Об опровержении слов Вирта речь не шла. Если же аппелировать, то к тем проблемам, которые испытывают использующие тот или иной синтаксис. Что Вирт и сделал. Жаль, что этим дело и ограничилось.


Возможно, я неправильно Вас понял.

GUEST писал(а):
Цитата:
Вы считаете Форт образцом наглядного синтаксиса?

Вы считаете, что здесь об этом уместно говорить? Наглядность синтаксиса Форта зависит от того, кто его использует.


По-моему, эта фраза справедлива для любого языка программирования.

GUEST писал(а):
P.S."END" в Фортране уже отменили?


Мы вроде бы говорили о точке с запятой. Или я опять не так понял? В Обероне она не является признаком завершения оператора -- это разделитель операторов (причем одного уровня). В Фортране разделителем является новая строка. Хотя, пожалуй, не прав. В ISO Фортране вроде как и точка с запятой используется для разделения операторов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 12:23 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
Руслан Богатырев писал(а):
...В Обероне она не является признаком завершения оператора -- это разделитель операторов (причем одного уровня)...
Руслан, Вам не кажется, что неоднозначность с ';' в Оберон и Модула стоило бы убрать? Т.е. если по определению ';' разделяет операторы, то компилятор должен сигнализировать об ошибке если после нее нет операторов?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 12:33 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9115
Откуда: Россия, Орёл
Просто пустой оператор тоже допускается синтаксисом. WHILE TRUE DO END :-)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 13:49 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1537
Откуда: Беларусь, Минск
slava писал(а):
Руслан Богатырев писал(а):
...В Обероне она не является признаком завершения оператора -- это разделитель операторов (причем одного уровня)...
Руслан, Вам не кажется, что неоднозначность с ';' в Оберон и Модула стоило бы убрать? Т.е. если по определению ';' разделяет операторы, то компилятор должен сигнализировать об ошибке если после нее нет операторов?
Никаких неоднозначностей там нет. А ошибка - это когда между операторами нет разделителя. Разделитель, он для чего нужен? Для разделения. Если после оператора ничего нет, то от чего там отделяться?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 14:32 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 22:34
Сообщения: 431
Откуда: Москва
slava писал(а):
Руслан Богатырев писал(а):
...В Обероне она не является признаком завершения оператора -- это разделитель операторов (причем одного уровня)...
Руслан, Вам не кажется, что неоднозначность с ';' в Оберон и Модула стоило бы убрать? Т.е. если по определению ';' разделяет операторы, то компилятор должен сигнализировать об ошибке если после нее нет операторов?


Насколько я помню, в классической Модуле-2 есть пустой оператор. Соответственно, можно использовать запись ;;;;;;;;
Утрирую, но точку с запятой всегда про запас можно ставить (на всякий пожарный). И это не есть хорошо. В классическом Обероне он сохранен:
Цитата:
StatementSequence = statement {";" statement}.
statement = [assignment | ProcedureCall |
IfStatement | CaseStatement | WhileStatement | RepeatStatement |
LoopStatement | WithStatement | EXIT | RETURN [expression] ].


Как поясняет Вирт: "A statement may also be empty, in which case it denotes no action. The empty statement is included in order to relax punctuation rules in statement sequences". Надо будет еще посмотреть описание Оберона-07, когда оно появится.

В нашем новом языке предполагаю, что правило можно ужесточить. Кстати, не исключаю (будем оценивать различные варианты), что у одного языка будет два разных синтаксиса (при одной семантике). Речь идет о виртовском синтаксисе и о Си-синтаксисе. Идея интересная и стоит над ней помозговать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 14:47 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4255
Откуда: Россия, Орёл
Руслан Богатырев писал(а):
В нашем новом языке предполагаю, что правило можно ужесточить. Кстати, не исключаю (будем оценивать различные варианты), что у одного языка будет два разных синтаксиса (при одной семантике). Речь идет о виртовском синтаксисе и о Си-синтаксисе. Идея интересная и стоит над ней помозговать.

Только не в данной ветке. Отмечу, что мне эта идея не нравится :). Кроме того, модули в Си-синтаксис ввести? :) Ну а если серьёзно в проекте "Странник" три языка Си, Паскаль и Модула-2 сведены к одной семантической базе (Модула-2).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 14:52 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 22:34
Сообщения: 431
Откуда: Москва
Руслан Богатырев писал(а):
А в ответ -- тишина.
Уточняю ссылку на нашу дискуссию: http://pedsovet.org/forum/index.php?sho ... 763&st=205


В отношении дискуссии с Черновым по поводу примеров Вирта в его лекции. Должен признать, что его аргументы меня убедили. Во всех описаниях Си, которые я посмотрел, четко записана норма: что при синтаксическом разборе (слева направо) выбирается лексема с максимально допустимой длиной. Это означает, что примеры Вирта, где используется x+++++y, некорректны, поскольку они разбиваются на лексемы x++ ++ +y, а не x++ + ++y . Впрочем, это не отменяет проблем: правила работы парсера должен держать в голове программист, да и остаются в силе претензии к навороченным выражениям, вроде таких x+++y++==x+++y+1.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 14:57 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 22:34
Сообщения: 431
Откуда: Москва
Борис Рюмшин писал(а):
Кроме того, модули в Си-синтаксис ввести? :)


Под Си-синтаксисом я понимаю не синтаксис языка Си, а Си-подобный. Собственно, модуль там так и будет "module" только в конце не будет end с именем модуля. Всего и делов. Обсудим, конечно еще это внутри группы, но почему бы не приобщать к хорошей семантике тех, для кого привычная одежка мила сердцу? Ну зачем у людей отнимать дорогое? Это негуманно. :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 15:19 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
Борис Рюмшин писал(а):
Кроме того, модули в Си-синтаксис ввести? .
Можно и не писать слово module, а как сделали в D -- file=module.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 17:43 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4255
Откуда: Россия, Орёл
Руслан Богатырев писал(а):
Обсудим, конечно еще это внутри группы, но почему бы не приобщать к хорошей семантике тех, для кого привычная одежка мила сердцу? Ну зачем у людей отнимать дорогое? Это негуманно. :)

Я не про группу, а про то, что это не совсем по теме ветки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 17:48 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
slava писал(а):
Борис Рюмшин писал(а):
Кроме того, модули в Си-синтаксис ввести? .
Можно и не писать слово module, а как сделали в D -- file=module.


Если уж на то пошло, то можно оставить и "include" ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 18:07 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Руслан Богатырев писал(а):
Vlad писал(а):
По-моему все намного проще. Вирт последние n-десятков лет не писал ни на чем кроме своих языков. Поэтому черпать идеи (в том числе и в плане эргономики синтаксиса) и сравнивать ему было не с чем. Опровергните меня, если я не прав.


Опровергнуть несложно. Из первого утверждения "Вирт последние n-десятков лет не писал ни на чем кроме своих языков" не следует второе "Поэтому черпать идеи (в том числе и в плане эргономики синтаксиса) и сравнивать ему было не с чем".


Не следует. Однако и отрицать этого нельзя. Причины для этого есть.

Руслан Богатырев писал(а):
Кроме процесса "писать" ("работать на передачу") существует еще процесс "читать" ("работать на прием"). К сожалению, мы свыклись с мыслью о том, что обогащение идеями подразумевает занятие исключительно процессом написания.


Тоже самое. Нельзя только читать.

Руслан Богатырев писал(а):
Хорошо известно, что Вирт дважды был продолжительное время в Xerox PARC (в середине 1970-х и в начале 1980-х), где знакомился с Mesa и Cedar. Сравнивать ему было с чем.


С чем? В Mesa ключевые слова заглавные (да и вообще синтаксис паскалеподобный). Cedar - потомок Mesa (подозреваю что там та же фигня).

Руслан Богатырев писал(а):
И он немало приобрел от изучения этих разработок. Второго такого специалиста в области языков программирования сыскать трудновато (Вы, кстати, не изучали его язык Euler? Советую посмотреть). По осведомленности в этой области опять-таки с ним мало кто мог поконкурировать. Ваш выпад не по делу.


Я сделал предположение. У тебя есть конкретные факты, чтобы это предположение опровергнуть? Мне не надо программ Вирта, написанных на C++. Просто свидетельство, что Вирт писал на непаскальных языках (последние 10 лет). Возможно его изучение "более других" языков не шло дальше оператора присваивания, после чего на языке ставился крест :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 18:25 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4255
Откуда: Россия, Орёл
Vlad писал(а):
slava писал(а):
Борис Рюмшин писал(а):
Кроме того, модули в Си-синтаксис ввести? .
Можно и не писать слово module, а как сделали в D -- file=module.


Если уж на то пошло, то можно оставить и "include" ;)

Это импорт, а речь идёт про выделение модуля, как сущности.
Ещё раз, кому интересно: http://home.perm.ru/~strannik/

Да, к тому же ещё и полную квалификацию имён забывать не следует. А сишники её не любят :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 18:45 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Борис Рюмшин писал(а):
Это импорт, а речь идёт про выделение модуля, как сущности.


А. Ну тогда все еще проще. Имя файла соответствует имени модуля. Надо Вирту намекнуть, глядишь еще одним ключевым словом в Обеороне меньше будет :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 19:35 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
Vlad писал(а):
Борис Рюмшин писал(а):
Это импорт, а речь идёт про выделение модуля, как сущности.
А. Ну тогда все еще проще. Имя файла соответствует имени модуля. Надо Вирту намекнуть, глядишь еще одним ключевым словом в Обеороне меньше будет :)
В D наверное так и сделано, для C'шников -- это уже большой "прорыв".
Но разумеется предложение "как в D" -- полу серьёзное.

Одна проблема с case-sensitive идентификаторами -- в Windows-подобных системах.
Другая -- путаются две сущности file и module.
Переименовал файл -- вот тебе и новый модуль!

Не в курсе как в D решают эти проблемы, если вообще...

Возвращаясь к Оберонам, не думаю, что у Вирта была цель экономить на зарезервированных словах, скорее -- на лексемах и то, если они приводят к не ортогональности или к переизбытку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Вторник, 11 Сентябрь, 2007 19:57 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
Vlad писал(а):
...Вирт писал на непаскальных языках (последние 10 лет). Возможно его изучение "более других" языков не шло дальше оператора присваивания, после чего на языке ставился крест :)
Не буду отвечать за Вирта, но уверен, что по настоящему, специалисту достаточно просмотреть наугад пару страниц спецификации, что бы понять, какие проблемы заложены в язык. Каждый человек так делает в той или иной хорошо ему знакомой области: менеджерам достаточно 5 секунд на просмотр резюме, что бы выкинуть его в корзину, учителям -- на просмотр домашних работ, что бы понять ученик въехал в тему или нет. Можно очень долго продолжать.

Есть и в Computer Science область исследования: "Locally testable error correcting codes" -- как по небольшому количеству информации (несколько бит) квалифицировать целый объект (содержащий сотни байт) и угадать с большой (и достаточной) вероятностью.

Я это к чему, не знаю специалист или нет Вирт по С++, но уверен он имеет достаточное представление о многих языках в том числе и о не модульных, что бы здраво судить и о тех и о других.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 74 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB