OberonCore https://forum.oberoncore.ru/ |
|
Расширение типа-указателя https://forum.oberoncore.ru/viewtopic.php?f=30&t=5426 |
Страница 1 из 1 |
Автор: | Oleg N. Cher [ Пятница, 05 Июнь, 2015 02:54 ] |
Заголовок сообщения: | Расширение типа-указателя |
В проекте 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'а? |
Автор: | ilovb [ Пятница, 05 Июнь, 2015 10:30 ] |
Заголовок сообщения: | Re: Расширение типа-указателя |
В справке ББ про это написано. Это было сделано в CP просто для удобства, чтобы не описывать запись и указатель на нее отдельно. Oberon 2 такое компилировать не должен по идее |
Автор: | Rifat [ Пятница, 05 Июнь, 2015 10:31 ] |
Заголовок сообщения: | Re: Расширение типа-указателя |
Oleg N. Cher писал(а): И с точки зрения: как это реализовано в Обероне-07, и почему. Возможно, будут ещё какие мысли. В Oberon-07, насколько я понимаю, так нельзя. В принципе в этом даже есть преимущество, исчезает необходимость в слове EXTENSIBLE. То есть, если, допустим, есть тип: Rec* = RECORD ... END; То он может быть расширен, до ExtRec* = RECORD (Rec) ... END; Но, если есть тип PtrRec* = POINTER TO RECORD ... END; то расширить его уже не получится. |
Автор: | Oleg N. Cher [ Пятница, 05 Июнь, 2015 13:25 ] |
Заголовок сообщения: | Re: Расширение типа-указателя |
Ну и в чём же здесь преимущество отсутствия EXTENSIBLE, если расширять нельзя только динамические типы? |
Автор: | Rifat [ Пятница, 05 Июнь, 2015 14:07 ] |
Заголовок сообщения: | Re: Расширение типа-указателя |
В случае, когда один тип записи определен в одном модуле, а расширяется в другом модуле, тоже можно запретить расширение - просто не эксортировать этот тип и всё. А если экспортируется обычный тип запись, то и расширить можно. А если хочется экспортировать, но запретить расширять, то экспортировать как указатель на запись. Как мне кажется, расширение записей идет в ногу с динамическими структурами данных. Пока не могу представить себе пример, когда используются расширенные записи без указателей на них. Если кто-нибудь может привести такой пример, то был бы рад узнать о нем. |
Автор: | Александр Ильин [ Суббота, 06 Июнь, 2015 01:10 ] |
Заголовок сообщения: | Re: Расширение типа-указателя |
Rifat писал(а): Как мне кажется, расширение записей идет в ногу с динамическими структурами данных. Пока не могу представить себе пример, когда используются расширенные записи без указателей на них. Если кто-нибудь может привести такой пример, то был бы рад узнать о нем. Указатель может быть в виде VAR-параметра, без объявления типа POINTER TO. Например, расширяемые типы Reader и Writer в системе Оберон были, как правило, стековые. В этом случае их можно сделать локальными переменными либо глобальными с повторным использованием, но без необходимости динамического выделения памяти. Значение типа POINTER всегда можно передать в VAR-параметр, но не наоборот. Тип POINTER всегда требует NEW для выделения памяти. Я хочу сказать, что VAR более универсален. За примером тоже далеко ходить не надо. БОльшая часть сообщений в ББ, если я правильно понимаю, сделаны на стековых - расширяемых - записях. Иначе он бы память жрал постоянно, если бы вызывал NEW на каждый чих мыши и клавиатуры. Зачем они расширяемые, думаю, не надо объяснять. |
Автор: | Oleg N. Cher [ Среда, 17 Июнь, 2015 02:06 ] |
Заголовок сообщения: | Re: Расширение типа-указателя |
Rifat писал(а): В случае, когда один тип записи определен в одном модуле, а расширяется в другом модуле, тоже можно запретить расширение - просто не эксортировать этот тип и всё. А если экспортируется обычный тип запись, то и расширить можно. А если хочется экспортировать, но запретить расширять, то экспортировать как указатель на запись. Заодно разрешив только динамику. КП с его EXTENSIBLE мне кажется более универсальным решением. Напоминаю, что свойством EXTENSIBLE можно пометить и указатель на запись, и запись, и метод. А можно не помечать. Т.е. минимализм Оберона-07 конечно похвален, зато КП даёт больше возможностей по варьированию описания экспорта. А регламентирование межмодульных взаимодействий — очень важная вещь. Я буду рад, если КП будет развиваться в этом направлении.Rifat писал(а): Как мне кажется, расширение записей идет в ногу с динамическими структурами данных. Пока не могу представить себе пример, когда используются расширенные записи без указателей на них. Здесь на форуме Илья Ермаков писал про то, что на Обероне/КП можно писать без использования указателей и нагрузки на сборщик мусора. Если можно, приводите примеры. Если кто-нибудь может привести такой пример, то был бы рад узнать о нем. Решил в форке Ofront'а сделать как в КП — реализовать EXTENSIBLE. |
Автор: | Info21 [ Среда, 17 Июнь, 2015 11:12 ] |
Заголовок сообщения: | Re: Расширение типа-указателя |
Oleg N. Cher писал(а): Я буду рад, если КП будет развиваться ... Давайте не трогать КП. |
Автор: | Oleg N. Cher [ Среда, 17 Июнь, 2015 21:55 ] |
Заголовок сообщения: | Re: Расширение типа-указателя |
Я имею в виду надмножества КП, возможно, под другим названием языка. КП — не самая плохая база для создания на ней языковых надмножеств. Как и Оберон-07. |
Автор: | Rifat [ Четверг, 18 Июнь, 2015 11:10 ] |
Заголовок сообщения: | Re: Расширение типа-указателя |
А зачем вообще может понадобится запрещать расширение записей? |
Автор: | Илья Ермаков [ Четверг, 18 Июнь, 2015 18:43 ] |
Заголовок сообщения: | Re: Расширение типа-указателя |
Ну вообще-то, расширение от не-абстрактного класса (наследование реализации) по определению признак недодумки в проектировании. Да, в общем-то - и экспорт неабстрактного класса... Ну а для исключений, которые всё же бывают, нужен EXTENSIBLE. С другой стороны, это если говорить об объектах (записях с поведением). Если говорить о "пассивных записях" (для параметров, для сообщений и т.п.), то по-умолчанию стоит всегда ставить EXTENSIBLE. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |