NaN이 파이썬과 Lua의 설계를 어떻게 깨뜨리는가

Two Case Studies of NaN

IEEE-754의 NaN은 자기 자신과 같지 않다는 특성 때문에 프로그래밍 언어 설계에서 종종 간과됩니다. 이 글은 NaN이 파이썬과 Lua의 암묵적 가정을 위반하는 두 사례를 분석합니다. 파이썬에서는 리스트 동등성 비교 시 최적화를 위해 객체 ID를 먼저 비교하는데, 이로 인해 `[nan] == [nan]`이 `True`가 되는 모순이 발생합니다. Lua의 수치 for 루프에서는 NaN이 비교 연산자에 따라 예측 불가능한 동작을 보여줍니다. 저자는 NaN이 특정 비교 연산자를 인터프리터 동작에 노출시킨다고 지적하며, Lua가 0을 스텝으로 사용할 때 오류를 내는 것처럼 NaN도 명시적으로 차단해야 한다고 제안합니다.

NaN을 사용하면 구현에서 사용하는 특정 비교 연산자가 인터프리터의 동작으로 새어 나옵니다.

이 날의 다른 글

2026-07-14