плюсы и минусы бок о бокpros and cons side by side

GCC vs Clang vs MSVC: сводная таблицаGCC vs Clang vs MSVC: summary table

Плюсы и минусы всех трёх компиляторов по каждой теме отдельной строкой — быстрая шпаргалка без необходимости читать три полные статьи. Подробности и обоснование каждой строки — в GCC, Clang, MSVC.Pros and cons of all three compilers, one row per topic — a quick cheat sheet without needing to read all three full articles. Details and the reasoning behind each row live in GCC, Clang, MSVC.

частый вопрос на собеседованииcommon interview question

По темамBy topic

темаtopicGCCClangMSVC
лицензияlicense GPL Apache 2.0 + LLVM exceptions проприетарнаяproprietary
платформыplatforms все, Linux основнаяall, Linux primary все, macOS/iOS основнаяall, macOS/iOS primary только WindowsWindows only
целевые архитектурыtarget architectures больше всех (см. обзор в сравнении)the most of all three (see the overview in the comparison) меньше, но разрыв сокращаетсяfewer, but the gap is narrowing x86/x64/ARM64
качество диагностикиdiagnostic quality заметно улучшилась, но исторически позадиmuch improved, but historically behind лучшая в индустрииindustry-best средняя, интегрирована с IDEaverage, IDE-integrated
ASan / UBSan / TSan есть все триall three present есть все триall three present только ASanonly ASan
MemorySanitizer нетno даyes нетno
CFI / фаззингfuzzing нетno да (-fsanitize=cfi/fuzzer)yes (-fsanitize=cfi/fuzzer) нетno
расширяемостьextensibility GCC plugins (нестабильный API)(unstable API) LibTooling/libclang (стабильный API)(stable API) нет прямого аналогаno direct equivalent
внутренний IRinternal IR GIMPLE / RTL (закрыт для внешних)(closed to outsiders) LLVM IR (открытый, документирован)(open, documented) полностью закрытыйfully closed
Whole Program / Link-Time оптимизацияoptimization -flto -flto (+ ThinLTO)(+ ThinLTO) /GL + /LTCG
интегрированный отладчикintegrated debugger нет (gdb отдельно)no (gdb separately) нет (lldb отдельно)no (lldb separately) да, в Visual Studioyes, in Visual Studio
Windows-специфичные технологииspecific technology (COM, DirectX) частично, через MinGWpartially, via MinGW частично, через clang-clpartially, via clang-cl нативно и полностьюnatively and fully
языковые фронтендыlanguage frontends C/C++/Fortran/Ada/Go/D/эксп. Rustexp. Rust C/C++/Objective-C (+ Rust/Swift/Julia используют LLVM IR отдельно)(+ Rust/Swift/Julia use LLVM IR separately) C/C++

Когда выбирать какойWhen to pick which

01

GCC

Нужна нестандартная целевая архитектура (embedded, ретро, экзотика вроде VAX/m68k), разработка/сборка ядра Linux, полностью свободная лицензия критична для проекта.You need a non-standard target architecture (embedded, retro, exotic ones like VAX/m68k), you're developing/building the Linux kernel, or a fully free license is critical to the project.

02

Clang

Разработка на macOS/iOS, нужен максимально полный набор санитайзеров (особенно MSan) для проверки корректности, нужны инструменты статического анализа/рефакторинга (clang-tidy), пишете собственный инструмент анализа C++ кода.Developing for macOS/iOS, you need the fullest possible sanitizer set (especially MSan) for correctness checking, you need static-analysis/refactoring tools (clang-tidy), or you're writing your own C++ analysis tool.

03

MSVC

Разработка нативных Windows-приложений с глубокой интеграцией в Windows SDK/COM/DirectX, нужен максимально удобный интегрированный отладочный опыт без сборки внешнего тулчейна.Developing native Windows applications with deep Windows SDK/COM/DirectX integration, or you need the smoothest possible integrated debugging experience with no external toolchain to assemble.