OberonCore https://forum.oberoncore.ru/ |
|
Не могу найти дженерики https://forum.oberoncore.ru/viewtopic.php?f=29&t=6595 |
Страница 1 из 5 |
Автор: | berona [ Пятница, 10 Апрель, 2020 05:02 ] |
Заголовок сообщения: | Не могу найти дженерики |
Не вижу в обероне дженериков... Код: TYPE Foo = RECORD<T> bar: T; END; Где они спрятаны или я делаю что-то не так? |
Автор: | Sergej Durmanov [ Пятница, 10 Апрель, 2020 09:09 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
В каком именно обероне? В Активном Обероне есть шаблоны модулей, а не отдельных типов. |
Автор: | Trurl [ Пятница, 10 Апрель, 2020 10:38 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
berona писал(а): или я делаю что-то не так? Не там ищете. |
Автор: | Иван Денисов [ Пятница, 10 Апрель, 2020 11:03 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
Раз тема в Компонентном Паскале, то получается, что речь про Блэкбокс-Оберон. В КП нет дженериков. В момент создания языка их польза была неочевидна. Да и сейчас, дискуссии продолжаются. Думаю специалисты тут вам подскажут, как решить вашу проблему без дженериков. |
Автор: | berona [ Пятница, 10 Апрель, 2020 14:26 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
Иван Денисов писал(а): В момент создания языка их польза была неочевидна. Да и сейчас, дискуссии продолжаются. Почему польза не очевидна? Какие есть аргументы в эту сторону? |
Автор: | berona [ Пятница, 10 Апрель, 2020 14:28 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
Sergej Durmanov писал(а): В Активном Обероне есть шаблоны модулей, а не отдельных типов. А можно ссылку, где можно почитать? Ну или хотя бы пример кода... |
Автор: | Sergej Durmanov [ Пятница, 10 Апрель, 2020 17:44 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
https://github.com/metacore/A2OS/blob/m ... Report.pdf |
Автор: | adimetrius [ Пятница, 10 Апрель, 2020 20:03 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
berona писал(а): Почему польза не очевидна? Какие есть аргументы в эту сторону? Дело, кмк, не в пользе. Поскольку польза - понятие относительное, как и "хорошо": для чего хорошо? для чего полезно? Аргумент про <дженерики> оч простой: будучи сами по себе сложными для понимания, они существенно усложняют язык и компилятор. При этом задачи, для которых они предназначены, легко решаются другими, более простыми средствами языка. Тем более такого, как Оберон, с расширением типов. А развитие Паскаля-Модулы-Оберона идет по пути выкидывания избыточных средств, "лишних" - т.е. таких, которые можно выразить другими средствами. Оставили только то, что уже не выкинешь. (Ну, строго говоря, можно и присваивание выкинуть, но тогда уже будет другая парадигма ![]() Начали с Оккама: Не следует множить сущее без необходимости. Продолжили Эйнштейном: Make it as simple as possible, but not simpler. А недавно додумались, как даже эти простые максимы сократить: Less is more. Что на русский можно перевести: Лучше меньше. (* Между прочим, коллеги, я претендую на самую краткую русскую формулировку девиза Оберона: Лучше меньше! )) *) Даже цикл FOR из Оберона выкинули, как избыточное средство. Правда, потом почему-то передумали и в Оберон-2 вернули. Но потом одумались, и из Оберона-13 выкинули опять. berona, подскажите, а вы какую конкретно задачу хотели бы решить на дженериках? поделитесь, хотелось бы поупражняться: прикинуть, как это сделать во вселенной Оберона. П.С. Теперь вместо <дженерики> можете подставить любую другую (ново)модную фичу других языков. |
Автор: | Валерий Лаптев [ Пятница, 10 Апрель, 2020 20:28 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
Ну, в своем самом простом виде темплейты не очень сложные. Тип - это параметр. Больше никаких наворотов не нужно. Конечно, без этого в КП можно обойтись (как и во многих других языках). Например, с помощью наследования. Или с помощью преобразования типов указателей. Но шаблоны с типом-параметром кажутся проще для понимания. |
Автор: | berona [ Суббота, 11 Апрель, 2020 02:43 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
adimetrius писал(а): berona, подскажите, а вы какую конкретно задачу хотели бы решить на дженериках? Я открыл исходники модуля Lists в BlackBox'e и увидел безтиповые указатели внутри большинства коллекций. Какая же это сильная типизация теперь?adimetrius писал(а): А развитие Паскаля-Модулы-Оберона идет по пути выкидывания избыточных средств, "лишних" - т.е. таких, которые можно выразить другими средствами. Тот же вопрос про коллекции. Вот выкинули вы дженерики, а теперь вектора, хэшмапы и коллекции как делать? Копипастить?
|
Автор: | berona [ Суббота, 11 Апрель, 2020 02:46 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
adimetrius писал(а): Теперь вместо <дженерики> можете подставить любую другую (ново)модную фичу других языков. Может сразу к ассемблеру перейдём? ![]() |
Автор: | Artyemov [ Воскресенье, 12 Апрель, 2020 01:11 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
berona писал(а): adimetrius писал(а): Теперь вместо <дженерики> можете подставить любую другую (ново)модную фичу других языков. Может сразу к ассемблеру перейдём? ![]() Зачем же с козырей-то... |
Автор: | Иван Денисов [ Воскресенье, 12 Апрель, 2020 04:10 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
berona писал(а): adimetrius писал(а): berona, подскажите, а вы какую конкретно задачу хотели бы решить на дженериках? Я открыл исходники модуля Lists в BlackBox'e и увидел безтиповые указатели внутри большинства коллекций. Какая же это сильная типизация теперь?Сильная типизация там, где она нужна. berona писал(а): adimetrius писал(а): А развитие Паскаля-Модулы-Оберона идет по пути выкидывания избыточных средств, "лишних" - т.е. таких, которые можно выразить другими средствами. Тот же вопрос про коллекции. Вот выкинули вы дженерики, а теперь вектора, хэшмапы и коллекции как делать? Копипастить?Компонентно-ориентированное программирование порой поощряет копирование кода. Ничего в этом нет страшного. |
Автор: | Илья Ермаков [ Воскресенье, 12 Апрель, 2020 13:32 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
На самом деле, простые дженерики не что-то столь сложное/плохое, чтобы идеологически их избегать. Если базовая система типов и сущностей у языка простая, то и метасредства типа параметризации дженериков над ними очень простые. (И наоборот). Просто для системного программирования и научно-инженерных задач, для которых применяли сами разработчики типа Ominc, это не было сильно актуально (случаи типа перегрузки операторов над разными полями чисел оставим студентам, в реально серьёзных задачах эти игрушки мало что дают). А в задачи обработки данных типа веба, где без стандартных контейнеров туго, швейцарцы не влезали. Так что всерьёз некоторыми задачами развития языка в эту сторону никто не занимался. Проблема там есть одна: сопрячь это идейно и технически с динамической загрузкой и раздельной компиляцией. Не будем забывать, что в том же Go это потеряно относительно Оберона, там нужен глобальный анализ. Подробнее для автора вопроса: https://oberoncore.ru/_media/library/sz ... ystems.pdf Со страницы 20 PDF-а (с. 6 печатная). |
Автор: | adimetrius [ Воскресенье, 12 Апрель, 2020 13:50 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
berona писал(а): Я открыл исходники модуля Lists в BlackBox'e и увидел безтиповые указатели внутри большинства коллекций. Какая же это сильная типизация теперь? Прошу прощения, про какой Lists идет речь? Я в своем ББ не нашел такого модуля, а хотелось бы посмотреть на безтиповые указатели внутри коллекций - чтобы предметно порассуждать. |
Автор: | adimetrius [ Воскресенье, 12 Апрель, 2020 14:11 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
Илья Ермаков писал(а): Просто для системного программирования и научно-инженерных задач, для которых применяли сами разработчики типа Ominc, это не было сильно актуально... А в задачи обработки данных типа веба, где без стандартных контейнеров туго, швейцарцы не влезали. Так что всерьёз некоторыми задачами развития языка в эту сторону никто не занимался. Илья Евгенич, т.е. вы говорите, что с помощью композиции и расширения типов невозможно или невыигрышно реализовать стандартные контейнеры? Я правильно вас понимаю? Вот так, напр, почему не сделать: Код: MODULE Collections; TYPE Obj* = POINTER TO ABSTRACT RECORD END; Collection* = POINTER TO ABSTRACT RECORD ... END; Key* = ...; PROCEDURE (c: Collection) Append* (o: Obj), NEW, ABSTRACT; PROCEDURE (o: Obj) GetKey* (OUT k: Key), NEW, ABSTRACT; END Collections; Я не полемизирую, а пытаюсь понять. Просто я до сих пор не встречал задач, где мне позарез были бы нужны "стандартные контейнеры". Чаще всего встречал два варианта: А) нужен элементарный список или дерево - и тут несложно (субъективно) ручками прописать; выигрыш в производительности по сравнению с (обычно громоздкими и универсальными контейнерами-"всемогуторами" © В.Лаптев) - грандиозный. И зависимостей меньше, и ненужные виды контейнеров не надо "тянуть" с библиотекой. Б) нужна структура данных, которая не вписывается в стандартные контейнеры: пересекающиеся списки или деревья, например, каждый объект данных участвует в дереве и в двух списках одновременно. И тут - опять же, только ручками. Но вебом я мало занимался и поверхностно. Потому что там КП нету ). |
Автор: | Иван Денисов [ Воскресенье, 12 Апрель, 2020 14:14 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
adimetrius писал(а): berona писал(а): Я открыл исходники модуля Lists в BlackBox'e и увидел безтиповые указатели внутри большинства коллекций. Какая же это сильная типизация теперь? Прошу прощения, про какой Lists идет речь? Я в своем ББ не нашел такого модуля, а хотелось бы посмотреть на безтиповые указатели внутри коллекций - чтобы предметно порассуждать. Думаю, что речь про этот Lists: https://oberoncore.ru/bbcc/subs/lists/start https://blackbox.oberon.org/extension/Lists |
Автор: | Илья Ермаков [ Воскресенье, 12 Апрель, 2020 15:21 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
adimetrius писал(а): Илья Евгенич, т.е. вы говорите, что с помощью композиции и расширения типов невозможно или невыигрышно реализовать стандартные контейнеры? Я правильно вас понимаю? Вот так, напр, почему не сделать: Тут основная проблема начинается в том, что статической типизации уже нет. А когда у вас разнородное сложное дерево (JSON, например), то хотелось бы иметь контроль типов. А вам ещё и приведение типа после каждого доставания надо будет явно писать. Для задач типа веба и работы с БД нужно объективно что-то типа стандартных структур скриптовых - массивы и объекты полей. Обычно это было преимуществом языков с динамической типизацией. Удобно для прикладника и строго типизированно это реализовано сейчас в веб-языках нового поколения - Dart и TypeScript. Можно ли это сделать без дженериков в КП - кое-что можно. Например, таким образом: Код: TYPE Person = RECORD ... END; ArrayOfPerson = POINTER TO RECORD (Arrays.Array) elem: Person END Т.е. такой трюк, когда мы этот параметр - тип элемента - задаём единственным синтаксическим полем, откуда его подбирает реализация через метапрограммирование и правильно инициализируется. До какой степени не-громоздкости это можно довести - надо пробовать. |
Автор: | Comdiv [ Воскресенье, 12 Апрель, 2020 17:52 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
Проблема с шаблонами такова, что действительно хорошо их сделать в языке крайне непросто. И если это не учитывалось в языке как центральная концепция с самого начала, то скорее всего, это будет корявой нашлёпкой. Также, достаточно гиблое дело пытаться соревноваться с гибкостью динамического подхода с помощью параметризуемых, но статических типов. Для желаемого контроля над типами и другими характеристиками используемых элементов, можно применять специальные проверщики, которые должны быть предусмотрены в обобщённом хранилище. |
Автор: | Илья Ермаков [ Воскресенье, 12 Апрель, 2020 18:48 ] |
Заголовок сообщения: | Re: Не могу найти дженерики |
Comdiv писал(а): Также, достаточно гиблое дело пытаться соревноваться с гибкостью динамического подхода с помощью параметризуемых, но статических типов. Посмотрите, например, на Dart - всё там у них отлично, никакой избыточной громоздкости нет при работе с JSON через полную статику для типов узлов. Это вы вспоминаете что-нибудь типа как это делать в C# и Java. |
Страница 1 из 5 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |