Легко анализируйте, сравнивайте и оптимизируйте исходный код, не выходя из одной вкладки браузера.

Вы когда-нибудь задумывались, как ваш компьютер на самом деле видит ваш исходный код? Если вам просто любопытно или вы заинтересованы в анализе скомпилированных двоичных файлов, вам следует проверить Compiler Explorer.

Отказ от ответственности: я не связан и не спонсирован Compiler Explorer. Я просто считаю, что они предлагают отличный продукт, которым стоит поделиться.

Что такое проводник компилятора?

Со страницы GitHub Compiler Explorer: Compiler Explorerr — это бесплатный веб-сайт с открытым исходным кодом, который позволяет вам в интерактивном режиме писать, компилировать и дизассемблировать исходный код, не выходя из одной единственной вкладки браузера.

Он начался как сеанс tmux, в котором vi выполнялся в одной панели, а watch gcc -S foo.cc -o - — в другом. С тех пор он стал общедоступным веб-сайтом, обслуживающим около 3 000 000 компиляций в неделю.

Compiler Explorer позволяет выбирать из широкого спектра компиляторов и языковых стандартов и в настоящее время поддерживает 38 языков программирования. Кроме того, вы можете указать флаги компиляции в соответствии с вашими потребностями.

А как насчет интерпретируемых языков, таких как Python? Исходный код Python фактически компилируется в байтовый код для запуска на Виртуальной машине Python.

Благодаря этому вы можете увидеть, как ваш исходный код выглядит для интерпретатора Python в виде языка, похожего на ассемблер.

На изображении выше показана функция C++, скомпилированная в инструкции x86–64.

А вот класс Python, скомпилированный в байт-код Python:

Использование обозревателя компиляторов

Итак, почему вы должны использовать Compiler Explorer? Прежде всего, вы можете изучить, во что компилируется ваш исходный код. Хотя это может сделать любой компилятор, Compiler Explorer точно сообщает, в какие инструкции транслируется каждая строка.

Благодаря этой функции вы можете легко увидеть, как ваш компьютер действительно интерпретирует ваш код.

Одним из основных применений Compiler Explorer является исследование низкоуровневой оптимизации производительности. Зная, как ваш компьютер выполняет каждую строку кода, вы можете проанализировать, как они могут повлиять на скорость выполнения.

Например, я использовал Compiler Explorer, чтобы исследовать, как реализуются операторы Python match-case и почему они медленнее, чем словари.

Помимо этого, вам может быть просто любопытно узнать, как ваш исходный код компилируется для различных системных архитектур, с различными параметрами компилятора и уровнями оптимизации.

Сравните варианты компиляции и архитектуры

Вы можете проанализировать, как оптимизации компилятора влияют на сгенерированный двоичный файл. На снимке экрана ниже показана функция C++, скомпилированная без оптимизации (-O0).

На снимке экрана ниже вместо этого показана та же функция C++, за исключением того, что она скомпилирована с использованием опции оптимизации -O3:

Как видите, компилятор gcc генерирует другой двоичный вывод. Вы также можете выбрать другую системную архитектуру, как показано здесь:

Самое приятное в Compiler Explorer — это то, что он чрезвычайно универсален и удобен, поскольку позволяет вам делать множество вещей, связанных с компилятором, на одной вкладке браузера.

Хороший способ погрузиться в низкоуровневое программирование

Со временем у программистов становится все меньше шансов попасть в низкоуровневый мир. Языки программирования высокого уровня и фреймворки теперь способствуют навыкам компьютерного алгоритмического мышления.

Более того, люди обычно воздерживаются от изучения ассемблера из-за его репутации очень сложного для понимания языка с небольшим количеством реальных приложений.

Однако даже в наши дни изучение хотя бы основ ассемблера может дать вам хорошее представление о том, как работают компьютеры внутри. Как говорится, вы должны хорошо знать свои инструменты, если хотите владеть ими как мастер.

Более глубокие знания позволяют принимать более взвешенные решения и выбирать правильный подход, принимая во внимание как сильные, так и слабые стороны ваших инструментов.

Как я уже говорил, Compiler Explorer позволяет четко видеть, в какие инструкции компилируется каждая строка исходного кода. Благодаря этой функции вам не нужно быть экспертом по ассемблеру, чтобы анализировать результат компиляции.

Из-за этого Compiler Explorer позволяет вам начинать осторожно и постепенно продвигаться вперед по мере того, как вы лучше знакомитесь с языками ассемблера, поскольку вам не обязательно полностью понимать каждую инструкцию, чтобы понять, что делает ваш код.

По моему опыту, Compiler Explorer очень помог мне в самостоятельном изучении языков ассемблера и понимании того, как работают компиляторы, когда я разрабатывал свой первый компилятор.

Заключение

Подводя итог, Compiler Explorer — отличный инструмент, которым можно воспользоваться, если вы хотите заняться низкоуровневыми областями, такими как программирование на ассемблере или разработка компилятора, или интересуетесь исследованиями методов оптимизации кода.

Использование правильных инструментов позволяет вам сосредоточить свои усилия на самом важном: работать умнее, а не усерднее.