Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Standard Container Library https://zx.oberon.org/forum/viewtopic.php?f=103&t=384 |
Страница 1 из 2 |
Автор: | Дмитрий Дагаев [ 21 мар 2018, 19:05 ] |
Заголовок сообщения: | Standard Container Library |
Система 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 |
Автор: | vlad [ 22 мар 2018, 16:48 ] |
Заголовок сообщения: | Re: Standard Container Library |
Дмитрий Дагаев писал(а): Система 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? |
Автор: | geniepro [ 23 мар 2018, 08:20 ] |
Заголовок сообщения: | Re: Standard Container Library |
А почему, кстати, в Оберонах шаблоны и дженерики так и не прижились? Ведь были же эксперименты, да не пошли в массы... Lightweight parametric polymorphism for Oberon Oberon Templates от Алекса Ильина |
Автор: | geniepro [ 23 мар 2018, 08:32 ] |
Заголовок сообщения: | Re: Standard Container Library |
Цитата: № 533 22-09-2005 09:16 Trurl Цитата: Ответ на »сообщение 511« (А.Хохлов) ___________________________ Я не знаток Оберона и апология C++ в мои цели тоже не входит, но не подойдет ли следующее: написать функцию сортировки массивов элементов любого типа, для которых определена операция (или функция) сравнения Мы теребили Гуткнехта по поводу родовых типов/параметрического полиморфизма. Его аргументы сводились к тому, что подобная общность встречается довольно редко. Как правило, требуется подстраивать алгоритмы в зависимости от типа данных. Не то, чтобы он нас совсем убедил, но как раз в случае сортировки его аргументация действенна. Вот как-то так... |
Автор: | Дмитрий Дагаев [ 23 мар 2018, 12:22 ] |
Заголовок сообщения: | Re: Standard Container Library |
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 с возможностью расширения пользовательскими типами. |
Автор: | Дмитрий Дагаев [ 23 мар 2018, 12:29 ] |
Заголовок сообщения: | Re: Standard Container Library |
geniepro писал(а): Цитата: № 533 22-09-2005 09:16 Trurl Цитата: Ответ на »сообщение 511« (А.Хохлов) ___________________________ Я не знаток Оберона и апология C++ в мои цели тоже не входит, но не подойдет ли следующее: написать функцию сортировки массивов элементов любого типа, для которых определена операция (или функция) сравнения Мы теребили Гуткнехта по поводу родовых типов/параметрического полиморфизма. Его аргументы сводились к тому, что подобная общность встречается довольно редко. Как правило, требуется подстраивать алгоритмы в зависимости от типа данных. Не то, чтобы он нас совсем убедил, но как раз в случае сортировки его аргументация действенна. Вот как-то так... Полиморфизм на основе метаданных не вносит новых сущностей в Обероны, родовые типы вносят. Я, как пользователь, считаю, что одинаковые алгоритмы надо делать одинаково для разных данных, но не придаю этой свой работе слишком большую ценность. |
Автор: | vlad [ 23 мар 2018, 18:00 ] |
Заголовок сообщения: | Re: Standard Container Library |
Дмитрий Дагаев писал(а): - объекты не обязательно в куче, элементы м.б. простыми RECORD; Копируются побитно? А указатели можно класть? А INTEGER? Дмитрий Дагаев писал(а): - кладем RECORD, а не указатели с кастом; Каст возникает не когда кладется, а когда достается, чудес же не бывает? А когда кладется оно падает в рантайме, если тип не угадал? Кстати, а что будет, если положить наследника в контейнер базовых элементов - упадет или обрежется? Дмитрий Дагаев писал(а): - компаратор задан для встроенных ключевых полей INT16-64, (SHORT)CHAR8-256 с возможностью расширения пользовательскими типами. Так а свой компаратор как задается? |
Автор: | Дмитрий Дагаев [ 23 мар 2018, 19:24 ] |
Заголовок сообщения: | Re: Standard Container Library |
Цитата: Копируются побитно? А указатели можно класть? А INTEGER? Берется структура, например, с целым (или указателем) Код: "OBERON"
И копируется побитно. Метаданные дают тип и длину. Цитата: Каст возникает не когда кладется, а когда достается, чудес же не бывает? А когда кладется оно падает в рантайме, если тип не угадал? Кстати, а что будет, если положить наследника в контейнер базовых элементов - упадет или обрежется? ASSERT(v.r.Check(rec), 35) - несоответствие типа добавляемого типу в метаданных Цитата: Так а свой компаратор как задается? Наследуем свой ключ, например LongKey от Base.Key, Пишем функцию сравнения Реализуем метод GetComparator Добавляем новый ключ Код: "OBERON"
|
Автор: | vlad [ 23 мар 2018, 19:33 ] |
Заголовок сообщения: | Re: Standard Container Library |
vlad писал(а): Каст возникает не когда кладется, а когда достается, чудес же не бывает? Вопрос снимается. Достается через "специальное" типизированное поле, каста не надо. Я бы, наверное, предпочел бы лучше каст, чем подбные соглашения и игры с SYSTEM, да и с индексом есть шанс запутаться, но тут уж на вкус и цвет... |
Автор: | vlad [ 23 мар 2018, 19:44 ] |
Заголовок сообщения: | Re: Standard Container Library |
Дмитрий Дагаев писал(а): 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 в прикладном (даже не библиотечном) коде? |
Страница 1 из 2 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |