EDG C/C++ Compiler Project
EDG C/C++ 컴파일러 프로젝트 공개
EDG가 C/C++ 프런트엔드를 중심으로 한 컴파일러 프로젝트를 오픈소스로 공개했습니다. 다양한 컴파일러와의 파싱 호환성, C 및 C++ 코드 생성 백엔드, 템플릿 자동 인스턴스화 도구를 제공하며 제품 개발에 맞춰 확장할 수 있도록 설계했습니다.
- 주제
AI 요약
EDG C/C++ 컴파일러 프로젝트는 EDG 프런트엔드를 중심으로 구성되어 있습니다. 프로젝트 설명에 따르면 프런트엔드는 Clang, GCC, MSVC에서 컴파일되는 소스와의 파싱 호환성을 목표로 하며, 각 컴파일러의 버그 동작도 재현합니다. 문서와 설정 기능을 폭넓게 제공해 C/C++ 기반 제품에 맞게 수정하고 파생하기 쉽도록 했습니다.
프런트엔드와 부가 도구
저장소에는 C++ 프로그램에서 C 코드를 생성하는 백엔드와 소스 간 변환에 활용하는 C++ 생성 백엔드가 포함됩니다. 템플릿 자동 인스턴스화를 처리하는 prelinker, 최소 런타임 지원 라이브러리, 중간 언어를 파일로 쓰고 읽거나 사람이 읽을 수 있게 표시하는 유틸리티도 제공합니다. 이름을 원래 형태로 복원하는 demangler와 개발 도구 모음도 포함합니다. 스트림 입출력 같은 실제 라이브러리는 제공하지 않습니다.
프로젝트는 문서에서 빌드 및 기여 방법을 안내합니다. 저장소의 전체 Git 이력은 유지하면서 파일의 최신 버전만 먼저 내려받도록 git clone --filter=blob:none을 권장합니다. 개발 가이드와 튜토리얼을 모은 개발 부록도 제공합니다.
Lobsters 반응
- @pervognsen — 이걸 보니 정말 반갑습니다. 1990년대 후반과 2000년대 초반에는 컴파일러의 C++ 호환성이 전반적으로 형편없었고, EDG 프런트엔드의 호환성이 뛰어나다는 이야기를 자주 들었습니다. Nintendo 콘솔 일부의 Green Hills 툴체인으로 일하면서 EDG 기반 컴파일러를 처음 써봤습니다. 제가 아는 한 지금 남아 있는 C++ 프런트엔드는 Clang, GCC, MSVC와 EDG 네 개입니다. 몇 년 전 Sean Baxter에게 물었을 때 놀랐던 점은 Circle이 Circle 고유 기능뿐 아니라 독립적인 C++ 프런트엔드 구현이기도 하다는 사실이었습니다. 그가 Clang 프런트엔드에서 시작했을 거라고 생각했습니다.
- @aw1621107 — Circle을 완전히 잊고 있었네요. 제 생각엔 정말 인상적인 성과입니다. Sean이 작업을 계속할 만큼 충분한 관심을 얻지 못한 것 같아 아쉽습니다.
- @drs — 방금 GitHub에서 소스 코드를 봤는데, 이 프로젝트는 아직 남아 있는 몇 안 되는 ‘현대적인’ C++ 컴파일러 가운데 C로 작성된 것 같습니다. Clang과 GCC는 이제 C++로 작성됐습니다. MSVC는 잘 모르겠습니다.
- @aw1621107 — C++와 C 또는 C 스타일 C++가 섞여 있는 것 같습니다. 함수 시그니처의 참조자나 템플릿처럼 C++에서만 쓰는 기능도 분명히 사용하지만, 제가 잠깐 찾아본 범위에서는 드뭅니다. 코드베이스가 오래된 점이 여러 스타일이 섞인 이유 중 하나일 것 같습니다. 첫 커밋이 1990년입니다.
- @drs — 맞네요.
.c파일 확장자 때문에 착각했습니다. - @aw1621107 — 처음 그렇게 생각하신 것도 충분히 이해됩니다. C++ 기능이 비교적 드물게 쓰여서 놓치기 쉽습니다.
- @notgull — 이 프로젝트를 한동안 기대하고 있었습니다. 현재 live-bootstrap 프로젝트는 C에서 C++로 넘어가기 위해, C로 작성되던 시절의 오래된 GCC 버전을 사용합니다. 이 프로젝트는 x86만 제대로 지원하는 아주 오래된 컴파일러에 의존하지 않고 C에서 C++로 넘어갈 실제 선택지를 하나 더 제공합니다. 이를 기반으로 새 컴파일러가 나오길 기대합니다.
- @aw1621107 — 이 프로젝트를 그대로 C에서 C++로 부트스트랩하는 데 쓸 수 있을지는 모르겠습니다. C++를 사용하는 부분이 있습니다. 다만 그 부분을 C로 바꾸는 일이 얼마나 쉬운지는 저도 모르겠습니다.
원문: Lobsters / 번역·요약: Trawling