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 |
Автор: | 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 В принципе так, как вы предлагаете, сделать можно. Но в любом случае, если тип [NULL], а мы попытаемся обратиться к нему как к какому-то другому типу, то должна произойти остановка программы. И получается, что нет большой разницы, что традиционный NULL, что пустой тип NULL. И там, и там получается прерывание программы. Думаю, что если бы был статический анализатор, который бы предупреждал о том, что может быть разыменование нулевого указателя, и не указывал бы на безопасные места, где точно не может быть разыменования нулевого указателя, то это было бы решением проблемы с NULL. |
Автор: | Пётр Кушнир [ Понедельник, 03 Октябрь, 2016 14:14 ] |
Заголовок сообщения: | Re: Как обойтись без NULL |
В целом, NULL вполне соответствует реальному миру, если есть канализационный люк - он может быть разных цветов и моделей, но если его нет - его просто нет. И если упасть в колодец, то виноват не NULL-люк, а упавший, или укравший. В императивных языках для безопасности придумали 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/ |