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