안전하지 않은 코드
크리스탈 언어에서 안전하지 않은 부분은 다음과 같습니다.
- 생 포인터를 포함하는 코드: Pointer 타입과 pointerof.
- allocate 클래스 메서드.
- C 바인딩을 포함하는 코드
- 초기화하지 않는 변수 선언
안전하지 않다는 것은 메모리 오염, 세그멘테이션 오류, 갑작스런 종료가 일어날 수 있다는 것입니다.
a = 1
ptr = pointerof(a)
ptr[100_000] = 2 # 정의되지 않은 동작으로 세그멘테이션 오류가 일어날 것
하지만 일반적인 코드에는 포인터 조작이나 초기화되지 않은 변수가 절대로 없습니다. 그리고 C 바인딩은 보통 널 포인터와 경계를 검사하는 래퍼로 안전하게 감싸게 됩니다.
100% 안전한 언어는 없습니다. 특정 부분에서는 운영체제와 상호작용하며 포인터를 조작하는 저수준 동작을 불가피하게 포함하게 됩니다. 하지만 추상화하여 고수준에서 돌려보고 (수학적 추론과 철저한 테스트 끝에) 저수준 부분 또한 안전하다고 생각할 수 있다면, 전체 코드가 안전하다고 여길 수 있습니다.