OberonCore
https://forum.oberoncore.ru/

Как обойтись без NULL
https://forum.oberoncore.ru/viewtopic.php?f=86&t=5904
Страница 1 из 1

Автор:  Rifat [ Четверг, 29 Сентябрь, 2016 17:40 ]
Заголовок сообщения:  Как обойтись без NULL

У Хоара есть интервью, где он говорит, что введение NULL в языках программирования привело к ошибкам на миллиард долларов.
Но, честно говоря, я так и не допонял как же предлагается жить без NULL.

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

Автор:  Илья Ермаков [ Четверг, 29 Сентябрь, 2016 18:05 ]
Заголовок сообщения:  Re: Как обойтись без NULL

Ну, как вариант: если у Вас ptr: SomeObject, то должен быть нулевой элемент конкретно множества этих обьектов. Вы определяете этот нулевой обьект сами.
Который реагирует на вызовы методов каким-то образом (допустим, отдаёт нейтральные значения, ничего не делает, но при этом пишет в журнал ошибок).

Автор:  Ярослав Романченко [ Четверг, 29 Сентябрь, 2016 18:21 ]
Заголовок сообщения:  Re: Как обойтись без NULL

Как-то трудно себе представить жизнь без NULL. Разве может быть определено всё заранее? NULL как-раз удобен для неопределённых значений.

Автор:  ilovb [ Четверг, 29 Сентябрь, 2016 21:02 ]
Заголовок сообщения:  Re: Как обойтись без NULL

Ярослав, а что мешает заложить NULL в тип?

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

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

Автор:  Rifat [ Понедельник, 03 Октябрь, 2016 13:19 ]
Заголовок сообщения:  Re: Как обойтись без NULL

ilovb писал(а):
Ярослав, а что мешает заложить NULL в тип?

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

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

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

Автор:  Пётр Кушнир [ Понедельник, 03 Октябрь, 2016 14:14 ]
Заголовок сообщения:  Re: Как обойтись без NULL

В целом, NULL вполне соответствует реальному миру, если есть канализационный люк - он может быть разных цветов и моделей, но если его нет - его просто нет.
И если упасть в колодец, то виноват не NULL-люк, а упавший, или укравший. :D

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

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

Автор:  Rifat [ Понедельник, 03 Октябрь, 2016 16:19 ]
Заголовок сообщения:  Re: Как обойтись без NULL

Есть еще подход, как в языке Eiffel:
http://se.ethz.ch/~meyer/publications/o ... safety.pdf

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

Автор:  ilovb [ Среда, 11 Январь, 2017 20:06 ]
Заголовок сообщения:  Re: Как обойтись без NULL

Пример из Rust: https://habrahabr.ru/company/echelon/bl ... t_10004052

Автор:  Пётр Кушнир [ Среда, 11 Январь, 2017 22:24 ]
Заголовок сообщения:  Re: Как обойтись без NULL

Был NULL, стал None, решение проблемы в стиле mainstream.

Автор:  ilovb [ Среда, 11 Январь, 2017 22:53 ]
Заголовок сообщения:  Re: Как обойтись без NULL

Пфф. Мне вообще NIL больше нраица.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/