OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 22:38

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




Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: B01: HostFiles.NewWriter
СообщениеДобавлено: Суббота, 18 Ноябрь, 2017 10:34 

Зарегистрирован: Суббота, 24 Август, 2013 08:57
Сообщения: 81
I recommend to cancel the change in HostFiles.NewWriter and use the original version.

Why? See discussion at
http://forum.blackboxframework.org/view ... riter#p708

Add instead in HostFiles

PROCEDURE (f: File) Closed(): BOOLEAN;
BEGIN
RETURN f.state = closed
END Closed;

PROCEDURE (f: File) Shared(): BOOLEAN;
BEGIN
RETURN f.state = shared
END Shared;

and add in Files

PROCEDURE (f: File) Closed* (): BOOLEAN, NEW, ABSTRACT;
PROCEDURE (f: File) Shared* (): BOOLEAN, NEW, ABSTRACT;

- Helmut


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Воскресенье, 19 Ноябрь, 2017 16:08 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
The B01 is error correction corresponding to original interface, but extenting Files interface is a feature.

There is a way to introduce this feature by adding new procedures & leave existing unchanged.

Add in Files to get the File state.
PROCEDURE (f: File) Closed* (): BOOLEAN, NEW, ABSTRACT;
PROCEDURE (f: File) Shared* (): BOOLEAN, NEW, ABSTRACT;
or
PROCEDURE (f: File) State* (): SET, NEW, ABSTRACT; ?

And leave File.NewWriter unchanged.
You can't write to the file which is trapping with NewWriter. You can't write to the file which is returning NIL-writer similary (NIL deref trap when accessing the wirter).

Цитата:
By checking the return value NIL you cannot see if the file is writable or not.
Why? Because if the system is running out of memory it also returns NIL when you call NEW.
And this is not correct. When the System returns out of memory NIL you shall get a NIL deref trap in NewWriter accessing w fields.
Код:
         IF (old # NIL) & (old IS Writer) THEN w := old(Writer) ELSE NEW(w) END;
         IF w.base # f THEN <-- here


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
One more decision. Such Files.File interface change requires rewriting all extensions (not only HostFiles.File) and recompiling all clients.
This is serious price. But we don't need nor Shared() nor Closed() at all, for example.

Do you have an examples using such file state request, Helmut?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Понедельник, 20 Ноябрь, 2017 12:58 

Зарегистрирован: Суббота, 24 Август, 2013 08:57
Сообщения: 81
My aim is to minimize the difference between Core, Center and CPC version. I realize there are different opinions. Now I have to decide which way to follow.
The current CPC version here is equal to the Center way. But I think your arguments are better and I will change the CPC edition to the Core solution.
That means I will change procedure NewWriter as you have done and delete the procedure Shared & Closed.


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Thank you, Helmut.

Now I see this correction made at 2015 and it's present in all 1.7 versions.

Код:
compiling "ipuiK86"
  Closed not implemented in File^
  Shared not implemented in File^
compiling "ipuiK128"
  Closed not implemented in File^
  Shared not implemented in File^
This is an amazed and important fact.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Среда, 22 Ноябрь, 2017 00:27 

Зарегистрирован: Суббота, 24 Август, 2013 08:57
Сообщения: 81
Yes, it is a compatibility problem. Adding Closed and Shared means recompiling all subsystem and linking.
But this works only when you first link BlackBox, second recompile all module, third link BlackBox again. Otherwise link BlackBox doesn't work. Also all application subsystem outside BlackBox must be recompile.
The question is to be compatible with Center or not?


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Zinn писал(а):
Also all application subsystem outside BlackBox must be recompile.
The question is to be compatible with Center or not?
And all file implementations outside BlackBox must be rewritten to include unnecessary Closed() & Shared(). As ipuiK86 & ipuiK128, for example.

We are thinking that the compatibility with Center is not a dogma. Therefor we maintaining OberoCore assembly for our own work.
http://oberoncore.ru/en/blackbox/oberon ... l_position


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Четверг, 23 Ноябрь, 2017 10:18 

Зарегистрирован: Суббота, 24 Август, 2013 08:57
Сообщения: 81
I have both version running and document the difference in B01-en
The Core changes are in green lines and the Center changes are in red lines.
How to improve this document?

Cpc-Edition 1.7.1711 build 154 uses the Center solution of B01
CPC-Edition 1.7.1711 build 155 uses the Core solution of B01

everything else is the same state and equivalent to Center Edition 1.7.1

Nothing is uploaded to CPC, but if you would like to have them for testing I can do it.


Вложения:
Комментарий к файлу: Draft of english documentation of B01
B01-en.odc [28.25 КБ]
Скачиваний: 983
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Воскресенье, 26 Ноябрь, 2017 17:20 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Zinn писал(а):
I have both version running and document the difference in B01-en
The Core changes are in green lines and the Center changes are in red lines.
How to improve this document?
I see the description of another solution. This is an improvement to have it in any delta.

But there is one detail. You change set description are based on another base set of documents.
OberonCore deltas Base = Ominc BlackBox or "Standard" (as we call) BlackBox.
But your change set describes Files64 changes, etc.

So, what do you mean with "improve", Helmut?

I can put you translation to our repository & include you description into main B01 doc.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: B01: HostFiles.NewWriter
СообщениеДобавлено: Понедельник, 27 Ноябрь, 2017 13:04 

Зарегистрирован: Суббота, 24 Август, 2013 08:57
Сообщения: 81
Sorry, improve is wrong word. I mean, I add some infos to the description and you may correct it in the way as you like.
But before you do that, please download the latest version of B01-en from http://www.zinnamturm.eu/downloads.htm
It would be nice when you insert it into your change folder.

Well, normally the change description should be based on BlackBox 1.6. That you have done in the first part of B01-en. Here I add to B01-en the documentation about the different solution between Core and Center. You may add some words why we prefer the Core solution.


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Цитата:
According to the specification (System/Docu/Files) in case of read-only files (shared) NewWriter should return NIL. The current implementation, however, generates a TRAP.

Then you open the file in shared mode with Files.dir.Old(), the file have an read-only property (or it is "immutable" as in specification).
But the reverse isn't true. The file with read-only property may be created by Files.dir.Old(), may be not.

Or one can say that for one specification you can have many implementations. So:
Цитата:
The Oberon Core solution (B01, green lines below) aligned the implementation (HostFiles) with the specification (Files).

The Center solution (Issue-#22, red lines below) aligned the specification (Files) with the implementation (HostFiles)...

I made some corrections to B01-en & upload it with change-list archive.


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Товарищи, поделитесь опытом, пожалуйста.

Есть у кого-то реальные задачи, в которых проверяется состояние файла "только чтение" (f.NewWriter() = NIL) по эталонной документации.
Код:
IF f.NewWriter() = NIL THEN .... ELSE .... END


Существуют ли задачи для которых требуется проверять, что передан невалидный закрытый файл?
Код:
IF Закрыт(f) THEN .... ELSE .... END


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Нашел одно применение метода Closed() в модуле Stores64 сборки BBCP, надо полагать, из сборки Центра.
Код:
   PROCEDURE NewSegment* (container: Files64.File; org: LONGINT): Files.File;
      VAR seg: Segment;
   BEGIN
      ASSERT(container # NIL, 20);
      ASSERT(~container.Closed(), 21);
При создании обертки над файлом выполняется проверка -- не закрыт ли он.

Исходя из этой логики, проверку Closed() нужно делать перед каждой операцией с файлом (он же мог закрыться), а проверку Shared() перед каждой записью, ведь файл мог переключиться в режим "только чтение".
PROCEDURE (f: File) Closed (): BOOLEAN,
PROCEDURE (f: File) Shared (): BOOLEAN,
NEW, ABSTRACT;
Returns the information about file state.

По-моему, такой подход -- это перебор. Для чего еще могут быть нужны Closed() и Shared()?


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Надо проверять там, где такое потенциально возможно. А таких мест не много. Они проявляются, когда срабатывает например ASSERT записи в закрытый файл. Вот в это место и надо ставить проверку, чтобы корректно отработать исключение. Или если даже теоретически возможно такое поведение файла, не дожидаясь аварийной остановки. Как уже обсуждали, при работе с внешними для модуля файлами, чьё состояние контролируется вне модуля. Но честно признаюсь, в моих задачах такой необходимости пока не возникало. Обычно в практике работа с файлами тривиальна и проверок не делаю.


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

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Вот именно, что на практике подобных задач не возникает. Интерфейс излишен.


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

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

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


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Из своей практики приведу цену изменения базового интерфейса.

Изучаю вопрос переноса разработок со сборки Оберонкоре на сборку BBCP.

У меня шесть модулей со спецреализациями Files. В них как бы не сложно добавить по паре процедур-затычек. Но мне надо сохранить собираемость имеющегося софта и его работоспособность на старой платформе, как минимум на переходной период. Т.е. я не могу просто взять и поменять, я должен снять копии.

Дальше -- больше. Эти 6 модулей используются в почти ста (это не считая тестовых) модулях. Используются посредством прямого импорта, поскольку при их написании никто не рассчитывал на изменение такого базового интерфейса как Files.В этих модулях, как минимум, придется поставить селекторы (чтобы не делать копий и с них).

Потом надо будет переписывать сборочные команды.

И все это ради чего? Ради одного ASSERT-а в Stores64?


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

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

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

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


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Иван Денисов писал(а):
Так как для чего-то ввели тогда NIL в качестве возврата вместо аварийной остановки.
Его ввели Оминки задолго до нас, когда проектировали интерфейс Files.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Полезно иногда такое сделать. Вот заметил, что надо раз в 2-3 года переустанавливать сервер, чтобы просто не забыть как это делается. Переход на одной версии среды на другую заставляет подумать и об архитектуре проектов, какие есть зависимости.


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

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


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

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


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

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