OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 15 Октябрь, 2019 02:12

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




Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 15:28 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2389
Евгений Темиргалеев писал(а):
Иван Денисов писал(а):
Так как для чего-то ввели тогда NIL в качестве возврата вместо аварийной остановки.
Его ввели Оминки задолго до нас, когда проектировали интерфейс Files.

И потом отказались от такого интерфейса. Это мы тоже обсуждали. Документацию не успели подправить. История изменений была изучена.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 15:30 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2389
Борис Рюмшин писал(а):
Иван Денисов писал(а):
Борис Рюмшин писал(а):
Вот именно, что на практике подобных задач не возникает. Интерфейс излишен.

Противоречите сами себе. Так как для чего-то ввели тогда NIL в качестве возврата вместо аварийной остановки. Значит аварийная остановка таки случалась. Мы можем по кругу это обсуждать каждый год :) Хорошая традиция.

Я ни в чём не противоречу.

Борис вы говорите, что такое никогда не возникало. Но сами сделали, чтобы Files.NewWriter возвращал NIL. Зачем? А потому что Илья говорил, что были падения из-за АВОСТОВ. Поэтому надо было делать обработку исключений, чтобы проверять NIL или не NIL после создания Writer. А раз были случаи, то значит на практике такие задачи возникают. Вот и получается противоречие.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 15:39 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4313
Откуда: Россия, Орёл
Соответствие спецификации не может быть противоречием. Это раз.
У Ильи случаются специфические случаи. Это два.
Кому проект один поправить, а у нас довольно большой отработанный и протестированный набор, который используется в разных проектах. Архитектурно для себя мы это исправим чуть позже, просто задействовав свою реализацию файлов с другим интерфейсом, не совместимым с ББ. Но, боюсь, следующее наше изделие, которое сейчас заменит сборку OberonCore, будет всё также содержать отличия от того, что сделано в Центре. Не мы рушим совместимость в данном случае, а они.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 17:06 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2389
Борис Рюмшин писал(а):
Соответствие спецификации не может быть противоречием.

Ещё раз. Документация отстала от изменений. Так что этот аргумент не работает.
Документацией был КОД, он был первичен в этом случае. В коде был АВОСТ, который было невозможно обойти. Для обхода были сделаны Closed и Shared. "Ни шагу назад!" - вот такой был лозунг. Вот так и в Центре пообсудили. Есть резон в таком изменении, чтобы был АВОСТ там. Чтобы найти ошибку как можно раньше. Есть такой принцип. Он общий для программирования, если я правильно понимаю. Оминк его туда вернули АВОСТ. Почему вернули, кто из знает... Ну и центр решил не идти против течения. Я это обсуждение помню и на форуме оно там зафикисировано.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 17:14 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4313
Откуда: Россия, Орёл
Мы пока остаёмся при своём мнении по этому вопросу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 17:16 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4313
Откуда: Россия, Орёл
Иван Денисов писал(а):
В коде был АВОСТ, который было невозможно обойти. Для обхода были сделаны Closed и Shared.

Ну и, конечно, изменение базового интерфейса, чтобы обойти АВОСТ это сильное решение. Волевое.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 18:48 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2389
Борис Рюмшин писал(а):
Иван Денисов писал(а):
В коде был АВОСТ, который было невозможно обойти. Для обхода были сделаны Closed и Shared.

Ну и, конечно, изменение базового интерфейса, чтобы обойти АВОСТ это сильное решение. Волевое.

При переходе от 1.6 к 1.7 базовый интерфейс в сборке много где поменялся и в ядре и в других модулях. Поэтому все проекты подлежат перекомпиляции. В данном случае особое неудобство, что вы хотите продолжать в своих расширениях поддерживать обе версии и 1.6 и 1.7. Вот так действительно сложно. Но как вы хотели при переходе от 1.6 к 1.7 я не очень понимаю. Чтобы всё осталось как в 1.6... странное желание.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 18:50 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2389
При том, что в Блэкбоксе как раз неплохо абстрагирован Files, и никто не мешает сделать копии модулей и линковать их соответственно для разных платформ 1.6 или 1.7. Вот селекторы как раз не очень хорошо использовать. Лучше бы без них обходиться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 18:52 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2389
Борис Рюмшин писал(а):
Мы пока остаёмся при своём мнении по этому вопросу.

А какое тут может быть мнение, если это факт. Есть история кода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 21:17 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4313
Откуда: Россия, Орёл
Иван Денисов писал(а):
Борис Рюмшин писал(а):
Мы пока остаёмся при своём мнении по этому вопросу.

А какое тут может быть мнение, если это факт. Есть история кода.

Иван, ты отказываешь нам в праве иметь собственное мнение?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 21:27 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4313
Откуда: Россия, Орёл
Ладно. Суть в том, что у нас этого изменения не будет. Во всяком случае пока.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 09 Октябрь, 2019 21:34 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2389
Борис Рюмшин писал(а):
Иван Денисов писал(а):
Борис Рюмшин писал(а):
Мы пока остаёмся при своём мнении по этому вопросу.

А какое тут может быть мнение, если это факт. Есть история кода.

Иван, ты отказываешь нам в праве иметь собственное мнение?

А по какому вопросу мнение? А то там не совсем понятно. Я пишу про историю кода и отвечал на вопрос про "соответствие спецификации". Может тут ты про общую тему написал, поэтому не совсем понял по какому вопросу мнение. По истории кода не может быть мнения, так как существует фактическая история изменений, где видно, что документация не была изменена следом за измененным кодом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Четверг, 10 Октябрь, 2019 00:51 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4509
Откуда: Россия, Орёл
Иван Денисов писал(а):
При том, что в Блэкбоксе как раз неплохо абстрагирован Files, и никто не мешает сделать копии модулей и линковать их соответственно для разных платформ 1.6 или 1.7. Вот селекторы как раз не очень хорошо использовать. Лучше бы без них обходиться.

Иван, делать копии 100 модулей -- это не вариант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Четверг, 10 Октябрь, 2019 01:22 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4509
Откуда: Россия, Орёл
Иван Денисов писал(а):
По истории кода не может быть мнения, так как существует фактическая история изменений, где видно, что документация не была изменена следом за измененным кодом.
Как из того, что изменение не было сделано, следует, что его должны были сделать именно так, как сделали в Центре?

Берем оригинальный код.
Код:
   PROCEDURE (f: File) NewWriter (old: Files.Writer): Files.Writer;
      VAR w: Writer;
   BEGIN   (* portable *)
      ASSERT(f.state # closed, 20); ASSERT(f.state # shared, 21);
      ...

Первое предусловие 20 прописано в оригинальной документации File.Close: "The file f and the riders operating on file f are not valid anymore after closing f, i.e., no more file or rider operations may be performed on it".

Оминки могли забыть прописать это предусловие для NewWriter аналогично: "Если файл только для чтения, то вызов NewWriter -- недопустимая операция".

Это выглядит логичнее введения Shared() и Closed(), которые, как практика Центра на примере Stores64, используются для того, чтобы генерировать тот же трап на один уровень выше, т.е. не непосредственно в реализации Files, а в клиенте:
Код:
   PROCEDURE (this: Segment) NewWriter (old: Files.Writer): Files.Writer;
      VAR segWr: SegmentWriter;
   BEGIN
      ASSERT(~this.Closed(), 20); <--- здесь
      ASSERT(~this.Shared(), 21); <--- или здесь
      IF (old # NIL) & (old IS SegmentWriter) THEN segWr := old(SegmentWriter) ELSE NEW(segWr) END;
      IF segWr.base # this THEN
         segWr.base := this;
         segWr.wr := this.container.NewWriter(NIL); <<---- а не здесь

И тут я возвращаюсь к своему исходному вопросу (viewtopic.php?p=108957#p108957). Все пользователи ББ1.7 непротиворечиво используют новые методы Shared и Closed по этой логике и перед использованием файлов ставят эти проверки в своем клиентском коде? Или их никто не ставит, рассчитывая на АВОСТ-защиту от логических ошибок непосредственно в модулях реализации файлов? Т.е. по факту доказывают избыточность Shared и Closed, поскольку других примеров применения ни у кого пока не нашлось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Четверг, 10 Октябрь, 2019 03:28 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2389
Евгений Темиргалеев писал(а):
Иван Денисов писал(а):
По истории кода не может быть мнения, так как существует фактическая история изменений, где видно, что документация не была изменена следом за измененным кодом.
Как из того, что изменение не было сделано, следует, что его должны были сделать именно так, как сделали в Центре?

Берем оригинальный код.
Код:
   PROCEDURE (f: File) NewWriter (old: Files.Writer): Files.Writer;
      VAR w: Writer;
   BEGIN   (* portable *)
      ASSERT(f.state # closed, 20); ASSERT(f.state # shared, 21);
      ...

Первое предусловие 20 прописано в оригинальной документации File.Close: "The file f and the riders operating on file f are not valid anymore after closing f, i.e., no more file or rider operations may be performed on it".

Оминки могли забыть прописать это предусловие для NewWriter аналогично: "Если файл только для чтения, то вызов NewWriter -- недопустимая операция".


Формулировка в документации может быть уточнена, если об этом разговор.

Евгений Темиргалеев писал(а):
Это выглядит логичнее введения Shared() и Closed(), которые, как практика Центра на примере Stores64, используются для того, чтобы генерировать тот же трап на один уровень выше, т.е. не непосредственно в реализации Files, а в клиенте:
Код:
   PROCEDURE (this: Segment) NewWriter (old: Files.Writer): Files.Writer;
      VAR segWr: SegmentWriter;
   BEGIN
      ASSERT(~this.Closed(), 20); <--- здесь
      ASSERT(~this.Shared(), 21); <--- или здесь
      IF (old # NIL) & (old IS SegmentWriter) THEN segWr := old(SegmentWriter) ELSE NEW(segWr) END;
      IF segWr.base # this THEN
         segWr.base := this;
         segWr.wr := this.container.NewWriter(NIL); <<---- а не здесь

И тут я возвращаюсь к своему исходному вопросу (viewtopic.php?p=108957#p108957). Все пользователи ББ1.7 непротиворечиво используют новые методы Shared и Closed по этой логике и перед использованием файлов ставят эти проверки в своем клиентском коде? Или их никто не ставит, рассчитывая на АВОСТ-защиту от логических ошибок непосредственно в модулях реализации файлов? Т.е. по факту доказывают избыточность Shared и Closed, поскольку других примеров применения ни у кого пока не нашлось.

Shared() и Closed() необходимы для возможности правильно обработать исключения. Это необходимо математически. Система должна иметь механизмы обработки всех аварийных остановок. Либо надо было выносить переменную state на абстрактный уровень, и делать её чтение/запись доступным. И требовать от реализаций правильно работать с этой переменной. Либо ввести процедуры для мониторинга состояния этой переменной внутри реализации. Второй вариант лучше первого. Более безопасный. Это и было сделано.
А то, что используется редко, это уже другой вопрос. Но эта возможность обойти NewWriter, когда его выполнение невозможно, просто необходима!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Четверг, 10 Октябрь, 2019 05:20 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2389
Теорема :)

Если фреймворк поддерживает принципы контрактного программирования, то обязаны существовать интерфейсы для проверки всех предусловий вызова процедуры. Если существует хотя бы одно предусловие процедуры, которое невозможно проверить перед её вызовом, то фреймворк не поддерживает принципы контрактного программирования.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Четверг, 10 Октябрь, 2019 09:50 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4509
Откуда: Россия, Орёл
Иван Денисов писал(а):
А то, что используется редко, это уже другой вопрос. Но эта возможность обойти NewWriter, когда его выполнение невозможно, просто необходима!
Вопрос стоит как раз о том, что статистически это вообще не используется. О том, что теоретические рассуждения, которыми обосновали создание несовместимости в интерфейсе, оторваны от реальности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Четверг, 10 Октябрь, 2019 09:52 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2389
Евгений Темиргалеев писал(а):
Иван Денисов писал(а):
А то, что используется редко, это уже другой вопрос. Но эта возможность обойти NewWriter, когда его выполнение невозможно, просто необходима!
Вопрос стоит как раз о том, что статистически это вообще не используется. О том, что теоретические рассуждения, которыми обосновали создание несовместимости в интерфейсе, оторваны от реальности.

Не оторваны, так как изначально обсуждение было вызвано прецедентом на производстве у Ильи. Мы ходим по кругу. Есть необходимость обходить АВОСТ. Поэтому и вы ввели NIL. А вовсе не из-за документации. Обойти ASSERT можно двумя путями. Удалить его. Или добавить в интерфейс средства проверки. От удаления отказались по принципу раннего выявления ошибки. Также исходные коды показали логику работу Оминк над этим вопросом, то это еще больше подкрепило, что удалять ASSERT не стоит. Поэтому интерфейс был расширен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Четверг, 10 Октябрь, 2019 10:04 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4509
Откуда: Россия, Орёл
Ермаков -- единственный, кто давным давно наткнулся на АВОСТ и поднял тему, предложив исправление для приведения реализации в соответствие с документацией. Он действовал логично, опираясь на тезис о правильности документации. Но если исходить из тезиса о неправильности документации, то еще надо доказать, что Ермаков не нашел бы решения соответствующего правильной. Потому что реальных примеров и у него сейчас нет.

И у других нет. Я же не просто так спрашивал выше.

А примеры призводственной необходимости, которые подтверждают обоснованность требования не ломать интерфейс есть. Как и свидетельства того, что нововведения избыточны.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Четверг, 10 Октябрь, 2019 10:12 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9147
Откуда: Россия, Орёл
Тут дело в том, что снять авост (привести в соответствие с документацией) - это ослабить предусловие. Это не рушит обратную совместимость!
И я практически уверен, что никто из разработчиков на ББ не полагался на авост как на часть штатного поведения в своих системах.

Поэтому снять его было вполне логичным, обратно совместимым решением, убирающим ещё проблему невозможности заранее узнать, доступен ли файл для записи или нет.

А менять интерфейс типа - это несовместимое изменение интерфейса.
И снятие каких-то признаков файла тогда уже стоило бы делать обходными путями (некая процедура Files.HandleMsg и подключаемые хуки от реализаций и т.п.).


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

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


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

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


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

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