요즘 널체크를 보며 생각한건데
널러블 타입을 널체크 해주면 그 이후부턴 NonNull 로 동작하는 언어들이 많잖아?
ex) kotlin
val a : String? = foo()
if (a != null) {
// a => Not null
}
이걸 극한으로 사용해보는거임
예를 들면 이런 코드가 가능할거 같음
10 / a // 컴파일 에러: 0으로 나눌 수 없습니다
if (a != 0) 10 / a // 컴파일 에러 X
list().first() // 컴파일 에러: 비어있는 리스트에선 first 사용 불가
if (list.isNotEmpty) list.first() // 컴파일 에러 X
a값이 런타임에 바뀌면 어캄?
타입이 변하겠지?
이론상 가능은 한데, 그렇게 만들면 타입검사가 undecidable 해짐
혹시 결정불가능한 예제가 있을까
dependent typing
글에서 원하는 것과는 살짝 거리가 있지만 러스트가 비슷하게 가능함
a값이 다른 쓰레드에 의해 바뀌는 경우는 어카노 - dc App
그런건 코틀린에서도 원래 불변 여부로 스마트 캐스팅해줌
서로 쓰레드에서 데이터 엑세스마다 optional 됐다 안됐다 거리면 런타임에 관리가 되는게 맞음? - dc App
스코프 검사
게이가 원하는건 넓게 보면 정지 문제랑도 관련 있다 이기야. - dc App