기타 Lobsters · 4일 전

"goto문이 갓벽했던 이유"… 최신 언어 쓰다 C언어 복귀한 개발자의 깨달음

핵심 요약
  • Go와 Zig의 defer 기능에 익숙했던 개발자가 C 언어로 돌아와 복잡한 에러 정리 코드로 고전했습니다.
  • 존 카맥의 제어 흐름 관련 이메일을 읽고 함수 끝 단일 종료 지점과 goto를 결합한 깔끔한 자원 정리 패턴을 깨달았습니다.
  • 기피 대상으로 여겨지던 goto 문이 C 언어의 에러 처리에서는 매우 유용하다는 점을 공유했습니다.
요약 현대 프로그래밍 언어인 Go와 Zig에 익숙해져 있던 한 개발자가 최근 2018년 이후 처음으로 C 언어를 다시 다루게 되면서 겪은 예외 처리 개선 일화가 개발자 커뮤니티에서 관심을 모았습니다. 작성자는 평소 직장에서 Go를 주로 사용해 왔는데, Go에서는 자동 메모리 관리와 `defer` 키워드 덕분에 에러 발생 시 자원 해제나 전파가 매우 단순하게 처리됩니다. 또한 수동 메모리 관리가 필요한 Zig에서도 역순으로 자원을 안전하게 정리해 주는 `errdefer` 기능이 있어 큰 어려움이 없었습니다. 반면 이러한 현대적 문법이 전혀 없는 C 언어로 돌아오자, 작성자는 루프와 조건문 내부 곳곳에서 일일이 메모리를 해제하고 파일을 닫는 비효율적이고 복잡한 코드를 작성하며 곤경에 빠졌습니다. 그러던 중 작성자는 전설적인 프로그래머 존 카맥(John Carmack)이 인라인 코드에 관해 주고받은 이메일 내용을 접하며 해법을 찾았습니다. 제어 흐름을 앞으로만 진행하도록 제한한 비행 소프트웨어 사례와 대규모 조건문 블록 밖으로 코드를 재배치하는 카맥의 철학에서 힌트를 얻은 것입니다. 이를 통해 여러 지점에 흩어져 있던 정리 작업을 함수 맨 끝의 단일 종료 지점에 모아두고, `goto` 문을 활용해 깔끔하게 예외를 처리하는 방식의 유용성을 깨달았다고 전했습니다.
Sponsored · 광고