Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 16 апр 2024, 22:37

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




Начать новую тему Ответить на тему  [ Сообщений: 15 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Особенности диалекта Оберон-3
СообщениеДобавлено: 19 авг 2019, 18:24 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
Выделил из /viewtopic.php?f=32&t=460&p=3465#p3465 в отдельную тему

Zorko писал(а):
Также я подготовил краткое описание возможностей диалекта Оберон-3

https://github.com/Oleg-N-Cher/OfrontPlus/blob/master/Docu/Oberon-3.rtf



Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Особенности диалекта Оберон-3
СообщениеДобавлено: 19 авг 2019, 19:09 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
Чем объясняется
Цитата:
Обязательное использование ^ при обращении к указателям
В КП при обращении к указателям "^" можно опускать, в Обероне-3 нельзя.
? Только ли желанием подчеркнуть наличие указателя?
Опускать ^ в КП можно только при обращении к элементу массиву, полю записи или содержимому строки (селектор $).
Это, конечно, синтаксический сахар, но мне он кажется полезным. Он полезен тем, что сглаживает разницу между переменными в куче и в основной памяти. В большинстве случаев (если нам важно работа именно с элементами массива или записи, а не с механизмом их размещения), лишние ^ только "замусоривают" код.
Это можно сравнить с передачей параметров-переменных в языке С. Там приходится явно передавать ссылку при помощи & в параметры-указатели со значком *, а затем повсюду таскать эту звездочку (сишный аналог ^) внутри функции (и горе тому, кто забудет ее поставить). В С++ можно указать & для формальных параметров-ссылок, что дает эффект, сравнимый с пометкой VAR в Паскале. При этом, синтаксис С со & и * ближе всего к машинному коду - там явно продемонстрирован механизм. В С++ со & (и в Паскале/Модуле/Обероне с VAR) механизм передачи параметров замаскирован (можно сказать, что звездочки или ^ при параметрах-переменных невидимы), но это и хорошо.
Поэтому, думаю, лучше в О3 сделать как в КП - возможность опускать ^ при обращении к элементу массиву, полю записи или содержимому строки (селектор $).


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Особенности диалекта Оберон-3
СообщениеДобавлено: 19 авг 2019, 21:55 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Олеже, так ^ нельзя было опускать в Паскале, да и в Модуле тоже, если я верно помню.

В случае с обязательным ^ — я считаю, что эта операция должна быть описана явно, т.к. является разыменованием. Чтобы сразу было видно, что здесь не простое обращение к полю, а именно разыменование, и оно имеет свою стоимость. И может быть вылет по обращению к NIL. Опускать его просто из соображений декора — ну как-то неправильно. Мы ведь стремимся к ясности.

И звёздочка в Си — явная операция разыменования. Кстати, при обращении к полям без разыменования в Си применяется синтаксис str.field, а с ним — str->field, что тоже повышает понимание, чего там происходит на самом деле.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Особенности диалекта Оберон-3
СообщениеДобавлено: 20 авг 2019, 11:15 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Виктор Мясников поддерживает опциональное скрытие ^, и он уже второй человек, который поддержал это мнение.

Я просто стараюсь сделать, чтобы по исходнику всё было ясно: a.b это поле статической структуры. a^.b динамической, с разыменованием. Всё видно сразу, в месте использования. Но может ещё это пересмотрим.

Ещё я считаю, что ^ не сильно замусоривает исходник. Я просто ковыряю Ofront, ковыряю компилятор BlackBox, и в Ofront'е ^ прописаны явно, а в компиляторе ББ опущены. И это сбивает с толку, получается смешение стилей. Хочется бОльшей строгости, что ли.

Да, кстати, остаётся ещё одна возможность — ворнинговать, не прекращая компиляцию. И на пропущенные ^, и на пропущенные @, и на пропущенное двоеточие в x(:T). Такой вариант нас устроит? Давайте думать.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Особенности диалекта Оберон-3
СообщениеДобавлено: 20 авг 2019, 18:06 
Не в сети

Сообщения: 108
Да, для меня в сях "->" прежде всего предупреждает о том, что мы имеем дело с указателем и он может быть нулевым. Поэтому я избегаю такого кода. Применительно к оберону, наверное, это не так актуально, поскольку ссылок нормальных все равно нет (только в виде VAR параметров). Т.е. вот такое все равно написать нельзя:
Код: "C"
 
if (!p)
return error;
auto& ref = *p; // разименовали сразу поле проверки на нулевость
ref.f1(); // в отличие от "p->f1()" здесь уже не может быть никаких пробем с нулевым указателем
 


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Особенности диалекта Оберон-3
СообщениеДобавлено: 21 авг 2019, 01:05 
Не в сети

Сообщения: 146
Судя по описанию да и по названию Оберон-3 в качестве точки отсчёта берёт Оберон-2, а не Компонентный Паскаль. Почему отказались от ООП-шных нюансов КП. Олег, по предыдущим дискуссиям мне казалось, что Вам нравится, как минимум, ABSTRACT.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Особенности диалекта Оберон-3
СообщениеДобавлено: 21 авг 2019, 01:13 
Не в сети

Сообщения: 146
vlad писал(а):
Код: "C"
 
ref.f1(); // в отличие от "p->f1()" здесь уже не может быть никаких пробем с нулевым указателем
 
Что имеется ввиду? Если не может быть проблем с 0 в "ref.f1();" из-за предшествующей проверки p, то не будет проблемы и в "p->f1()". Если же проверки p не было, то и в "ref.f1()" будет точно такая же проблема с 0, как и в "p->f1()". Ссылки в этом плане добавляют не очень много(малость всё же дают), зато иллюзий создать могут вагон.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Особенности диалекта Оберон-3
СообщениеДобавлено: 21 авг 2019, 01:29 
Не в сети

Сообщения: 108
Comdiv писал(а):
vlad писал(а):
Код: "C"
 
ref.f1(); // в отличие от "p->f1()" здесь уже не может быть никаких пробем с нулевым указателем
 
Что имеется ввиду? Если не может быть проблем с 0 в "ref.f1();" из-за предшествующей проверки p, то не будет проблемы и в "p->f1()". Если же проверки p не было, то и в "ref.f1()" будет точно такая же проблема с 0, как и в "p->f1()". Ссылки в этом плане добавляют не очень много(малость всё же дают), зато иллюзий создать могут вагон.


Профит наступает когда есть всего одна проверка указателя и много последующих операций со ссылкой уже без проверок.
Код: "C"
 
auto& ref = check_non_null(p); // нельзя в обероне, но можно в С++
ref.op1();
ref.op2();
...
ref.opN();
 


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

Такие ненулевые указатели - одна из моих идей для дальнейшего расширения Еберона.

P.S. Да, я знаю, что в С++ можно легко получить "нулевую" ссылку. Но это проблема уже того кода, откуда такая ссылка пришла (не было проверки перед разыменованием, undefined behavior).


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Особенности диалекта Оберон-3
СообщениеДобавлено: 21 авг 2019, 03:40 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Comdiv писал(а):
Судя по описанию да и по названию Оберон-3 в качестве точки отсчёта берёт Оберон-2, а не Компонентный Паскаль.
Да, всё верно. Пляшем от Оберона-2, поглядывая на КП и Оберон-07. И отход от совместимости с КП развязывает нам руки.

Comdiv писал(а):
Почему отказались от ООП-шных нюансов КП. Олег, по предыдущим дискуссиям мне казалось, что Вам нравится, как минимум, ABSTRACT.
Конечно же нравится. Но видели бы Вы сколько доп. кода в компиляторе нужно, чтобы поддержать эти атрибуты. Да и язык усложняется. В то же время, не настолько оно полезно, чтобы без него ну совсем никак. Мы ведь всё же стремимся к простоте и минимализму. А эти возможности смахивают на дублирование. Хотя с точки зрения взгляда на интерфейс безусловно полезны. Но ведь Никлаус Вирт в Обероне-07 тоже отказался от экспорта переменных для записи, наверно по тем же соображениям.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Особенности диалекта Оберон-3
СообщениеДобавлено: 21 авг 2019, 23:46 
Не в сети

Сообщения: 146
Zorko писал(а):
Но видели бы Вы сколько доп. кода в компиляторе нужно, чтобы поддержать эти атрибуты.
А какая разница, если всё равно будет слой для поддержки КП?


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

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


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

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


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club