이름은 낯설어도, 여러분은 이미 EDG를 써봤을 거예요
Visual Studio에서 C++ 코드를 짜다 보면 IntelliSense가 빨간 물결줄로 오류를 표시하는데, 막상 빌드해 보면 문제없이 컴파일되는 경우가 있어요. 한 번쯤 겪어보셨죠? 그 이유 중 하나가 오늘 이야기할 EDG예요. Visual Studio의 C++ IntelliSense는 MSVC 컴파일러가 아니라 EDG(Edison Design Group)의 C++ 프런트엔드를 기반으로 동작하거든요. 코드를 분석하는 '두뇌'가 서로 다르다 보니 가끔 판단이 엇갈리는 거예요.
EDG는 1988년에 설립된 작은 회사인데요, 주력 제품은 C/C++ 프런트엔드 하나예요. 이 프런트엔드는 지금까지 컴파일러 회사나 개발 도구 회사에 상용 라이선스로만 제공됐어요. 그런데 이번에 EDG가 공식 사이트(edgcpp.org)에 'transition' 안내를 올리고, 이 프런트엔드를 공개로 전환한다고 밝혔어요. 수십 년 동안 업계 뒤편에서 조용히 쓰이던 핵심 부품을 드디어 누구나 들여다볼 수 있게 된 셈이에요. 정확한 라이선스 조건이나 배포 방식은 공식 사이트에서 꼭 직접 확인해 보세요.
프런트엔드가 대체 뭔데요?
컴파일러는 크게 프런트엔드와 백엔드로 나뉘어요. 번역가에 비유하면 이해하기 쉬운데요, 프런트엔드는 원문(C++ 소스 코드)을 읽고 문법이 맞는지, 무슨 뜻인지를 정확히 파악하는 역할이에요. 백엔드는 그렇게 파악한 내용을 목표 언어(기계어)로 옮겨 적는 역할이고요.
프런트엔드가 구체적으로 하는 일은 이런 것들이에요.
- 파싱: 소스 코드를 읽어서 문법 구조(트리)로 만들어요
- 의미 분석: 이 이름이 어떤 변수나 함수를 가리키는지, 타입은 맞는지 확인해요
- 템플릿 인스턴스화와 오버로드 해석: C++에서 가장 악명 높은 부분이에요
- 중간 표현(IL) 생성: 백엔드가 받아서 쓸 수 있는 형태로 넘겨줘요
- GCC: GPL 오픈소스이고, 리눅스 생태계의 기본 컴파일러예요
- Clang: Apache 2.0(LLVM 예외 포함) 오픈소스예요. 라이브러리처럼 재사용하기 좋아서 clangd, clang-tidy 같은 도구 생태계가 생겨났어요
- MSVC: 마이크로소프트 독점이에요
- EDG: 지금까지는 상용 라이선스였어요
- Visual Studio로 C++ 개발하는 분들(특히 게임 업계): IntelliSense가 가끔 컴파일러와 다른 판단을 내리는 이유를 이해하는 데 도움이 돼요. 공개된 코드와 문서로 동작 원리를 더 깊이 살펴볼 수 있을 거예요.
- 정적 분석, 보안 도구, 임베디드 컴파일러 쪽: 국내에도 C/C++ 분석 도구를 만드는 팀이 적지 않은데요, 라이선스 조건에 따라 도구 개발 전략에 선택지가 하나 더 생길 수 있어요.
- 컴파일러를 공부하고 싶은 분들: 수십 년 동안 실전에서 다듬어진 C++ 프런트엔드 코드는 그 자체로 교과서예요. 교재에 나오는 장난감 파서와 산업용 파서가 얼마나 다른지 느껴보는 것만으로도 큰 공부가 돼요.
C++은 언어 자체가 워낙 복잡해서, 문법을 정확히 이해하는 것만으로도 엄청나게 어려운 일이에요. 그래서 많은 회사들이 프런트엔드를 직접 만드는 대신 EDG 제품을 사서 쓰고, 자기들은 백엔드 최적화나 분석 기능에 집중해 왔어요. Intel의 클래식 C++ 컴파일러(icc), NVIDIA CUDA 툴체인의 일부, 여러 임베디드 컴파일러와 정적 분석 도구가 EDG를 기반으로 만들어졌어요.
EDG가 특별한 이유: 표준을 '문서에 적힌 그대로'
EDG는 업계에서 표준 준수로 유명해요. 대표적인 예가 C++98의 export 템플릿이에요. 구현하기가 너무 어려워서 사실상 EDG 기반 컴파일러만 구현했고, 결국 C++11에서 표준에서 빠졌어요. 그만큼 표준 문서에 적힌 내용을 끝까지 구현하는 데 진심인 팀이라는 뜻이에요.
요즘도 달라진 게 없어요. C++26에 들어가는 정적 리플렉션(static reflection)은 컴파일 시점에 코드가 자기 구조, 예를 들어 클래스의 멤버 목록 같은 걸 들여다볼 수 있게 해주는 기능인데요, 이 제안을 실험하던 시기에 EDG 기반 구현이 Compiler Explorer(godbolt.org)에 올라와서 많은 사람이 미리 써볼 수 있었어요. EDG 엔지니어들이 C++ 표준 위원회에서 오랫동안 활동해 온 것과도 무관하지 않아요.
업계 맥락: GCC, Clang, MSVC 사이에서
현재 주요 C++ 프런트엔드는 크게 넷이에요.
Clang이 크게 성공한 이유 중 하나는 프런트엔드를 라이브러리처럼 가져다 쓸 수 있다는 점이었어요. 덕분에 IDE 자동완성, 리팩터링 도구, 린터가 크게 늘었죠. EDG가 공개되면 여기에 완전히 독립적으로 구현된 선택지가 하나 더 생겨요. 같은 코드를 서로 다른 구현으로 검증할 수 있으면 표준의 애매한 부분을 찾아내거나 컴파일러 버그를 잡을 때 생각보다 큰 도움이 돼요.
물론 현실적인 한계도 있어요. Clang은 이미 거대한 커뮤니티와 도구 생태계를 갖추고 있어서, EDG가 공개된다고 해도 판도가 당장 바뀌지는 않을 거예요. 공개 이후 누가 유지보수를 이어가고 어떤 커뮤니티가 모일지가 앞으로 지켜볼 부분이에요.
한국 개발자에게 주는 시사점
마무리
한 줄 정리: 수많은 컴파일러와 IDE 뒤에서 C++을 '읽어주던' EDG 프런트엔드가 공개로 전환되면서, GCC와 Clang 말고도 독립적인 C++ 구현을 하나 더 누구나 들여다볼 수 있게 됐어요.
여러분은 Clang 중심으로 굳어진 C++ 도구 생태계에서 EDG가 의미 있는 경쟁자가 될 수 있다고 보시나요? 아니면 참고용 레퍼런스 구현 정도로 남게 될까요? 의견 나눠주세요!
🔗 출처: Hacker News