Jump to content

Пустотная безопасность

(Перенаправлено с Null Safety )

Безопасная безопасность (также известная как нулевая безопасность ) — это гарантия в объектно-ориентированном языке программирования , что никакие ссылки на объекты не будут иметь нулевые или недействительные значения.

В объектно-ориентированных языках доступ к объектам осуществляется посредством ссылок (или, что то же самое, указателей ). Типичный вызов имеет вид:

x.f(a, ...)

где f обозначает операцию, а x обозначает ссылку на некоторый объект. Однако во время выполнения ссылка может быть недействительной (или нулевой ). В таких случаях приведенный выше вызов будет вызовом void во время выполнения , приводящим к исключению , что часто приводит к ненормальному завершению программы.

Безопасность Void — это статическая (во время компиляции) гарантия того, что вызов void никогда не возникнет.

В своем выступлении в 2009 году Тони Хоар связал изобретение нулевого указателя с разработкой языка ALGOL W и назвал это «ошибкой»:

Я называю это своей ошибкой на миллиард долларов. Это было изобретение нулевой ссылки в 1965 году. В то время я разрабатывал первую комплексную систему типов для ссылок на объектно-ориентированном языке (ALGOL W). Моя цель состояла в том, чтобы гарантировать, что любое использование ссылок должно быть абсолютно безопасным, с автоматической проверкой, выполняемой компилятором. Но я не смог устоять перед искушением добавить нулевую ссылку просто потому, что это было так легко реализовать. Это привело к бесчисленным ошибкам, уязвимостям и сбоям в системе, которые, вероятно, причинили боль и ущерб на миллиард долларов за последние сорок лет. [1]

Бертран Мейер ввел термин «пустотная безопасность». [2]

В языках программирования

[ редактировать ]

Первой попыткой гарантировать пустотную безопасность была разработка языка программирования Self .

Язык Eiffel безопасен в соответствии со стандартом ISO - ECMA ; механизм void-safety реализован в EiffelStudio, начиная с версии 6.1 , и с использованием современного синтаксиса, начиная с версии 6.4 .

В языке Spec#, исследовательском языке Microsoft Research, есть понятие «типа, не допускающего значения NULL», обеспечивающего безопасность пустот. Язык F# , функциональный язык, разработанный Microsoft Research и работающий на платформе .NET, является безопасным для пустот, за исключением случаев взаимодействия с другими языками .NET. [3]

Нулевая безопасность, основанная на типах объединения

[ редактировать ]

С 2011 года несколько языков поддерживают типы объединения и типы пересечений , которые можно использовать для обнаружения возможных нулевых указателей во время компиляции с использованием специального класса Null, уникальным экземпляром которого является значение null.

Нулевая безопасность, основанная на типах, впервые появилась на Ceylon , а вскоре и на TypeScript .

Язык C# реализует нулевую проверку безопасности во время компиляции, начиная с версии 8. Однако, чтобы оставаться совместимым со старыми версиями языка, эта функция включается отдельно для каждого проекта или для каждого файла. [4]

Язык Google Dart реализует его начиная с версии 2.0 в августе 2018 года. [5] [6]

Другие языки, которые по умолчанию используют нулевые типы, включают Kotlin от JetBrains , [7] Ржавчина , [8] от Apple и Swift .

См. также

[ редактировать ]
  1. ^ CAR Hoare: Null References: The Billion Dollar error , отрывок из выступления на QCon в Лондоне, 9–12 марта 2009 г., доступно онлайн.
  2. ^ Бертран Мейер: Прикрепленные типы и их применение к трем открытым проблемам объектно-ориентированного программирования , в ECOOP 2005 (Материалы Европейской конференции по объектно-ориентированному программированию, Эдинбург, 25–29 июля 2005 г.) , изд. Эндрю Блэк, Конспекты лекций по информатике 3586, Springer Verlag, 2005, страницы 1–32, также доступно в Интернете.
  3. ^ Сайм, Дон. «Цитата недели: «Что может C# такого, чего не может F#?» » . Проверено 7 сентября 2018 г.
  4. ^ «Ссылочные типы, допускающие значение NULL | Microsoft Docs» . Проверено 12 марта 2021 г.
  5. ^ Мур, Кевин (07 августа 2018 г.). «Анонс Dart 2 Stable и веб-платформы Dart» . Дарт . Проверено 8 августа 2018 г.
  6. ^ «Звучит нулевая безопасность | Дарт» . Проверено 12 марта 2021 г.
  7. ^ «Нулевая безопасность — Котлин» . Проверено 12 марта 2021 г.
  8. ^ «Определение перечисления — язык программирования Rust» . doc.rust-lang.org . Проверено 26 июня 2021 г.


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 392285f7dafdc2099bc76683031e6c9e__1692648180
URL1:https://arc.ask3.ru/arc/aa/39/9e/392285f7dafdc2099bc76683031e6c9e.html
Заголовок, (Title) документа по адресу, URL1:
Void safety - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)