OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Расширение типа-указателя
СообщениеДобавлено: Пятница, 05 Июнь, 2015 02:54 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
В проекте Where, написанном на ETH Oberon, встречается такой код:

Код:
Compilation = POINTER TO RECORD ( ... )
   ...
END;
      
CompilMake = POINTER TO RECORD (Compilation)
   ...
END;
И сразу возникли вопросы.

Сначала: BlackBox такое скомпилирует если в первом указателе запись пометить как EXTENSIBLE.

Ofront (Оберон-2), напротив, не компилирует — ошибка "identifier does not denote a type".

Pow! компилирует.

XDS не компилирует. Требует присутствия END перед "(Compilation)".

В общем, закономерности я не заметил. А что говорит стандарт Оберона/Оберона-2 по этому поводу? Прокомментируйте, пожалуйста. И с точки зрения: нужна ли эта фича в Обероне/Обероне-2 по вашему мнению? — для упрощения при описании только динамических структур (не требуется отдельно описывать NodeDesc = RECORD и Node* = POINTER TO NodeDesc). И с точки зрения: как это реализовано в Обероне-07, и почему. Возможно, будут ещё какие мысли.

Интересуюсь с целью: вводить ли поддержку данной фичи в мой форк Ofront'а?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение типа-указателя
СообщениеДобавлено: Пятница, 05 Июнь, 2015 10:30 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
В справке ББ про это написано.

Это было сделано в CP просто для удобства, чтобы не описывать запись и указатель на нее отдельно.
Oberon 2 такое компилировать не должен по идее


Последний раз редактировалось ilovb Пятница, 05 Июнь, 2015 10:31, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение типа-указателя
СообщениеДобавлено: Пятница, 05 Июнь, 2015 10:31 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Oleg N. Cher писал(а):
И с точки зрения: как это реализовано в Обероне-07, и почему. Возможно, будут ещё какие мысли.

В Oberon-07, насколько я понимаю, так нельзя.
В принципе в этом даже есть преимущество, исчезает необходимость в слове EXTENSIBLE.
То есть, если, допустим, есть тип:
Rec* = RECORD ... END;
То он может быть расширен, до
ExtRec* = RECORD (Rec) ... END;
Но, если есть тип
PtrRec* = POINTER TO RECORD ... END;
то расширить его уже не получится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение типа-указателя
СообщениеДобавлено: Пятница, 05 Июнь, 2015 13:25 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
Ну и в чём же здесь преимущество отсутствия EXTENSIBLE, если расширять нельзя только динамические типы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение типа-указателя
СообщениеДобавлено: Пятница, 05 Июнь, 2015 14:07 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
В случае, когда один тип записи определен в одном модуле, а расширяется в другом модуле, тоже можно запретить расширение - просто не эксортировать этот тип и всё. А если экспортируется обычный тип запись, то и расширить можно. А если хочется экспортировать, но запретить расширять, то экспортировать как указатель на запись.
Как мне кажется, расширение записей идет в ногу с динамическими структурами данных. Пока не могу представить себе пример, когда используются расширенные записи без указателей на них.
Если кто-нибудь может привести такой пример, то был бы рад узнать о нем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение типа-указателя
СообщениеДобавлено: Суббота, 06 Июнь, 2015 01:10 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Rifat писал(а):
Как мне кажется, расширение записей идет в ногу с динамическими структурами данных. Пока не могу представить себе пример, когда используются расширенные записи без указателей на них.
Если кто-нибудь может привести такой пример, то был бы рад узнать о нем.

Указатель может быть в виде VAR-параметра, без объявления типа POINTER TO. Например, расширяемые типы Reader и Writer в системе Оберон были, как правило, стековые. В этом случае их можно сделать локальными переменными либо глобальными с повторным использованием, но без необходимости динамического выделения памяти.

Значение типа POINTER всегда можно передать в VAR-параметр, но не наоборот. Тип POINTER всегда требует NEW для выделения памяти. Я хочу сказать, что VAR более универсален.

За примером тоже далеко ходить не надо. БОльшая часть сообщений в ББ, если я правильно понимаю, сделаны на стековых - расширяемых - записях. Иначе он бы память жрал постоянно, если бы вызывал NEW на каждый чих мыши и клавиатуры. Зачем они расширяемые, думаю, не надо объяснять.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение типа-указателя
СообщениеДобавлено: Среда, 17 Июнь, 2015 02:06 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
Rifat писал(а):
В случае, когда один тип записи определен в одном модуле, а расширяется в другом модуле, тоже можно запретить расширение - просто не эксортировать этот тип и всё. А если экспортируется обычный тип запись, то и расширить можно. А если хочется экспортировать, но запретить расширять, то экспортировать как указатель на запись.
Заодно разрешив только динамику. КП с его EXTENSIBLE мне кажется более универсальным решением. Напоминаю, что свойством EXTENSIBLE можно пометить и указатель на запись, и запись, и метод. А можно не помечать. Т.е. минимализм Оберона-07 конечно похвален, зато КП даёт больше возможностей по варьированию описания экспорта. А регламентирование межмодульных взаимодействий — очень важная вещь. Я буду рад, если КП будет развиваться в этом направлении.

Rifat писал(а):
Как мне кажется, расширение записей идет в ногу с динамическими структурами данных. Пока не могу представить себе пример, когда используются расширенные записи без указателей на них.
Если кто-нибудь может привести такой пример, то был бы рад узнать о нем.
Здесь на форуме Илья Ермаков писал про то, что на Обероне/КП можно писать без использования указателей и нагрузки на сборщик мусора. Если можно, приводите примеры. :)

Решил в форке Ofront'а сделать как в КП — реализовать EXTENSIBLE.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение типа-указателя
СообщениеДобавлено: Среда, 17 Июнь, 2015 11:12 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Oleg N. Cher писал(а):
Я буду рад, если КП будет развиваться ...

Давайте не трогать КП.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение типа-указателя
СообщениеДобавлено: Среда, 17 Июнь, 2015 21:55 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
Я имею в виду надмножества КП, возможно, под другим названием языка.

КП — не самая плохая база для создания на ней языковых надмножеств. Как и Оберон-07.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение типа-указателя
СообщениеДобавлено: Четверг, 18 Июнь, 2015 11:10 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
А зачем вообще может понадобится запрещать расширение записей?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение типа-указателя
СообщениеДобавлено: Четверг, 18 Июнь, 2015 18:43 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну вообще-то, расширение от не-абстрактного класса (наследование реализации) по определению признак недодумки в проектировании. Да, в общем-то - и экспорт неабстрактного класса...

Ну а для исключений, которые всё же бывают, нужен EXTENSIBLE.

С другой стороны, это если говорить об объектах (записях с поведением).

Если говорить о "пассивных записях" (для параметров, для сообщений и т.п.), то по-умолчанию стоит всегда ставить EXTENSIBLE.


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

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


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

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


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

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