OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 87 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Не могу найти дженерики
СообщениеДобавлено: Пятница, 10 Апрель, 2020 05:02 

Зарегистрирован: Пятница, 10 Апрель, 2020 04:42
Сообщения: 8
Не вижу в обероне дженериков...
Код:
TYPE
    Foo = RECORD<T>
        bar: T;
    END;

Где они спрятаны или я делаю что-то не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Пятница, 10 Апрель, 2020 09:09 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
В каком именно обероне?
В Активном Обероне есть шаблоны модулей, а не отдельных типов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Пятница, 10 Апрель, 2020 10:38 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
berona писал(а):
или я делаю что-то не так?

Не там ищете.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Пятница, 10 Апрель, 2020 11:03 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Раз тема в Компонентном Паскале, то получается, что речь про Блэкбокс-Оберон.

В КП нет дженериков. В момент создания языка их польза была неочевидна. Да и сейчас, дискуссии продолжаются.

Думаю специалисты тут вам подскажут, как решить вашу проблему без дженериков.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Пятница, 10 Апрель, 2020 14:26 

Зарегистрирован: Пятница, 10 Апрель, 2020 04:42
Сообщения: 8
Иван Денисов писал(а):
В момент создания языка их польза была неочевидна. Да и сейчас, дискуссии продолжаются.

Почему польза не очевидна? Какие есть аргументы в эту сторону?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Пятница, 10 Апрель, 2020 14:28 

Зарегистрирован: Пятница, 10 Апрель, 2020 04:42
Сообщения: 8
Sergej Durmanov писал(а):
В Активном Обероне есть шаблоны модулей, а не отдельных типов.

А можно ссылку, где можно почитать? Ну или хотя бы пример кода...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Пятница, 10 Апрель, 2020 17:44 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
https://github.com/metacore/A2OS/blob/m ... Report.pdf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Пятница, 10 Апрель, 2020 20:03 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
berona писал(а):
Почему польза не очевидна? Какие есть аргументы в эту сторону?


Дело, кмк, не в пользе. Поскольку польза - понятие относительное, как и "хорошо": для чего хорошо? для чего полезно?

Аргумент про <дженерики> оч простой: будучи сами по себе сложными для понимания, они существенно усложняют язык и компилятор. При этом задачи, для которых они предназначены, легко решаются другими, более простыми средствами языка. Тем более такого, как Оберон, с расширением типов.

А развитие Паскаля-Модулы-Оберона идет по пути выкидывания избыточных средств, "лишних" - т.е. таких, которые можно выразить другими средствами. Оставили только то, что уже не выкинешь.
(Ну, строго говоря, можно и присваивание выкинуть, но тогда уже будет другая парадигма ;)
Начали с Оккама: Не следует множить сущее без необходимости. Продолжили Эйнштейном: Make it as simple as possible, but not simpler. А недавно додумались, как даже эти простые максимы сократить: Less is more. Что на русский можно перевести: Лучше меньше.

(* Между прочим, коллеги, я претендую на самую краткую русскую формулировку девиза Оберона: Лучше меньше! )) *)

Даже цикл FOR из Оберона выкинули, как избыточное средство. Правда, потом почему-то передумали и в Оберон-2 вернули. Но потом одумались, и из Оберона-13 выкинули опять.

berona, подскажите, а вы какую конкретно задачу хотели бы решить на дженериках? поделитесь, хотелось бы поупражняться: прикинуть, как это сделать во вселенной Оберона.

П.С.
Теперь вместо <дженерики> можете подставить любую другую (ново)модную фичу других языков.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Пятница, 10 Апрель, 2020 20:28 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Ну, в своем самом простом виде темплейты не очень сложные.
Тип - это параметр. Больше никаких наворотов не нужно.
Конечно, без этого в КП можно обойтись (как и во многих других языках).
Например, с помощью наследования.
Или с помощью преобразования типов указателей.
Но шаблоны с типом-параметром кажутся проще для понимания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Суббота, 11 Апрель, 2020 02:43 

Зарегистрирован: Пятница, 10 Апрель, 2020 04:42
Сообщения: 8
adimetrius писал(а):
berona, подскажите, а вы какую конкретно задачу хотели бы решить на дженериках?
Я открыл исходники модуля Lists в BlackBox'e и увидел безтиповые указатели внутри большинства коллекций. Какая же это сильная типизация теперь?

adimetrius писал(а):
А развитие Паскаля-Модулы-Оберона идет по пути выкидывания избыточных средств, "лишних" - т.е. таких, которые можно выразить другими средствами.
Тот же вопрос про коллекции. Вот выкинули вы дженерики, а теперь вектора, хэшмапы и коллекции как делать? Копипастить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Суббота, 11 Апрель, 2020 02:46 

Зарегистрирован: Пятница, 10 Апрель, 2020 04:42
Сообщения: 8
adimetrius писал(а):
Теперь вместо <дженерики> можете подставить любую другую (ново)модную фичу других языков.
Может сразу к ассемблеру перейдём? :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Воскресенье, 12 Апрель, 2020 01:11 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 597
berona писал(а):
adimetrius писал(а):
Теперь вместо <дженерики> можете подставить любую другую (ново)модную фичу других языков.
Может сразу к ассемблеру перейдём? :D

Зачем же с козырей-то...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Воскресенье, 12 Апрель, 2020 04:10 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
berona писал(а):
adimetrius писал(а):
berona, подскажите, а вы какую конкретно задачу хотели бы решить на дженериках?
Я открыл исходники модуля Lists в BlackBox'e и увидел безтиповые указатели внутри большинства коллекций. Какая же это сильная типизация теперь?

Сильная типизация там, где она нужна.

berona писал(а):
adimetrius писал(а):
А развитие Паскаля-Модулы-Оберона идет по пути выкидывания избыточных средств, "лишних" - т.е. таких, которые можно выразить другими средствами.
Тот же вопрос про коллекции. Вот выкинули вы дженерики, а теперь вектора, хэшмапы и коллекции как делать? Копипастить?

Компонентно-ориентированное программирование порой поощряет копирование кода. Ничего в этом нет страшного.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Воскресенье, 12 Апрель, 2020 13:32 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
На самом деле, простые дженерики не что-то столь сложное/плохое, чтобы идеологически их избегать. Если базовая система типов и сущностей у языка простая, то и метасредства типа параметризации дженериков над ними очень простые. (И наоборот).

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

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

Проблема там есть одна: сопрячь это идейно и технически с динамической загрузкой и раздельной компиляцией.
Не будем забывать, что в том же Go это потеряно относительно Оберона, там нужен глобальный анализ.

Подробнее для автора вопроса: https://oberoncore.ru/_media/library/sz ... ystems.pdf
Со страницы 20 PDF-а (с. 6 печатная).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Воскресенье, 12 Апрель, 2020 13:50 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
berona писал(а):
Я открыл исходники модуля Lists в BlackBox'e и увидел безтиповые указатели внутри большинства коллекций. Какая же это сильная типизация теперь?


Прошу прощения, про какой Lists идет речь? Я в своем ББ не нашел такого модуля, а хотелось бы посмотреть на безтиповые указатели внутри коллекций - чтобы предметно порассуждать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Воскресенье, 12 Апрель, 2020 14:11 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Илья Ермаков писал(а):
Просто для системного программирования и научно-инженерных задач, для которых применяли сами разработчики типа 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;

Я не полемизирую, а пытаюсь понять. Просто я до сих пор не встречал задач, где мне позарез были бы нужны "стандартные контейнеры". Чаще всего встречал два варианта:
А) нужен элементарный список или дерево - и тут несложно (субъективно) ручками прописать; выигрыш в производительности по сравнению с (обычно громоздкими и универсальными контейнерами-"всемогуторами" © В.Лаптев) - грандиозный. И зависимостей меньше, и ненужные виды контейнеров не надо "тянуть" с библиотекой.
Б) нужна структура данных, которая не вписывается в стандартные контейнеры: пересекающиеся списки или деревья, например, каждый объект данных участвует в дереве и в двух списках одновременно. И тут - опять же, только ручками.

Но вебом я мало занимался и поверхностно. Потому что там КП нету ).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Воскресенье, 12 Апрель, 2020 14:14 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
adimetrius писал(а):
berona писал(а):
Я открыл исходники модуля Lists в BlackBox'e и увидел безтиповые указатели внутри большинства коллекций. Какая же это сильная типизация теперь?


Прошу прощения, про какой Lists идет речь? Я в своем ББ не нашел такого модуля, а хотелось бы посмотреть на безтиповые указатели внутри коллекций - чтобы предметно порассуждать.

Думаю, что речь про этот Lists:
https://oberoncore.ru/bbcc/subs/lists/start
https://blackbox.oberon.org/extension/Lists


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Воскресенье, 12 Апрель, 2020 15:21 
Модератор
Аватара пользователя

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


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

Для задач типа веба и работы с БД нужно объективно что-то типа стандартных структур скриптовых - массивы и объекты полей. Обычно это было преимуществом языков с динамической типизацией. Удобно для прикладника и строго типизированно это реализовано сейчас в веб-языках нового поколения - Dart и TypeScript.

Можно ли это сделать без дженериков в КП - кое-что можно.

Например, таким образом:

Код:

TYPE
 Person = RECORD ... END;

 ArrayOfPerson = POINTER TO RECORD (Arrays.Array)
   elem: Person
 END


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Воскресенье, 12 Апрель, 2020 17:52 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Проблема с шаблонами такова, что действительно хорошо их сделать в языке крайне непросто. И если это не учитывалось в языке как центральная концепция с самого начала, то скорее всего, это будет корявой нашлёпкой.

Также, достаточно гиблое дело пытаться соревноваться с гибкостью динамического подхода с помощью параметризуемых, но статических типов. Для желаемого контроля над типами и другими характеристиками используемых элементов, можно применять специальные проверщики, которые должны быть предусмотрены в обобщённом хранилище.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу найти дженерики
СообщениеДобавлено: Воскресенье, 12 Апрель, 2020 18:48 
Модератор
Аватара пользователя

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


Посмотрите, например, на Dart - всё там у них отлично, никакой избыточной громоздкости нет при работе с JSON через полную статику для типов узлов.

Это вы вспоминаете что-нибудь типа как это делать в C# и Java.


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

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


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

Сейчас этот форум просматривают: Google [Bot] и гости: 4


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

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