Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 18 окт 2019, 03:51

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Standard Container Library
СообщениеДобавлено: 21 мар 2018, 19:05 
Не в сети

Сообщения: 22
Система Scl для BlackBox. Standard Container Library реализует объекты vectors, lists, queues, stacks, maps безо всяких дженериков. Используются метаданные BlackBox Kernel.
http://www.zinnamturm.eu/downloadsOS.htm#Scl
https://blackbox.obertone.ru/component/Scl


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Standard Container Library
СообщениеДобавлено: 22 мар 2018, 16:48 
Не в сети

Сообщения: 104
Дмитрий Дагаев писал(а):
Система Scl для BlackBox. Standard Container Library реализует объекты vectors, lists, queues, stacks, maps безо всяких дженериков. Используются метаданные BlackBox Kernel.
http://www.zinnamturm.eu/downloadsOS.htm#Scl
https://blackbox.obertone.ru/component/Scl


"Без дженериков" нас не удивишь, вопрос только насколько этим можно пользоваться. Есть там что-нибудь интересное, кроме обычных ограничений: объекты только в куче, кладем/достаем ANYPTR, касты на каждый чих, компаратор тоже с ANYPTR?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Standard Container Library
СообщениеДобавлено: 23 мар 2018, 08:20 
Не в сети

Сообщения: 204
А почему, кстати, в Оберонах шаблоны и дженерики так и не прижились? Ведь были же эксперименты, да не пошли в массы...

Lightweight parametric polymorphism for Oberon

Oberon Templates от Алекса Ильина


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Standard Container Library
СообщениеДобавлено: 23 мар 2018, 08:32 
Не в сети

Сообщения: 204
Цитата:
№ 533 22-09-2005 09:16 Trurl

Цитата:
Ответ на »сообщение 511« (А.Хохлов)
___________________________
Я не знаток Оберона и апология C++ в мои цели тоже не входит, но не подойдет ли следующее:
написать функцию сортировки массивов элементов любого типа, для которых определена операция (или функция) сравнения


Мы теребили Гуткнехта по поводу родовых типов/параметрического полиморфизма. Его аргументы сводились к тому, что подобная общность встречается довольно редко. Как правило, требуется подстраивать алгоритмы в зависимости от типа данных. Не то, чтобы он нас совсем убедил, но как раз в случае сортировки его аргументация действенна.

Вот как-то так...


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Standard Container Library
СообщениеДобавлено: 23 мар 2018, 12:22 
Не в сети

Сообщения: 22
vlad писал(а):
Дмитрий Дагаев писал(а):
Система Scl для BlackBox. Standard Container Library реализует объекты vectors, lists, queues, stacks, maps безо всяких дженериков. Используются метаданные BlackBox Kernel.
http://www.zinnamturm.eu/downloadsOS.htm#Scl
https://blackbox.obertone.ru/component/Scl


"Без дженериков" нас не удивишь, вопрос только насколько этим можно пользоваться. Есть там что-нибудь интересное, кроме обычных ограничений: объекты только в куче, кладем/достаем ANYPTR, касты на каждый чих, компаратор тоже с ANYPTR?

- объекты не обязательно в куче, элементы м.б. простыми RECORD;
- кладем RECORD, а не указатели с кастом;
- компаратор задан для встроенных ключевых полей INT16-64, (SHORT)CHAR8-256 с возможностью расширения пользовательскими типами.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Standard Container Library
СообщениеДобавлено: 23 мар 2018, 12:29 
Не в сети

Сообщения: 22
geniepro писал(а):
Цитата:
№ 533 22-09-2005 09:16 Trurl

Цитата:
Ответ на »сообщение 511« (А.Хохлов)
___________________________
Я не знаток Оберона и апология C++ в мои цели тоже не входит, но не подойдет ли следующее:
написать функцию сортировки массивов элементов любого типа, для которых определена операция (или функция) сравнения


Мы теребили Гуткнехта по поводу родовых типов/параметрического полиморфизма. Его аргументы сводились к тому, что подобная общность встречается довольно редко. Как правило, требуется подстраивать алгоритмы в зависимости от типа данных. Не то, чтобы он нас совсем убедил, но как раз в случае сортировки его аргументация действенна.

Вот как-то так...

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Standard Container Library
СообщениеДобавлено: 23 мар 2018, 18:00 
Не в сети

Сообщения: 104
Дмитрий Дагаев писал(а):
- объекты не обязательно в куче, элементы м.б. простыми RECORD;


Копируются побитно? А указатели можно класть? А INTEGER?

Дмитрий Дагаев писал(а):
- кладем RECORD, а не указатели с кастом;


Каст возникает не когда кладется, а когда достается, чудес же не бывает? А когда кладется оно падает в рантайме, если тип не угадал? Кстати, а что будет, если положить наследника в контейнер базовых элементов - упадет или обрежется?

Дмитрий Дагаев писал(а):
- компаратор задан для встроенных ключевых полей INT16-64, (SHORT)CHAR8-256 с возможностью расширения пользовательскими типами.


Так а свой компаратор как задается?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Standard Container Library
СообщениеДобавлено: 23 мар 2018, 19:24 
Не в сети

Сообщения: 22
Цитата:
Копируются побитно? А указатели можно класть? А INTEGER?

Берется структура, например, с целым (или указателем)
Код: "OBERON"
  1.  
  2. MyRec = RECORD
  3. i1: INTEGER;
  4. END;
  5.  

И копируется побитно. Метаданные дают тип и длину.

Цитата:
Каст возникает не когда кладется, а когда достается, чудес же не бывает? А когда кладется оно падает в рантайме, если тип не угадал? Кстати, а что будет, если положить наследника в контейнер базовых элементов - упадет или обрежется?

ASSERT(v.r.Check(rec), 35) - несоответствие типа добавляемого типу в метаданных

Цитата:
Так а свой компаратор как задается?

Наследуем свой ключ, например LongKey от Base.Key,
Пишем функцию сравнения
Реализуем метод GetComparator
Добавляем новый ключ
Код: "OBERON"
  1.  
  2. PROCEDURE LongCompare (VAR n1: LONGINT; VAR n2: LONGINT): INTEGER;
  3. BEGIN
  4. RETURN SHORT(n1-n2)
  5. END LongCompare;
  6.  
  7. PROCEDURE (VAR ri: LongKey) GetComparator* (VAR compare: Base.Comparator);
  8. BEGIN
  9. SYSTEM.PUT(SYSTEM.ADR(compare), SYSTEM.ADR(LongCompare));
  10. END GetComparator;
  11.  
  12. .................
  13. lri: LongKeyPtr;
  14. .................
  15. NEW(lri); Base.dir.AddKey(lri);
  16.  


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Standard Container Library
СообщениеДобавлено: 23 мар 2018, 19:33 
Не в сети

Сообщения: 104
vlad писал(а):
Каст возникает не когда кладется, а когда достается, чудес же не бывает?


Вопрос снимается. Достается через "специальное" типизированное поле, каста не надо. Я бы, наверное, предпочел бы лучше каст, чем подбные соглашения и игры с SYSTEM, да и с индексом есть шанс запутаться, но тут уж на вкус и цвет...


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Standard Container Library
СообщениеДобавлено: 23 мар 2018, 19:44 
Не в сети

Сообщения: 104
Дмитрий Дагаев писал(а):
ASSERT(v.r.Check(rec), 35) - несоответствие типа добавляемого типу в метаданных


Я посмотрел - проверка идет на точное соответствие типа, без учета наследования. Это так задумано или просто проще?

Дмитрий Дагаев писал(а):
Наследуем свой ключ, например LongKey от Base.Key,
Пишем функцию сравнения
Реализуем метод GetComparator


Т.е. мне надо будет объявить столько типов контейнеров сколько у меня способов сортировки? Мне кажется это не очень удобно. Раз уж нас все равно динамика, то логичнее было бы компаратор сделать параметром Sort().

Дмитрий Дагаев писал(а):
PROCEDURE (VAR ri: LongKey) GetComparator* (VAR compare: Base.Comparator);
BEGIN
SYSTEM.PUT(SYSTEM.ADR(compare), SYSTEM.ADR(LongCompare));
END GetComparator;


SYSTEM.PUT/SYSTEM.ADDR в прикладном (даже не библиотечном) коде?


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

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


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Тех.поддержка phpBB