C++ Insights, 컴파일러의 눈으로 소스 코드를 보여주는 도구
C++ Insights – See your source code with the eyes of a Compiler
C++ Insights는 Clang 기반의 소스-투-소스 변환 도구로, 컴파일러가 내부적으로 처리하는 코드를 개발자가 작성한 C++ 형태로 보여준다. 람다, 범위 기반 for 루프, 구조적 바인딩, auto 타입 추론, 암시적 형변환 등이 컴파일러 내부에서 어떻게 변환되는지 확인할 수 있다. Andreas Fertig가 2017년에 시작했으며, 온라인에서 바로 사용 가능하고 Vim, Neovim, VSCode, Homebrew 등 다양한 환경을 지원한다.
C++ Insights의 목표는 일반적으로 의도적으로 뒤에서 일어나는 일들을 가시화하는 것이다. 이는 컴파일러가 우리를 위해 해주는 마법에 관한 것이다.
- f1shy
이 도구를 좋아하면서도 뭔가 이상한, 슬픔과 분노, 짜증, 실망 사이 어딘가의 감정(정확히 표현하기 어렵다)을 느끼는 사람은 나뿐인가 보다. 언어가 이런 도구를 필요로 한다는(적어도 유용하게 쓰인다는) 사실이 그렇다.
마치 내 코드의 첫 번째 해석이 명확했으면 좋겠다는 것과 같다. 고급 최적화나 사소한 컴파일러 트릭에 관한 게 아니라 언어 자체에 관한 문제다. 이 도구는 어떤 C++ 컴파일러에서도 유용하다. 어떻게 이렇게 복잡한 언어로 끝나게 된 걸까?
내 말은(죄송하지만 매우 개인적인 견해다) 프로그래밍 언어는 나에게 문제와 그 해결책에 대해 생각하도록 도와주는 도구다. LLM 시대인 지금은 예전보다 더욱 그렇다. 기계에게 뭔가를 시키기 위한 도구가 아니라, 수학처럼 아이디어와 문제, 해결책을 형식화하기 위한 언어다. 변호사가 되어야 이해할 수 있을 만큼 난해해서는 안 되지 않나? 아니면 내가 아주 늙어서 내 생각에 완전히 빠져 있는 건가?
- jsrcout
당연히 써볼 거다. 특히 C++에서는 항상 "컴파일러는 대체 무슨 생각을 하는 거지?"라는 문제가 있었다.
- alankarmisra
오, 이런 것 정말 좋아한다. 나는 C++ -> Clang -> JS 트랜스파일러를 작성해서 HTML로 C++ 소스 코드 위에 값 변경 상태를 보여주고 사람들이 전체 상태 변화를 단계별로 따라갈 수 있게 했다. 입력을 바꾸면 값이 변하는 것도 볼 수 있는데, JS 레이어가 값을 다시 계산할 수 있기 때문이다. 그래서 트랜스파일링을 굳이 한 것이다. 그렇지 않았다면 상태 변화를 출력해서 단계별로 CSV로 파싱하기만 했을 테니까. 재미있는 프로젝트였다!