더북(TheBook)

아쉬운 점

지그는 C 언어 상호 운용성을 갖추었지만 그 인내심에는 한계가 있다. 여기에서 인내심이란 타입 시스템을 뜻하며 C 언어보다 다소 엄격하다. 지그에는 다행히 C 언어처럼 말 그대로 프로그램 텍스트로 무엇이든 할 수 있게 하는 전처리기 매크로가 없다. postgres.h 헤더 가져오기는 사실 ‘단순히’ import를 선언하는 것보다 약간 더 복잡했다. 처음에는 복잡한 C 매크로가 겹겹이 중첩된 탓에 코드를 트랜스파일하는 데 실패했기 때문이다. 다행히도 지그는 생성된 코드를 개발자가 확인할 수 있는 구조여서 몇몇 부분은 직접 수정할 수 있었다.

아쉬운 점이 또 하나 있다면 바로 소멸자가 없다는 것이다. C++와 러스트에서는 무언가 범위를 벗어날 때 소멸자가 암묵적으로 호출되는데, 이 방식만큼은 참 좋다고 생각한다. 지그는 암묵적인 작동을 선호하지 않는다. 그 자체로는 문제없지만 우리에게는 맞지 않았다. 우리 코드는 몇 군데에서 메모리 누수가 발생했다. 모든 지점에서 defer 호출을 올바르게 넣는 데 실패한 까닭이었다. 또 지그는 모든 힙 할당을 명시적으로 하도록 강제한다. 아주 훌륭한 설계 결정이다. 일반적으로는 잘 작동했을 것이다. 다만 우리는 PostgreSQL 코드를 상호 운용해야 했고 그 코드에서는 자체 할당자를 사용해야 하는데, 지그에서는 (아직도?) 그런 방식을 지원하지 않는다.