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

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

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




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

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

Отчего же? Стандартным подходом является проверка корректности входных данных у принимающей стороны как владельца инварианта. Но если "защита" была проведена ссылочным параметром, который "не может" быть 0, а если и может, то это проблема вызвавшей стороны, то это не улучшает ни читаемость, ни надёжность. Тем более, что понятие ненулевого указателя не исчерпывается тем, что в С++ называется ссылкой.


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

Сообщения: 1019
Откуда: Днепропетровская обл.
Comdiv писал(а):
Zorko писал(а):
Но видели бы Вы сколько доп. кода в компиляторе нужно, чтобы поддержать эти атрибуты.
А какая разница, если всё равно будет слой для поддержки КП?
Просто может кто-то захочет поддержать Оберон-3 в не КП-шных компиляторах. Да и эти атрибуты, я помню, были поводом для древних форумных срачей "не считать КП Обероном".

Константин, насколько я знаю Вас, апологета простоты, надёжности и Оберона-07, удивлён, что Вы лоббируете атрибуты. :-) Или мне показалось?)


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

Сообщения: 146
Zorko писал(а):
Константин, насколько я знаю Вас, апологета простоты, надёжности и Оберона-07, удивлён, что Вы лоббируете атрибуты. :-) Или мне показалось?)

Именно, что показалось. Причём показалось всё, кроме того, что я сторонник надёжности.
А так - я просто задаю вопросы.


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

Сообщения: 273
Откуда: Россия
Ставить ли ^ после указателя - вопрос спорный, потому что находится между разными уровнями абстракции. Если у меня есть массив или объект и я работаю именно с ним, то меня мало интересует, как эти данные размещены. Находятся ли они в куче или в основной памяти, доступны ли по указателю или просто по имени - это детали реализации (механизма), которыми на данном уровне абстракции я не занимаюсь. И в этом случае лишние ^ меня отвлекают, потому что мешают видеть, например, манипуляции с элементами массива, которые одинаковы и для массива по указателю и для массива по обычной переменной.
Но если я опускаюсь на уровень ниже, то здесь важен сам механизм, сами детали хранения массива. Например, беспокойство о том, что вместо массива будет NIL, как раз с этого уровня (так же как и стоимость разыменования). Вот тогда, символ ^, подчеркивающий указатель, будет полезен, потому что, внимание концентрируется не на элементах структуры, а на механизме хранения всей структуры целиком (пустой указатель - неполучение ВСЕЙ структуры).
Так что, может тут и нет "абсолютно лучше", а получается как в притче: "оба правы, и ты тоже прав". И одновременно "оба неправы". Ясность, показывающая механизм, является туманом для следующего уровня абстракции и наоборот - при опускании ^ легко забыть, что это указатель.

Ранее я приводил аналогичные рассуждения о строке, задаваемой в константном массиве. Там вроде бы удалось придумать синтаксис, явно указывающий уровень абстракции. Правда пока это не реализовано, так что неизвестно насколько это будет удачно практически. Возможно, синтаксис, которым надо явно указывать уровень абстракции, будет еще более надоедливым, чем синтаксис, одинаковый для всех уровней (и потому на некоторых излишний) :)

Кстати, в языке Ада разыменование указателя p обозначается "p.all". Т.е. для указателя на запись "p.val" - одно из полей, а "p.all" - вся запись целиком. Хотя можно написать "p.all.val". Для доступа к элементу массива через указатель q тоже можно обратиться двояко: "q.all(10)" или "q(10)".


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

Сообщения: 108
Comdiv писал(а):
Стандартным подходом является проверка корректности входных данных у принимающей стороны как владельца инварианта. Но если "защита" была проведена ссылочным параметром, который "не может" быть 0, а если и может, то это проблема вызвавшей стороны, то это не улучшает ни читаемость, ни надёжность.


Читаемость улучшается за счет отсутствия мусорных проверок в рантайме (проверка делается один раз при превращении в ссылку). Надежность улучшается за счет того, что если в процессе модификации переменная (ссылка) превращается в указатель (т.е. объект может быть нулевым в определенных ситуациях), то при попытке скормить такой указатель в функцию, которая по-прежнему принимает ссылку - получишь ошибку компиляции.

Comdiv писал(а):
Тем более, что понятие ненулевого указателя не исчерпывается тем, что в С++ называется ссылкой.


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


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

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


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

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


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

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