C 언어의 오랜 골칫거리였던 '정의되지 않은 동작'(Undefined Behavior, UB)이 대폭 줄어들 전망입니다. C 표준 위원회는 현재 개발 중인 C2y 초안에서 기존 C 표준에 명시된 약 100개의 UB 항목 중 45개를 제거하는 작업을 진행하고 있습니다. UB는 프로그램이 표준에서 정의하지 않은 행동을 할 때 발생하며, 컴파일러가 이에 대해 '아무런 요구사항도 부과하지 않는다'는 규정 때문에 예측 불가능한 최적화와 개발자가 기대하는 실행 결과 사이에 충돌을 일으키곤 했습니다.
UB는 컴파일러가 언어 확장을 허용하고 공격적인 최적화를 수행하며, 하드웨어 안전장치와의 상호작용을 처리하는 데 자유를 주지만, 동시에 탐지하기 어려운 오류를 유발하는 원인이었습니다. 예를 들어, 0으로 나누는 연산이 포함된 코드에서 컴파일러는 해당 UB가 발생하지 않는다는 가정하에 조건 검사를 제거하거나, 심지어 관찰 가능한 다른 동작까지 변경하는 최적화를 수행하기도 했습니다. C23 표준은 이러한 '시간 역행 금지' 규정을 추가하여 일부 재배치 최적화를 막았지만, 표준 해석과 컴파일러 구현 간의 불일치는 여전히 남아 있었습니다. 현재 C 위원회는 메모리 객체 모델, 메모리 안전성, UB를 다루는 세 연구 그룹을 운영하며, 컴파일러 경고, 정적 분석기, 새니타이저 등 다양한 오류 탐지 도구의 개선도 함께 이루어지고 있습니다.
이번 UB 감소는 C 언어의 안정성과 예측 가능성을 크게 향상시킬 것입니다. 개발자들은 컴파일러의 '코에 걸면 코걸이, 귀에 걸면 귀걸이'식 최적화로부터 좀 더 자유로워져, 예상치 못한 버그 발생 위험을 줄일 수 있게 됩니다. 이는 특히 임베디드 시스템이나 운영체제 커널 등 높은 신뢰성이 요구되는 분야에서 C 언어의 활용성을 더욱 공고히 할 것으로 보입니다. 완전한 메모리 안전성을 달성하기 위해서는 런타임 검사나 형식 검증 같은 추가적인 비용이 필요하지만, C2y는 문제가 되는 오래된 기능을 제거하고 비트 정밀도 정수 타입 같은 새 기능을 추가하며 언어 자체의 현대화도 함께 추진하고 있습니다. C 언어는 여전히 발전 중이며, 장기적으로는 더 안전한 언어로 진화할 가능성을 보여주고 있습니다.