OberonCore
https://forum.oberoncore.ru/

Обобщённые типы в Обероне
https://forum.oberoncore.ru/viewtopic.php?f=30&t=5366
Страница 2 из 2

Автор:  Info21 [ Суббота, 31 Декабрь, 2016 22:15 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

Наверное, туплю (как Ронда сёдни утром), но если они практически одинаковые, то в чём проблема поддержки?
А если проблема-таки есть, то два модуля достаточно сильно разные -- и как тогда вы запихнёте их в один?

Автор:  GameHunter [ Вторник, 03 Январь, 2017 17:58 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

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

Автор:  Info21 [ Вторник, 03 Январь, 2017 18:24 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

Но всё равно ведь каждую такую мелочь надо проверять на предмет возможной разницы между комплексным и вещественным вариантом.

Автор:  GameHunter [ Среда, 04 Январь, 2017 00:51 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

Нет, если методы решения одинаково хорошо пригодны для обоих вариантов. Рассмотрим, например, решение системы линейных уравнений методом Гаусса. Что там проверять на предмет возможной разницы? По той же причине мои модули для решения параболических уравнений отличаются друг от друга где-то в 20 строках из 900.

Автор:  Info21 [ Среда, 04 Январь, 2017 01:05 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

Мы повторяемся, значит, можно диспут прекратить.

Автор:  Илья Ермаков [ Среда, 04 Январь, 2017 17:37 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

В ББ можно сделать Selector с вариантами этого TYPE - и потом команду компиляции обоих вариантов. На выходе будут два модуля YyXxxxReal и YyXxxxComp.

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

Автор:  Илья Ермаков [ Среда, 04 Январь, 2017 17:52 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

В порядке новогоднего бре... полёта фантазии :)

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

Код:
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.

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

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

Автор:  GameHunter [ Четверг, 05 Январь, 2017 00:47 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

Да, селекторы могут подойти. В принципе, может они даже окажутся лучше родовых модулей, т.к. ими явно контролируется не только типизация, но и реализация модулей (та малая часть, которая различается для вещественных и комплексных модулей).

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

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

Автор:  Пётр Кушнир [ Четверг, 05 Январь, 2017 01:15 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

Кажется, эти ваши generics вообще недостойны обсуждения. Особенно после эпичных выяснений в контексте языка Go нарот продемонстрировал, что "теория" дженериков в головах людишек укладывается в "пусть компилятор за нас код генерирует". В Go нет и не нужны. А уж в Обероне точно не нужны.

Автор:  Info21 [ Четверг, 05 Январь, 2017 10:51 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

GameHunter писал(а):
В ББ .. можно одним селект-идентификатором преключать сразу несколько модулей (или целую подсистему) ...
Какие проблемы. Все интерфейсы торчат.

Автор:  Илья Ермаков [ Четверг, 05 Январь, 2017 11:44 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

У селекторов только минус, что любую специализацию надо проводить с вмешательством в код модуля.
Т.е. это не расширяемая уже специализация (когда её проводит третье лицо под свои настройки), а многовариантность кода просто.

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

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

Автор:  Илья Ермаков [ Четверг, 05 Январь, 2017 11:50 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

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


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

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

Автор:  Илья Ермаков [ Четверг, 05 Январь, 2017 12:24 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

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


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

Вложения:
WiseMacro.htm.7z [11.64 КБ]
Скачиваний: 313

Автор:  Илья Ермаков [ Четверг, 05 Январь, 2017 12:25 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

А вот, кто не видел, статья Пауля Роя и Клеменса Шиперски "Легковесный параметрический полиморфизм в Обероне".

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

Автор:  Пётр Кушнир [ Четверг, 05 Январь, 2017 22:22 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

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

Автор:  Пётр Кушнир [ Четверг, 05 Январь, 2017 22:24 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

Илья Ермаков писал(а):
А вот, кто не видел, статья Пауля Роя и Клеменса Шиперски "Легковесный параметрический полиморфизм в Обероне".

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

Автор:  Valery Solovey [ Четверг, 05 Январь, 2017 23:56 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

Илья Ермаков писал(а):
Можно сделать отдельную команду AlterModName, которая до компиляции в исходнике заменяет имя на указанное.
А здесь селектором не обойтись?

Автор:  Илья Ермаков [ Пятница, 06 Январь, 2017 01:24 ]
Заголовок сообщения:  Re: Обобщённые типы в Обероне

Так автор обобщённого модуля заранее не знает, под каким именем программист Вася будет специализировать этот модуль.

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/