Добавить в корзинуПозвонить
Найти в Дзене
IChan

«Магия кода». Или «Что такое компилятор».

Йоу йоу йоу) Ты наверно уже знаешь, что программисты меняют привычный мир с помощью каких-то там языков, сегодня мы поговорим про компиляторы. Что это вообще такое? Нуууу, если совсем простым языком - это как кольцо у Доктора Стрэнджа, без которого вся его магия исчезает. Если мы говорим о компилируемых языках. Зачем нужен компилятор? Процессор — самая важная часть компьютера. Он обрабатывает информацию, выполняет команды пользователя и следит за работой устройств. Но процессор понимает только машинный код, состоящий из 0 и 1, которые записаны в определённом порядке. Почему именно 0 и 1? В процессор поступают сигналы. Сильный сигнал обозначается цифрой 1, а слабый — 0. Набор таких цифр обозначает какую-то команду. Процессор ее распознает и выполняет. Программы для первых компьютеров выглядели как огромные наборы 0 и 1. Чтобы записать такую программу, инженеры пользовались гибкими картонными карточками — перфокартами. Цифры на перфокарте записывались поочередно, в несколько строк. Ч
Оглавление

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

Что это вообще такое?

Нуууу, если совсем простым языком - это как кольцо у Доктора Стрэнджа, без которого вся его магия исчезает. Если мы говорим о компилируемых языках.

Зачем нужен компилятор?

Процессор — самая важная часть компьютера. Он обрабатывает информацию, выполняет команды пользователя и следит за работой устройств. Но процессор понимает только машинный код, состоящий из 0 и 1, которые записаны в определённом порядке.

Почему именно 0 и 1? В процессор поступают сигналы. Сильный сигнал обозначается цифрой 1, а слабый — 0. Набор таких цифр обозначает какую-то команду. Процессор ее распознает и выполняет.

Программы для первых компьютеров выглядели как огромные наборы 0 и 1. Чтобы записать такую программу, инженеры пользовались гибкими картонными карточками — перфокартами. Цифры на перфокарте записывались поочередно, в несколько строк. Чтобы записать 1, программист делал отверстие в карте. Места без отверстия обозначали 0.

Компьютер считывал перфокарту специальным устройством и выполнял записанную команду. Для одной программы составляли сотни перфокарт.

Источник https://clck.ru/ar62a
Источник https://clck.ru/ar62a

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

Структура компилятора

Небольшое введение в структуру из википедии.

Процесс компиляции состоит из следующих этапов:

  1. Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем.
  2. Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора.
  3. Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки.
  4. Оптимизация. Выполняется удаление излишних конструкций и упрощение кода с сохранением его смысла. Оптимизация может быть на разных уровнях и этапах — например, над промежуточным кодом или над конечным машинным кодом.
  5. Генерация кода. Из промежуточного представления порождается код на целевом языке.

В конкретных реализациях компиляторов эти этапы могут быть разделены или, наоборот, совмещены в том или ином виде.

Выводы

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

Источники:

https://clck.ru/ar5xG - Hexlet Guides

https://clck.ru/ar5we - Wikipedia