보이드 안전
Void safetyVoid safety(Null safety라고도 함)는 개체 참조가 null 또는 void 값을 가지지 않는 개체 지향 프로그래밍 언어 내의 보증이다.
객체 지향 언어에서 객체에 대한 접근은 참조(또는 동등하게 포인터)를 통해 달성된다.일반적인 통화 형식:
x.f(a, ...)
여기서 f는 작업을 나타내며 x는 일부 객체에 대한 참조를 나타낸다.그러나 실행 시 참조는 무효(또는 무효)될 수 있다.그러한 경우, 위의 호출은 무효 호출이 되어 런타임 예외로 이어지고, 종종 프로그램의 비정상적인 종료가 초래된다.
무효 안전은 무효 통화가 절대 발생하지 않는다는 정적(비례 시간) 보증이다.
역사
2009년 강연에서 토니 호어는 자신의 ALGOL W 언어 디자인에 대해 null 포인터의 발명을 추적했고 그것을 "실수"라고 불렀다.
나는 그것을 내 억만 달러의 실수라고 부른다.1965년에 무효 참조가 발명되었다.당시 나는 개체 지향 언어(ALGOL W)로 참조를 위한 최초의 종합 타입 시스템을 설계하고 있었다.내 목표는 컴파일러에 의해 자동으로 수행되는 검사로, 참조의 모든 사용이 절대적으로 안전해야 한다는 것이었다.그러나 단순히 실행이 너무 쉽다는 이유만으로 무효참고를 하고 싶은 유혹을 뿌리칠 수가 없었다.이로 인해 수많은 오류와 취약성, 시스템 충돌로 이어져 지난 40년 동안 아마도 10억 달러의 고통과 피해를 입혔을 것이다.[1]
베르트랑 마이어는 "void safety"[2]라는 용어를 소개했다.
프로그래밍 언어에서
보이드 안전을 보장하려는 초기 시도는 자체 프로그래밍 언어의 설계였다.
에펠 언어는 ISO-ECMA 표준에 따라 void-safe이다. void-safety 메커니즘은 버전 6.1부터 에펠스튜디오에서 구현되며 버전 6.4부터 현대 구문을 사용한다.
Microsoft Research의 연구 언어인 Spec# 언어는 무효 안전을 다루는 "nullable type" 개념을 가지고 있다.F# 언어, 마이크로소프트 리서치의 기능적 우선 언어 입니다.NET Framework는 다른 와 상호 운용하는 경우를 제외하고 void-safe이다.NET 언어.[3]
유니언 종류에 따른 Null 안전
2011년 이후, null 값이 고유한 인스턴스인 특수 클래스 Null을 사용하여 컴파일 시 가능한 null 포인터를 검출하는 데 사용할 수 있는 조합 유형과 교차로 유형을 지원하는 언어가 여러 개 있다.
타입을 기반으로 한 null 안전이 먼저 실론에서 나타났고, 곧이어 타입스크립트가 등장했다.
C# 언어는 버전 8 이후 컴파일 시간 null 안전 검사를 구현한다.그러나 언어의 이전 버전과 호환성을 유지하기 위해 이 기능은 프로젝트별 또는 파일별로 선택된다.[4]
구글의 다트 언어는 2018년[5][6] 8월 버전 2.0 이후 이를 구현한다.
기본적으로 null-safe 유형을 사용하는 다른 언어로는 JetBrains의 Kotlin,[7] Rust,[8] Apple의 Swift 등이 있다.
참고 항목
참조
- ^ C.A.R. Hoare: Null Reference: 2009년 3월 9~12일 QCon London에서의 강연 내용을 요약한 The Million Dollocks는 온라인에서 이용할 수 있다.
- ^ 베르트랑 마이어:첨부된 유형과 객체 지향 프로그래밍의 세 가지 개방적 문제에 대한 적용, ECOOP 2005 (Enderburgh, 2005년 7월 25-29일 유럽 객체 지향 프로그래밍 회의의 진행), edd. Andrew Black, 컴퓨터 과학 3586, Springer Verlag, 2005, 1-32페이지) 또한 온라인에서 이용할 수 있다.
- ^ Syme, Don. "Quote of the Week: "What can C# do that F# cannot?"". Retrieved 7 September 2018.
- ^ "Nullable reference types Microsoft Docs". Retrieved 12 March 2021.
- ^ Moore, Kevin (2018-08-07). "Announcing Dart 2 Stable and the Dart Web Platform". Dart. Retrieved 2018-08-08.
- ^ "Sound null safety Dart". Retrieved 12 March 2021.
- ^ "Null safety—Kotlin". Retrieved 12 March 2021.
- ^ "Defining an Enum - The Rust Programming Language". doc.rust-lang.org. Retrieved 2021-06-26.