OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Суббота, 31 Декабрь, 2016 22:15 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Наверное, туплю (как Ронда сёдни утром), но если они практически одинаковые, то в чём проблема поддержки?
А если проблема-таки есть, то два модуля достаточно сильно разные -- и как тогда вы запихнёте их в один?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Вторник, 03 Январь, 2017 17:58 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 220
Откуда: Питер
Проблема известная - дублирование кода. Если в одном модуле исправил какую-нибудь мелочь, надо не забыть это сделать и в другом. Даже с простым копи-пастом это неудобно и потенциально черевато ошибками (как и любая деятельность вручную). Да и редко дело ограничивается простым копи-пастом - обычно ещё необходимо контролировать импорт модулей: вещественный модуль импортирует другие вещественные модули, комплексный, соответственно, - комплексные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Вторник, 03 Январь, 2017 18:24 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Среда, 04 Январь, 2017 00:51 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 220
Откуда: Питер
Нет, если методы решения одинаково хорошо пригодны для обоих вариантов. Рассмотрим, например, решение системы линейных уравнений методом Гаусса. Что там проверять на предмет возможной разницы? По той же причине мои модули для решения параболических уравнений отличаются друг от друга где-то в 20 строках из 900.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Среда, 04 Январь, 2017 01:05 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Среда, 04 Январь, 2017 17:37 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В ББ можно сделать Selector с вариантами этого TYPE - и потом команду компиляции обоих вариантов. На выходе будут два модуля YyXxxxReal и YyXxxxComp.

Отсюда вопрос: что более просто и перспективно - введение обобщёнки в язык/компилятор или её инструментальная поддержка выше?
Или ещё давешние "умные макросы" (что, в принципе, уже ближе к генерационному метапрограммированию?)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Среда, 04 Январь, 2017 17:52 
Модератор
Аватара пользователя

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

Имеем основной модуль и настроечный модуль:

Код:
MODULE MyContainerGStd;

   CONST
      pageSize* = 1024;

   TYPE
      Elem* = ANYPTR;

END MyContainerGStd.


MODULE MyContainerStd;
  IMPORT G := MyContainerGStd;

  .... реализация контейнера ....

END MyContainerStd.



Таким образом, откомпилировав два модуля, получим в итоге MyContainerStd, пригодный для хранения ANYPTR и с размером страницы 1024.

Хотим что-то другое - делаем другой вариант настроечного модуля (например, для конкретного приложения):

Код:
MODULE AppContainerGFig;
  IMPORT GStd := MyContainerGStd,
    AppTypes;

  CONST
    pageSize* = GStd.pageSize;

   TYPE
      Elem* = AppTypes.Figure;

END AppContainerGFig.


И дальше нужна умная команда компилятора:
(!)xxxCompiler.GCompile AppContainerFig := MyContainerStd(MyContainerGStd := AppContainerGFig)

Модуль AppContainerFig будет порождён путём компиляции исходника MyContainerStd, при подмене импорта GStd на GFig.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Четверг, 05 Январь, 2017 00:47 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 220
Откуда: Питер
Да, селекторы могут подойти. В принципе, может они даже окажутся лучше родовых модулей, т.к. ими явно контролируется не только типизация, но и реализация модулей (та малая часть, которая различается для вещественных и комплексных модулей).

В ББ селекторы можно применять только в пределах одного модуля, или можно одним селект-идентификатором преключать сразу несколько модулей (или целую подсистему)?

'Или ещё давешние "умные макросы"' - это про что?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Четверг, 05 Январь, 2017 01:15 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Кажется, эти ваши generics вообще недостойны обсуждения. Особенно после эпичных выяснений в контексте языка Go нарот продемонстрировал, что "теория" дженериков в головах людишек укладывается в "пусть компилятор за нас код генерирует". В Go нет и не нужны. А уж в Обероне точно не нужны.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Четверг, 05 Январь, 2017 10:51 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
GameHunter писал(а):
В ББ .. можно одним селект-идентификатором преключать сразу несколько модулей (или целую подсистему) ...
Какие проблемы. Все интерфейсы торчат.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Четверг, 05 Январь, 2017 11:44 
Модератор
Аватара пользователя

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

В принципе, разные параметрические модули можно компилировать и текущим компилятором (держите себе в своём AppContainerGFig модуль с именем MyContainerGStd - да и всё). Но вот откомпилировать основной модуль с другим именем сейчас компилятор не сможет. А там имя участвует и в фингерпринтах сущностей, и т.п. Так что просто переименованием кодового\символьного файлов не обойтись.

Можно сделать отдельную команду AlterModName, которая до компиляции в исходнике заменяет имя на указанное.
Это если не трогать компилятор.
А потом возвращать старое (чтоб системе контроля версий не дурить голову изменениями).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Четверг, 05 Январь, 2017 11:50 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Пётр Кушнир писал(а):
Кажется, эти ваши generics вообще недостойны обсуждения. Особенно после эпичных выяснений в контексте языка Go нарот продемонстрировал, что "теория" дженериков в головах людишек укладывается в "пусть компилятор за нас код генерирует". В Go нет и не нужны. А уж в Обероне точно не нужны.


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

Поэтому иметь решение, не требующее изменений языка и каких-то серьёзных наворотов - самое то.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Четверг, 05 Январь, 2017 12:24 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
GameHunter писал(а):
'Или ещё давешние "умные макросы"' - это про что?


Не могу нагуглить. Есть сохранённая статья. Автора не помню, а в статье не указан.


Вложения:
WiseMacro.htm.7z [11.64 КБ]
Скачиваний: 313
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Четверг, 05 Январь, 2017 12:25 
Модератор
Аватара пользователя

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

http://research.microsoft.com/en-us/um/ ... 0(cszypers)/pub/jmlc97.pdf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Четверг, 05 Январь, 2017 22:22 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Илья Ермаков писал(а):
Поэтому иметь решение, не требующее изменений языка и каких-то серьёзных наворотов - самое то.
Ну даже если проартикулировать задачу использования дженериков как "я управляю кодогенерацией компилятора и метаинформацией рантайма через особые конструкции в исходнике" становится понятным, грубо говоря, ряд мейнстримных плюшек, с которыми все носятся, типа дженериков, АОП, ffi и прочих "проблем", которые можно разрешить через "Оберон времени компиляции" (подробнее про времена моя заметка), раз и навсегда. Но это ж не тот уровень, зачем все эти философствования, нам нужно решение здесь и сейчас, уже весь мир пользуется.


Последний раз редактировалось Пётр Кушнир Четверг, 05 Январь, 2017 22:30, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Четверг, 05 Январь, 2017 22:24 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Илья Ермаков писал(а):
А вот, кто не видел, статья Пауля Роя и Клеменса Шиперски "Легковесный параметрический полиморфизм в Обероне".

http://research.microsoft.com/en-us/um/ ... 0(cszypers)/pub/jmlc97.pdf
Есть даже имплементация через метаинформацию в модуле ListsOp.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Четверг, 05 Январь, 2017 23:56 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Илья Ермаков писал(а):
Можно сделать отдельную команду AlterModName, которая до компиляции в исходнике заменяет имя на указанное.
А здесь селектором не обойтись?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обобщённые типы в Обероне
СообщениеДобавлено: Пятница, 06 Январь, 2017 01:24 
Модератор
Аватара пользователя

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


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

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


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

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


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

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