OberonCore
https://forum.oberoncore.ru/

Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар
https://forum.oberoncore.ru/viewtopic.php?f=27&t=1320
Страница 1 из 8

Автор:  Geniepro [ Понедельник, 26 Январь, 2009 10:30 ]
Заголовок сообщения:  Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард долларов"
Tony Hoare. "Null References: The Billion Dollar Mistake"
Track: Historically bad ideas

Abstract: I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years. In recent years, a number of program analysers like PREfix and PREfast in Microsoft have been used to check references, and give warnings if there is a risk they may be non-null. More recent programming languages like Spec# have introduced declarations for non-null references. This is the solution, which I rejected in 1965.

Стоит ли упоминать, что в ФП нет ссылок, а следовательно и проблемы нулевых ссылок... :lol:

ЗЫ. Говорят, в Аде эта проблема не так остра, так как там есть non-null references. Вот вам и язык, который "doomed to success"... :mrgreen:

Автор:  Wlad [ Понедельник, 26 Январь, 2009 12:40 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Geniepro писал(а):
Стоит ли упоминать, что в ФП нет ссылок, а следовательно и проблемы нулевых ссылок... :lol:
ЗЫ. Говорят, в Аде эта проблема не так остра, так как там есть non-null references. Вот вам и язык, который "doomed to success"... :mrgreen:

Это всё - гут, но даже выдающуюся систему управления DeepSpace One (не смотря на все грандиозные заделы и результаты) с Лиспа на Си++ перевели просто по причине неудовлетворения РТ-требованиям.
В системе управления не надо, что бы 1000000 раз среагировали за наносекунду, а на 1000001 раз - за полсекунды. Надо - пусть за миллисекунду (+/- пятьдесят наносекунд) - НО - ГАРАНТИРОВАНО ПОСТОЯННО!
В системах со сборкой мусора, не смотря на отчёты по диссерам, пока никто такого не достиг...
К СОЖАЛЕНИЮ...
А то б я первый побежал системы управления свои на Лисп или Схему переписывать...

Автор:  Valery Solovey [ Понедельник, 26 Январь, 2009 13:03 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Автоматическая сборка мусора - это совсем другой вопрос.

Автор:  Wlad [ Понедельник, 26 Январь, 2009 13:52 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Valery Solovey писал(а):
Автоматическая сборка мусора - это совсем другой вопрос.

Тока картинка - та же: ОЧЕНЬ дорогой фейерверк в пол-неба, воронка с футбольное поле и гектары, засеянные обломками...

Автор:  Valery Solovey [ Понедельник, 26 Январь, 2009 14:56 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Я, конечно, не работал с РВ, но мне кажется, что совмещение освобождения памяти и создания нового объекта будет гораздо меньше, чем у сборщика и относительно небольшим по сравнению с ручным освобождением памяти. Под совмещением я подразумеваю немедленное автоматическое освобождение памяти при указании ссылки на новый объект (и если счётчик ссылок на объект обнулён). Самое важное для РВ - предсказуемость? Ну так здесь всё предсказуемо.

PS. Это решение в лоб. Возможно, найдётся что-то и получше.

Автор:  Geniepro [ Понедельник, 26 Январь, 2009 15:10 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Владимир Лось писал(а):
Valery Solovey писал(а):
Автоматическая сборка мусора - это совсем другой вопрос.

Тока картинка - та же: ОЧЕНЬ дорогой фейерверк в пол-неба, воронка с футбольное поле и гектары, засеянные обломками...

Ну, фейерверк на полмиллиарда долларов (Ариан-5) был вовсе не из-за сборщика мусора... :lol:

Автор:  Борис Рюмшин [ Понедельник, 26 Январь, 2009 15:20 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Geniepro писал(а):
Владимир Лось писал(а):
Ну, фейерверк на полмиллиарда долларов (Ариан-5) был вовсе не из-за сборщика мусора... :lol:

И не из-за NIL dereference.

Я тут уже чую повод для беспочвенной драки, поэтому предупреждаю заранее всех присутствующих, что я здесь. :mrgreen:

Автор:  Vlad [ Понедельник, 26 Январь, 2009 15:28 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Geniepro писал(а):
ЗЫ. Говорят, в Аде эта проблема не так остра, так как там есть non-null references. Вот вам и язык, который "doomed to success"... :mrgreen:


Ну в C++ ссылки по определеннию ненулевые (в отличие от указателей). Толку то? :) Как только появляется понятие состояния (с которым так успешно борются в ФП), то появляется и необходимость в нулевых ссылках (указателях в терминах C++).

Автор:  Trurl [ Понедельник, 26 Январь, 2009 15:51 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Geniepro писал(а):
Стоит ли упоминать, что в ФП нет ссылок, а следовательно и проблемы нулевых ссылок... :lol:


А чем nil отличается от нулевой ссылки? ;)

Автор:  Geniepro [ Понедельник, 26 Январь, 2009 16:18 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Trurl писал(а):
Geniepro писал(а):
Стоит ли упоминать, что в ФП нет ссылок, а следовательно и проблемы нулевых ссылок... :lol:


А чем nil отличается от нулевой ссылки? ;)

Ну... например, тем, что с ним нет проблем, как с нулевыми ссылками? :roll:

Автор:  Vlad [ Понедельник, 26 Январь, 2009 17:14 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Vlad писал(а):
Как только появляется понятие состояния (с которым так успешно борются в ФП), то появляется и необходимость в нулевых ссылках (указателях в терминах C++).


Хотя наличие состояния всего-лишь усугубляет ситуацию :) Корень, как мне кажется, в неявности разыменования. Если бы для разыменования ссылки (которая может быть нулевой) всегда требовалось указать "обработчик" для случая нулевой ссылки, то проблем стало бы меньше (осмысленный "обработчик", а не выброс какого-нибудь "null dereference"). В случае ФП это приводит к каскадному протаскиванию вверх какого-нибудь "may be" результата, от которого никак не избавиться, пока не укажешь правильный "обработчик" для этого "may be".
Когда появляется состояние, которое может быть нулевым (требует "инициализации"), то все функции для работы с этим состоянием превращаются в "may be", что совершенно непрактично. Вывод все тот-же, что и в теме про "локализацию состояния" - глобальное состояние это зло :)

Автор:  Trurl [ Понедельник, 26 Январь, 2009 19:33 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Geniepro писал(а):
Ну... например, тем, что с ним нет проблем, как с нулевыми ссылками? :roll:


А можо пример проблемы, которая есть с нулевыми ссылками и нет с nil.

Автор:  Клоп Говорун [ Понедельник, 26 Январь, 2009 20:15 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Цитата:
Я тут уже чую повод для беспочвенной драки, поэтому предупреждаю заранее всех присутствующих, что я здесь.

Правильно,правильно-мне тоже не нравиться разворот темы с указателями...

Автор:  Wlad [ Понедельник, 26 Январь, 2009 23:23 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Valery Solovey писал(а):
... мне кажется ...

Вам не кажется! Даю определяющую наводку: Inferno+Limbo
Тока в Стиксе не утоните и не понукайте Харона... :о)

ЗЫ вот только что-то давненько не было обновлениев хвицияльных... То ли у них всё так гут в последней версии, что стабильность на уровне мечт, то ли кануло и это в Лету...

Автор:  Wlad [ Понедельник, 26 Январь, 2009 23:57 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Geniepro писал(а):
Ну, фейерверк на полмиллиарда долларов (Ариан-5) был вовсе не из-за сборщика мусора... :lol:

Ну уж от кого не ожидал не виденья за деревьями леса, так это от Вас!
При чём тут NIL/не NIL?
Я что зря о ВРЕМЕНИ разговор завёл?
У Вас есть реально работающий с повторяемым 100% результатом СМ с гарантированным невозмущением среднего времени цикла сборки мусора? Я о таких не слышал... Какие-то очередные ура-отчёты читал, но и NASA, когда умудряется Яву втиснуть в свои наработки, втискивает её в РВ-варианте, где чётко прописано, что в дельных местах СМ (даже заявленным, как РВ) даже и пахнуть не должно!

Автор:  Geniepro [ Вторник, 27 Январь, 2009 08:55 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Владимир Лось писал(а):
Geniepro писал(а):
Ну, фейерверк на полмиллиарда долларов (Ариан-5) был вовсе не из-за сборщика мусора... :lol:

Ну уж от кого не ожидал не виденья за деревьями леса, так это от Вас!
При чём тут NIL/не NIL?
Я что зря о ВРЕМЕНИ разговор завёл?
Ну хорошо, тогда Вы, наверное, сможете привести примеры ракет, взорвавшихся от сборщика мусора? А то я слышал только об Ариане-5, у которого была проблема из-за неверного алгоритма и недостаточного тестирования унаследованного кода, о ракете, не долетевшей до Венеры из-за точки вместо запятой в программе на фортране, и о шаттле, у которого вообще была аппаратная проблема (замерзшая резиновая прокладка [или клапан?])...
А ещё я слышал про космический аппарат, в котором за сотни тысяч миль на ходу исправляли какую-то алгоритмическую ошибку в коде на лиспе, в котором есть GC и горячая замена кода...

Владимир Лось писал(а):
У Вас есть реально работающий с повторяемым 100% результатом СМ с гарантированным невозмущением среднего времени цикла сборки мусора? Я о таких не слышал... Какие-то очередные ура-отчёты читал, но и NASA, когда умудряется Яву втиснуть в свои наработки, втискивает её в РВ-варианте, где чётко прописано, что в дельных местах СМ (даже заявленным, как РВ) даже и пахнуть не должно!

У меня лично -- нет, увы. Не занимаюсь я этой областью. И вообще, когда занимался, обходился без динамического распределения памяти -- в сотне байт что распределять-то динамически?

А Вы интересовались сборщиком мусора Эрланга? Он хоть и "soft real time", но всё же там вроде более-менее параметры должны быть. На каждый процесс -- собственный GC, так что время каждой сборки незаметно и почти не сказывается на отзывчивость системы. Ну, может там и нет гарантии в +-5% (я просто не в курсе), но и на несколько порядков задержек тоже быть не должно...

Автор:  Geniepro [ Вторник, 27 Январь, 2009 09:01 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Trurl писал(а):
Geniepro писал(а):
Ну... например, тем, что с ним нет проблем, как с нулевыми ссылками? :roll:


А можо пример проблемы, которая есть с нулевыми ссылками и нет с nil.

Под nil Вы имеете в виду конструктор пустого списка в ФП? А какие с ними вообще проблемы-то? :shock:

А если этот Ваш nil -- значение нулевой ссылки как в паскалях да адах, то ну извините, проблемы по определению. Аж даже сам Хоар просил прощения у всего программерсокого сообщества за это своё изобретение... :mrgreen:

Автор:  Wlad [ Вторник, 27 Январь, 2009 11:35 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Geniepro писал(а):
Ну хорошо, тогда Вы, наверное, сможете привести примеры ракет, взорвавшихся от сборщика мусора?
НЕТ, КОНЕЧНО!
Мне даже интересно будет посмотреть на того ИДИОТА, который систему управления с ПО, использующего современные СМ, всунет в разгонные блоки...
Geniepro писал(а):
А ещё я слышал про космический аппарат, в котором за сотни тысяч миль на ходу исправляли какую-то алгоритмическую ошибку в коде на лиспе, в котором есть GC и горячая замена кода...
Шикарно.
RAX (так, по-моему), конечно интересным проектом БЫЛ.
Теперь остаётся вопрос, подобный тому, что задают обероновцам: если всё такое белое и пушистое, чего ж это такой славный подход и опыт с такими чудесными результатами не применяют в остальных конструкциях NASA? Вот про тот вариант, который был после лисповского, на Си++, я знаю, что он (не всегда весь, частями, блоками) пошёл в остальные системы управления, был реализован на куче платформ и в нескольких исполняющих системах (осях)...
Учитывая год создания Гатовского лиспового варианта и прогресс техники (при том, как успешно справлялся ТОТ вариант на ТОЙ технике) и ПО, странно не видеть желание руководителей и управленцев не заметь столь сладкую конхветку... Где всё почти «само собой» и такое гибкое и настраиваемое, шо аж налету «переобувается и портянки перематывае»...
И что ж это Гат, такой выдающийся работник, оказался не востребованным в такое «сложное время», ушёл из NASA (афигеть! Скольких, интерсно, можно назвать ПО-шников, попавших туда, а потом уволившихся сами???.. :) ) и даже имя сменил?...
Владимир Лось писал(а):
в сотне байт что распределять-то динамически?
А вот — не надо! Это я в сотне байт управление заслонками движка по совокупности нескольких параметров делаю. Но системы уровня RAX — это совсем другое дело. Там на порядки параметров и состояний больше и пермалывающих это всё исполняемых сущностей.
Владимир Лось писал(а):
А Вы интересовались сборщиком мусора Эрланга? Он хоть и "soft real time", но всё же там вроде более-менее параметры должны быть. На каждый процесс -- собственный GC, так что время каждой сборки незаметно и почти не сказывается на отзывчивость системы. Ну, может там и нет гарантии в +-5% (я просто не в курсе), но и на несколько порядков задержек тоже быть не должно...
Винда — тоже «мягкое» РВ.
Вот у нас смежники свою часть на Вин98 сделали. Их тесты все классно проходили. Но это когда на её экран просто смотрели, без оператора-прапорщика за пультом... А тут ему понадобилось посмотреть монитор производительности системы. И, именно, во время прохождения КА и съёма с него телеметрии и данных... Я вижу, что у меня ними по RS232 связь пропала, кричу: «я вас не вижу, пакеты не идут!», а у них лица вытянутые: триста страниц обоснования, как это выгодно было делать на винде (привычночть сред разработки, системы исполнения, «проверенный годами эксплуатации» код Оси...) и - одно нажатие мышки прапором... :)
Ну ладно, здесь я согласен, был фактор в виде прапорщика, а вдруг винде захочется со своп-файлом разобраться?! Вот тока не надо говорить «что такого никогда не будет»... Это — самая мрачная фраза из моего опыта программирования! Когда заказчик, начальство или коллеги её произносят, у меня инстинктивно, пардон, все сфинкторы сжимаются и хочется со свечкой по углам обойти и святой водой окропить... В данном случае, при имеющихся СМ и НЕМИНУЕМОСТИ наступания момента, когда вашей системе на ФЯ не хватит памяти, ОСи сильно понадобится поработать со страницами на винте... Со всеми вытекающими...
Я буду согласен, когда у меня ОЗУ безмерно будет, применять Лисп/Схему... Но! Опять-таки, ну нет строго определённых по времени работы алгоритмов сборки мусора... Хоть ты тресни! Придумают – хвала, а пока, что даже Эрланг прячется полустыдливо за словосочетанием «мягкое РВ»... Ага, - «мягкое»... Тока последствия бывают сильно жёсткими.

Автор:  Илья Ермаков [ Вторник, 27 Январь, 2009 16:23 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Geniepro писал(а):
А если этот Ваш nil -- значение нулевой ссылки как в паскалях да адах, то ну извините, проблемы по определению. Аж даже сам Хоар просил прощения у всего программерсокого сообщества за это своё изобретение... :mrgreen:


Можете внятно объяснить существо проблемы с NIL?

Не могу понять. Есть структура данных - модель реального объекта. В её описании указано, что она может иметь связь с другим объектом. Чем противоестественна, в общем случае, ситуация, когда объект может иметь связь, но в данный момент её не имеет?

Автор:  Vlad [ Вторник, 27 Январь, 2009 16:34 ]
Заголовок сообщения:  Re: Хоар: "Нулевые ссылки -- ошибка стоимостью в миллиард доллар

Илья Ермаков писал(а):
Не могу понять. Есть структура данных - модель реального объекта. В её описании указано, что она может иметь связь с другим объектом. Чем противоестественна, в общем случае, ситуация, когда объект может иметь связь, но в данный момент её не имеет?


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

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