OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 14 Октябрь, 2019 11:45

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Как обойтись без NULL
СообщениеДобавлено: Четверг, 29 Сентябрь, 2016 17:40 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 818
Откуда: Казань
У Хоара есть интервью, где он говорит, что введение NULL в языках программирования привело к ошибкам на миллиард долларов.
Но, честно говоря, я так и не допонял как же предлагается жить без NULL.

Как вы понимаете, как обойтись без NULL?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обойтись без NULL
СообщениеДобавлено: Четверг, 29 Сентябрь, 2016 18:05 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9147
Откуда: Россия, Орёл
Ну, как вариант: если у Вас ptr: SomeObject, то должен быть нулевой элемент конкретно множества этих обьектов. Вы определяете этот нулевой обьект сами.
Который реагирует на вызовы методов каким-то образом (допустим, отдаёт нейтральные значения, ничего не делает, но при этом пишет в журнал ошибок).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обойтись без NULL
СообщениеДобавлено: Четверг, 29 Сентябрь, 2016 18:21 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1213
Откуда: Украина, Киев
Как-то трудно себе представить жизнь без NULL. Разве может быть определено всё заранее? NULL как-раз удобен для неопределённых значений.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обойтись без NULL
СообщениеДобавлено: Четверг, 29 Сентябрь, 2016 21:02 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Ярослав, а что мешает заложить NULL в тип?

Т.е. определять тип с явным указанием, что он может быть NULL.
Причем в этом случае язык не должен допускать разыменования без проверки.
На NULL ведь можно смотреть как на обычный тип.
Допустим у нас есть указатель, который может в рантайме иметь
разные типы. Например, типов два [POINTER TO Rec] и [NULL].
Тогда обращение дожно быть через WITH.

зы Вспышки на солнце чтоль: http://oberspace.dyndns.org/index.php/t ... l#msg21657
:D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обойтись без NULL
СообщениеДобавлено: Понедельник, 03 Октябрь, 2016 13:19 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 818
Откуда: Казань
ilovb писал(а):
Ярослав, а что мешает заложить NULL в тип?

Т.е. определять тип с явным указанием, что он может быть NULL.
Причем в этом случае язык не должен допускать разыменования без проверки.
На NULL ведь можно смотреть как на обычный тип.
Допустим у нас есть указатель, который может в рантайме иметь
разные типы. Например, типов два [POINTER TO Rec] и [NULL].
Тогда обращение дожно быть через WITH.

зы Вспышки на солнце чтоль: http://oberspace.dyndns.org/index.php/t ... l#msg21657
:D

В принципе так, как вы предлагаете, сделать можно. Но в любом случае, если тип [NULL], а мы попытаемся обратиться к нему как к какому-то другому типу, то должна произойти остановка программы.
И получается, что нет большой разницы, что традиционный NULL, что пустой тип NULL. И там, и там получается прерывание программы.
Думаю, что если бы был статический анализатор, который бы предупреждал о том, что может быть разыменование нулевого указателя, и не указывал бы на безопасные места, где точно не может быть разыменования нулевого указателя, то это было бы решением проблемы с NULL.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обойтись без NULL
СообщениеДобавлено: Понедельник, 03 Октябрь, 2016 14:14 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2601
Откуда: Россия, Ярославль
В целом, NULL вполне соответствует реальному миру, если есть канализационный люк - он может быть разных цветов и моделей, но если его нет - его просто нет.
И если упасть в колодец, то виноват не NULL-люк, а упавший, или укравший. :D

В императивных языках для безопасности придумали null-aware операторы. Если язык поддерживает их - этого достаточно.

А то, что некоторые пытаются притащить из функциональщины всякие монады Maybe (Optional) и так далее - ну так это же функциональщики, люди с декларативным мышлением.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обойтись без NULL
СообщениеДобавлено: Понедельник, 03 Октябрь, 2016 16:19 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 818
Откуда: Казань
Есть еще подход, как в языке Eiffel:
http://se.ethz.ch/~meyer/publications/o ... safety.pdf

Кто-нибудь разобрался в чем там суть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обойтись без NULL
СообщениеДобавлено: Среда, 11 Январь, 2017 20:06 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Пример из Rust: https://habrahabr.ru/company/echelon/bl ... t_10004052


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обойтись без NULL
СообщениеДобавлено: Среда, 11 Январь, 2017 22:24 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2601
Откуда: Россия, Ярославль
Был NULL, стал None, решение проблемы в стиле mainstream.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обойтись без NULL
СообщениеДобавлено: Среда, 11 Январь, 2017 22:53 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Пфф. Мне вообще NIL больше нраица.


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

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


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

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


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

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