OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 24 Апрель, 2024 12:34

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
СообщениеДобавлено: Четверг, 15 Декабрь, 2022 17:43 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1449
Откуда: Киев
Это продолжение темы, выросшей из просьбы рассказать о процедурных переменных в Компонентном Паскале.
Код:
Context = ABSTRACT RECORD END;
p: PROCEDURE(VAR ctx: Context; par: Parameter);

На первый взгляд, при наличии ООП они видятся избыточностью, потому что архитектурно любую процедурную переменную, как минимум, можно заменить объектом с одним методом. И как свидетельствуют разработчики, делается такое довольно часто даже несмотря на наличие процедурных переменных.
Код:
Abr = ABSTRACT RECORD END;
PROCEDURE (VAR ctx:Abr) Do(par: Parameter) ABSTRACT;
p: POINTER TO Abr;

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

Так как есть и обратное мнение, хотелось бы увидеть его в более конкретном выражении. Лучше всего в виде рабочего, но минимального кода. Это то, что позволяет лучше понимать суть в противовес растеканию слишком абстрактной мысли.


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 17 Декабрь, 2022 10:32 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 588
Откуда: Москва
Comdiv писал(а):
Дмитрий Викторович, я посмотрел Ваш доклад, но, к сожалению, так и не смог увидеть потребность в использования именно процедурных типов, а не ООП. Возможно, мы просто о разных темах? Как мне показалось, то, что Вы изложили, прекрасно оформляется в виде ООП. Если нет, было бы интересно рассмотреть такой код.

Вы знаете, свое понимание я изложил, наверное, ничего нового не добавлю. Вы вправе не соглашаться, конечно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 20 Декабрь, 2022 08:50 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Есть одно внешнее обстоятельство: в интерфейсах к ОС и библиотекам встречаются процедурные параметры.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 21 Декабрь, 2022 01:32 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Trurl писал(а):
Есть одно внешнее обстоятельство: в интерфейсах к ОС и библиотекам встречаются процедурные параметры.


Выходит, это избыточная необходимость. Или необходимая избыточность. Но если оно нужно только для привязки к платформе - то его можно убрать в SYSTEM.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 21 Декабрь, 2022 19:02 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Но если уж устранять избыточность, то вслед за процедурными типами логично отправить и сами процедуры. Ведь они тоже избыточны, да и типов для них уже нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 22 Декабрь, 2022 12:24 

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

Цитата:
да и типов для них уже нет.
Есть и такой принцип? Вроде бы, в Обероне, есть константы-строки, а типа для них нет. Не имеет типа ни одна из встроенных процедур и тоже, вроде бы, ничего.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Декабрь, 2022 15:54 

Зарегистрирован: Суббота, 30 Июль, 2022 12:02
Сообщения: 68
На мой взгляд, процедурный тип с значением NIL хорошо эмулирует абстрактную процедуру в Компонентном Паскале. Правда, ошибка будет выходить не на этапе компиляции, а на этапе выполнения, но это уже специфика компиляторов Оберона. Можно ли в Обероне-2 с помощью связанных процедур эмулировать абстрактную процедуру в Компонентном Паскале - думаю, что нет, но лучше меня на этот вопрос ответят специалисты.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Декабрь, 2022 16:10 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Декабрь, 2022 16:19 

Зарегистрирован: Суббота, 30 Июль, 2022 12:02
Сообщения: 68
Я имел в виду эмуляцию абстрактной процедуры в КП средствами Оберона. По поводу NIL - в моем случае его надо присвоить только процедурному типу, позволяя пользоваться другими полями записи, а в вашем - его необходимо присвоить всей записи.
Во всяком случае, я так понял ваше сообщение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Декабрь, 2022 17:15 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1167
чистая оптимизация: не нужно создавать в куче новый объект, и одним индиректом меньше. ну, и удобство портирования кода в стиле «что вижу — то и пою» с языков, где это есть.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Декабрь, 2022 18:04 

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Декабрь, 2022 18:11 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1449
Откуда: Киев
AlexBogy писал(а):
Я имел в виду эмуляцию абстрактной процедуры в КП средствами Оберона.
Это просто не нужно делать в таком виде в большинстве случаев.

Цитата:
По поводу NIL - в моем случае его надо присвоить только процедурному типу, позволяя пользоваться другими полями записи, а в вашем - его необходимо присвоить всей записи.
"Вся запись", может состоять из объекта с одним методом, лежащего в другой записи. И даже фактически это может быть всё тот же адрес кода при соответствующем воплощении.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Декабрь, 2022 18:18 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1167
ну, я сильно испорчен сишечкой и немножко геймдевом (вот тут все нормальные люди прекратили читать мои сообщения навсегда; ну, как минимум те, которые знают геймдев изнутри). соответственно, о накладных расходах я беспокоюсь на уровне рефлексов уже.

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

в принципе, процедурный тип получается такой же избыточностью, как и FOR, да. но поскольку у нас язык не только для «верхнего уровня», но ещё и так называемого «системного программирования», то процедурный тип в нём таки нужен для мелкооптимизаций совсем-совсем внизу. однако, возможно, его стоит разрешить только при импорте SYSTEM, например.

p.s.: даёшь делегаты!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

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


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

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


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

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