Описание тега void-safety

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

Задний план

Void-security представляет собой надежный подход, основанный на статическом анализе, чтобы гарантировать, что доступ к void target (вызывающий исключения с нулевым указателем) никогда не может происходить во время выполнения в объектно-ориентированной программе, которая удовлетворяет условиям void-безопасности. Он основан на

  1. Система типов, которая различает присоединенные и съемные типы. Присоединенные типы применяются к переменным и выражениям, которые всегда известны как присоединенные к существующим объектам во время выполнения. Съемные типы применяются к переменным и выражениям, которые могут быть пустыми.

  2. Правила действия, допускающие только

    • безопасное повторное присоединение: выражение съемного типа может быть присоединено только к переменной съемного типа, в то время как выражение присоединенного типа может быть присоединено к переменной типа с произвольным статусом присоединения.
    • доступ к инициализированным переменным: до того, как переменная станет доступной, она должна быть инициализирована. Переменная съемного типа может быть инициализирована значением Void (null), но переменная присоединенного типа должна быть установлена ​​на существующий или вновь созданный объект до ее использования.
  3. Сертифицированные шаблоны вложений (CAP): шаблоны кода, которые, например, гарантируют статус вложения выражений.

    ... -- x may be Void or attached to an object here, we do not know.
    if attached x then
            -- x is known to be attached here, so it is safe to make a call on it:
        x.foo
    end
    

Ресурсы

Отношение к другим тегам

  • notnull - void-safety гарантирует, что выражения, о которых известно, что они принадлежат к присоединенному типу во время компиляции, всегда дают существующий объект во время выполнения
  • nullpointerexception, nullreferenceexception - void-безопасность - это гарантия отсутствия этих исключений во время компиляции в любом сценарии выполнения