나는 컴파일 시간 인 모든 것을 좋아하며 일단 프로그램을 컴파일하면 실행에 대해 많은 보장이 이루어집니다. 일반적으로 정적 유형 시스템 (Haskell, C ++, ...)은 동적 유형 시스템보다 강력한 컴파일 타임 보장을 제공하는 것 같습니다.
내가 이해 한 바에 따르면, Ada는 컴파일 시간 검사와 관련하여 훨씬 더 나아가고 실행 전에 더 많은 버그를 감지 할 수 있습니다. 또한 특정 시점에 (프로그래밍 오류가 인명을 초래할 수있는) 섬세한 분야를 위해 선택되었다는 점을 고려하면 상당히 안전한 것으로 간주됩니다.
더 강력한 정적 보장이 더 문서화되고 안전한 코드로 이어진다면 왜 더 많은 방향으로 연구하지 않습니까?
누락 된 것으로 보이는 것의 예는 int
기본 아키텍처의 비트 수에 의해 결정되는 범위를 갖는 일반 유형을 정의하는 대신 범위를 가질 수있는 언어입니다 (다음 예 Int [a..b]
에서는 사이에 정수 유형을 설명합니다) a와 b 포함) :
a : Int [1..24]
b : Int [1..12]
a + b : Int [2..36]
a - b : Int [-11..23]
b - a : Int [-23..11]
또는 (Ada에서 가져옴) :
a : Int [mod 24]
b : Int [mod 24]
a + b : Int [mod 24]
이 언어는 범위에 가장 적합한 기본 유형을 선택하고 표현식에서 컴파일 시간 검사를 수행합니다. 예를 들어 다음과 같이 주어집니다.
a : Int [-3..24]
b : Int [3..10]
그때:
a / b
정의되지 않습니다.
이것은 단지 예일 뿐이지 만 컴파일 타임에 시행 할 수있는 것이 더 많다고 생각합니다. 그래서 왜 이것에 대한 연구가 거의 보이지 않습니까? 이 아이디어를 설명하는 기술 용어는 무엇입니까 (이 주제에 대한 추가 정보를 찾을 수 있도록)? 한계는 무엇입니까?
dependent type
하거나 refinement type
.