OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: #042 Поправка в StdFolds
СообщениеДобавлено: Суббота, 28 Ноябрь, 2020 15:40 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Коллеги,

в стандартном каркасе тип StdFolds.Fold объявлен как нерасширяемый, а тип StdFolds.Directory - как абстрактный. Получается, невозможно сделать альтернативную реализацию складок, но альтернативную директорию - можно.

Предлагаю сделать, как принято в других местах каркаса:

Fold* = POINTER TO ABSTRACT RECORD...END;
StdFold = POINTER TO RECORD (Fold) ... END;

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поправка в StdFolds
СообщениеДобавлено: Воскресенье, 29 Ноябрь, 2020 13:39 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Поддерживаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Пятница, 22 Январь, 2021 00:08 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Я попытался было наскоком поменять интерфейс StdFolds.Fold. Сделать его абстрактным и со стандартной реализацией. Оказалось, это возможно ценой потери совместимости со ВСЕМИ существующими документами!!! Ведь из odc читается StdFolds.Fold. В документе старый Fold, а в памяти ЭВМ - другой (новый) модуль с абстрактным Fold и конкретным StdFold. (По ходу дела обнаружилась брешь в защите где-то в Stores: обычными средствами невозможно создать экземпляр абстрактной записи; но Stores преспокойно таковой создавал.) Так вот, в документе-контейнере записан экземпляр StdFOlds.Fold^, модуль Stores создает пустой экземпляр такового. А в "новом" мире не должно быть переменных StdFolds.Fold^, должны быть StdFolds.StdFold^. Но взяться им неоткуда: при загрузке Stores уже создал переменную типа StdFolds.Fold, и переделать ее в StdFolds.StdFold невозможно; можно новую создать нужного типа, но как сообщить Stores, что теперь нужно ее использовать?
Поскольку терять совместимость со ВСЕМИ документами я был не готов, пришлось довольствоваться менее общим решением - я просто под свои нужды переделал функциональность StdFolds.Fold, оставив их без абстрактного базового класса.
Но какое обобщенное решение предложить? Ума не приложу.
(Я пробовал схитрить: назвал базовый тип StdFolds.BaseFolds, а конкретное расширение - просто StdFolds.Fold, в надежде, что Stores создаст экземпляр нужного типа. Не тут то было: здесь защита сработала: в контейнер записывается не просто имя типа, а вся его "генеалогия" - все базовые типы по порядку. И моя хитрость не прошла)

При этом, в архитектуру ББ заложена всем нам известная возможность для версионной миграции: если бы изначально StdFolds.Fold был абстрактным, то в файлы-контейнеры записывался бы экземпляр StdFolds.StdFold с номером версии, и более новые версии модулей могли бы легко прочесть старые версии данных и адаптировать их.

Но вот для предпринятой мной версионной миграции неабстрактного интерфейса в ББ средств не оказалось. Я даже затрудняюсь как-то классифицировать этот случай...
Вот есть процедура (s: Store) ExternalizeAs. Быть может, что-то типа InteralizeAs... Но как быть с гарантиями читателю?..

С другой стороны, может, это и правильно? Ведь если меняются интерфейсы некоего компонента, то его клиенты должны быть, по крайней мере, перекомпилированы. Но я перекомпилировал весь ББ с новым абстрактным интерфейсом складок...

Одним словом, непонятно, как "провернуть" такую миграцию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Пятница, 22 Январь, 2021 01:49 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Похоже, что вам надо делать свою новую реализацию расширяемых складок, и забыть про совместимость, раз уж её тут не заложили.
Сделайте функцию, которая будет проходить по документу и заменять стандартные вкладки на ваши расширяемые.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Пятница, 22 Январь, 2021 10:25 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
А никакой разницы, делать расширение типа или полностью новый тип. В любом случае потеряется совместимость со ВСЕМИ существующими документами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Пятница, 22 Январь, 2021 10:40 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Для Stores нужно доработать какое-то решение, когда настраиваются фабрики для имён типов для создания при загрузке.
Что-то такое нужно.
Уже натыкались не раз на то, что в этом месте он "докомпонентный" остался (пришёл из периода до перевода ББ на паттерны с фабриками и реализациями).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Пятница, 22 Январь, 2021 14:53 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Александр Ильин писал(а):
Похоже, что вам надо делать свою новую реализацию расширяемых складок, и забыть про совместимость, раз уж её тут не заложили.
Сделайте функцию, которая будет проходить по документу и заменять стандартные вкладки на ваши расширяемые.

Да, это я тоже рассматривал. Но что если игла в яйце, яйцо в утке, утка в зайце, заяц в чемодане, а чемодан - это контейнер odc? И все они в то же время - черные ящики?

Т.е. кмк такое решение в ряде частных случаев подойдет, но не как общее решение для миграции версий в системе с компонентами-черными ящиками.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Пятница, 22 Январь, 2021 17:16 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В принципе, объекты-расширения Stores всегда готовы к созданию через NEW и дальнейшей загрузке из потока.

Достаточным представляется решение, когда есть конфигурация соответствия - имя типа в файле => имя реального типа, который инстанциируется модулем Stores как альтернативная реализация.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Пятница, 22 Январь, 2021 17:20 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Не так страшно, если в какой-то момент придется перекодировать файлы, тогда и складки заменить на новые. Ведь и формат текстовых файлов желательно улучшить. Пробелы хранятся как отдельные куски в русских/юникодных текстах.
Всё равно надо сделать какой-то инструмент для миграции.
1.5->1.8
1.6->1.8
1.7->1.8
Чтобы не только складки заменились, но и замены в коде для некоторых процедур.
Strings.Upper -> Unicode.Upper
и др.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Пятница, 22 Январь, 2021 18:25 
Аватара пользователя

Зарегистрирован: Воскресенье, 09 Декабрь, 2018 15:14
Сообщения: 113
Откуда: Equestria
Как насчет того что бы Fold оставить для совместимости (загрузки из доккумента) и создать в дополнение новый абстрактный тип, который уже будет создаваться для новых документов?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Пятница, 22 Январь, 2021 21:11 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Илья Ермаков писал(а):
Уже натыкались не раз на то, что в этом месте он "докомпонентный" остался (пришёл из периода до перевода ББ на паттерны с фабриками и реализациями).

Как раз не "остался", а наоборот. В Обероне в документе записывается имя процедуры-генератора, а она сама решает, какого типа объект создать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Пятница, 22 Январь, 2021 21:17 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну я имел в виду не в плане "от Оберона".

Stores имеет внутри много хвостов ещё от системы типов Oberon-2, т.е. он очень древний в самом ББ.
А ББ не сразу был по всем паттернам выстроен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Пятница, 22 Январь, 2021 21:45 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Ну вот эту схему специально для ББ придумали. Может, это и есть компонентность: вот вам чёрный ящик, пользуйтесь на здоровье, а расширять его нечего?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #042 Поправка в StdFolds
СообщениеДобавлено: Понедельник, 25 Январь, 2021 02:34 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Решение
1) Сделать отдельную версию новых "правильных" складок с сохранением старой "неправильной", это обеспечит совместимость для "старых" документов.
2) "Неправильная" должна себя выгружать себя через ExternalizeAs как "новая", это обеспечит постепенную миграцию при сохранении документов.
Дополнительно можно сделать общую тулзу, которая проходит данному каталогу и пересохраняет все документы. Она обеспечит миграцию всех документов сразу для тех, кому надо.

P.S. Есть еще способ преобразования -- настраиваемый внешний конвертор для Stores. Он позволяет организовывать миграцию при пересохранении независимо от вьюшек.
https://oberoncore.ru/library/temir_pre ... dokumentov


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

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


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

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


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

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