Перейти к содержимому

Что такое компиляция в программировании

  • автор:

Компиляция (программирование)

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

Некоторые компиляторы (например, низкоуровневом языке. Такой язык — байт-код — также можно считать языком машинных команд, поскольку он подлежит интерпретации виртуальной машиной. Например, для языка Java это JVM (язык виртуальной машины Java), или так называемый байт-код Java (вслед за ним все промежуточные низкоуровневые языки стали называть байт-кодами). Для языков программирования на платформе .NET Framework (C#, Managed C++, Visual Basic .NET и другие) — это MSIL (Microsoft Intermediate Language).

Программа на байт-коде подлежит интерпретации виртуальной машиной, либо ещё одной компиляции уже в машинный код непосредственно перед исполнением. Последнее называется «Just-In-Time компиляция» (MSIL-код компилируется в код целевой машины также JIT-компилятором, а библиотеки .NET Framework компилируются заранее).

Для каждой целевой машины (Apple и т. д.) и каждой операционной системы или семейства операционных систем, работающих на целевой машине, требуется написание своего компилятора. Существуют также так называемые кросс-компиляторы, позволяющие на одной машине и в среде одной ОС получать код, предназначенный для выполнения на другой целевой машине и/или в среде другой ОС. Кроме того, компиляторы могут быть оптимизированы под разные типы процессоров из одного семейства (путём использования специфичных для этих процессоров инструкций). Например, код, скомпилированный под процессоры семейства MMX, SSE2.

Также существуют компиляторы, переводящие программу с языка высокого уровня на язык ассемблера.

Существуют программы, которые решают обратную задачу — перевод программы с низкоуровневого языка на высокоуровневый. Этот процесс называют декомпиляцией, а программы — декомпиляторами. Но поскольку компиляция — это процесс с потерями, точно восстановить исходный код, скажем, на C++, в общем случае невозможно. Более эффективно декомпилируются программы в байт-кодах — например, существует довольно надёжный декомпилятор для Flash. Сходным процессом является дизассемблирование машинного кода в код на языке ассемблера, который всегда выполняется успешно. Связано это с тем, что между кодами машинных команд и командами ассемблера имеется практически однозначное соответствие.

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

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

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

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

Трансляция и компоновка

Важной исторической особенностью компилятора, отражённой в его названии (англ. compile — собирать вместе, составлять), являлось то, что он мог производить и компоновку (то есть содержал две части — транслятор и компоновщик). Это связано с тем, что раздельная компиляция и компоновка как отдельная стадия сборки выделились значительно позже появления компиляторов, и многие популярные компиляторы (например, GCC) до сих пор физически объединены со своими компоновщиками. В связи с этим, вместо термина «компилятор» иногда используют термин «транслятор» как его синоним: либо в старой литературе, либо когда хотят подчеркнуть его способность переводить программу в машинный код (и наоборот, используют термин «компилятор» для подчёркивания способности собирать из многих файлов один).

Интересные факты

  • На заре развития компьютеров первые компиляторы (трансляторы) называли «программирующими программами» [6] (так как в тот момент программой считался только машинный код, а «программирующая программа» была способна из человеческого текста сделать машинный код, то есть запрограммировать ЭВМ).

Примечания

  1. ГОСТ 19781-83 // Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов. — М.: Издательство стандартов, 1989. — 168 с. — 55 000 экз. — ISBN 5-7050-0155-X
  2. 1234567Першиков В. И., Савинков В. М. Толковый словарь по информатике / Рецензенты: канд. физ.-мат. наук А. С. Марков и д-р физ.-мат. наук И. В. Поттосин. — М.: Финансы и статистика, 1991. — 543 с. — 50 000 экз. — ISBN 5-279-00367-0
  3. 123 СТ ИСО 2382/7-77 // Вычислительная техника. Терминология. Указ. соч.
  4. Борковский А. Б. Англо-русский словарь по программированию и информатике (с толкованиями). — М.: Русский язык, 1990. — 335 с. — 50 050 (доп.) экз. — ISBN 5-200-01169-3
  5. Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с. — 70 000 (доп.) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания)
  6. Н. А. Криницкий, Г. А. Миронов, Г. Д. Фролов. Программирование / Под ред. М. Р. Шура-Бура. — М.: Государственное издательство физико-математической литературы, 1963.

См. также

  • Компилятор компиляторов
  • «Книга дракона» — классический учебник о построении компиляторов.
  • Синтаксический анализ
  • Интерпретатор
  • GCC
  • Free Pascal Compiler
  • Sun Studio — компиляторы C, C++ и Fortran от Sun Microsystems Inc.
  • Open Watcom — свободное продолжение компиляторов Watcom C/C++/Fortran.
  • Intel C++/Fortran compiler
  • ICC AVR

Литература

  • Альфред В. Ахо, Моника С. Лам, Рави Сети, Джеффри Д. Ульман. Компиляторы: принципы, технологии и инструментарий = Compilers: Principles, Techniques, and Tools. — 2-е изд. — М.: Вильямс, 2008. — ISBN 978-5-8459-1349-4
  • Робин Хантер. Основные концепции компиляторов = The Essence of Compilers. — М.: Вильямс, 2002. — С. 256. — ISBN 0-13-727835-7
  • Хантер Р. Проектирование и конструирование компиляторов / Пер. с англ. С. М. Круговой. — М.: Финансы и статистика, 1984. — 232 с.
  • Д. Креншоу.Давайте создадим компилятор!.

Wikimedia Foundation . 2010 .

  • Компины
  • Компланарные вектора

Учебники. Программирование для начинающих.

Programm.ws — это сайт, на котором вы можете почитать литературу по языкам программирования , а так-же посмотреть примеры работающих программ на С++, ассемблере, паскале и много другого..

Программирование — в обычном понимании, это процесс создания компьютерных программ.
В узком смысле (так называемое кодирование) под программированием понимается написание инструкций — программ — на конкретном языке программирования (часто по уже имеющемуся алгоритму — плану, методу решения поставленной задачи). Соответственно, люди, которые этим занимаются, называются программистами (на профессиональном жаргоне — кодерами), а те, кто разрабатывает алгоритмы — алгоритмистами, специалистами предметной области, математиками.
В более широком смысле под программированием понимают весь спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ — программного обеспечения ЭВМ. Более точен современный термин — «программная инженерия» (также иначе «инженерия ПО»). Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение.

Delphi для начинающих

Глава 1. Основы программирования

Компиляция

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

Компилятор, схема работы которого приведена на рис. 1.4, выполняет последовательно две задачи:

1. Проверяет текст исходной программы на отсутствие синтаксических ошибок.

2. Создает (генерирует) исполняемую программу — машинный код.

Рис. 1.4. Схема работы компилятора

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

Генерация машинного кода компилятором свидетельствует лишь о том, что в тексте программы нет синтаксических ошибок. Убедиться, что программа работает правильно можно только в процессе ее тестирования — пробных запусках программы и анализе полученных результатов. Например, если в программе вычисления корней квадратного уравнения допущена ошибка в выражении (формуле) вычисления дискриминанта, то, даже если это выражение будет синтаксически верно, программа выдаст неверные значения корней.

Компиляция в программировании

Компиляция в программировании

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

Что означает компиляция в программировании?

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

Этапы составления:

  1. Лексический анализ. На этом этапе исходный код разбивается на токены, такие как ключевые слова, операторы и идентификаторы.
  2. Анализ синтаксиса. Компилятор проверяет расположение токенов, чтобы убедиться, что они соответствуют грамматическим правилам языка программирования.
  3. Оптимизация. Компилятор может оптимизировать код для повышения производительности, устранения избыточности и повышения эффективности.
  4. Генерация кода. Последний этап включает в себя генерацию машинного кода или другого промежуточного представления, которое может быть выполнено компьютером.

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

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

Ключевые функции компилятора:

  • Трансляция. Основная функция компилятора – трансляция исходного кода в машинный код или промежуточное представление.
  • Проверка ошибок. Компиляторы выполняют тщательные проверки, чтобы выявить любые синтаксические ошибки или логические несоответствия в коде и сообщить о них.
  • Оптимизация. Компиляторы часто применяют различные методы оптимизации для повышения производительности сгенерированного кода.
  • Генерация кода. Конечным результатом работы компилятора является исполняемый код, который можно запустить на компьютере.

Пример компиляции

Давайте рассмотрим простой пример процесса компиляции с использованием языка программирования C.

#include int main()
  • Лексический анализ. Идентифицирует такие токены, как #include , int , printf и т. д.
  • Анализ синтаксиса. Проверяет структуру кода на предмет соответствия правилам синтаксиса C.
  • Оптимизация. Можно оптимизировать код для повышения эффективности.
  • Генерация кода: создает машинный код или исполняемый файл.

Затем этот исполняемый файл можно запустить, чтобы получить вывод: «Привет, компиляция!». А компьютер увидит только нолики и единички.

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

Компиляция в программировании

Идеи, Концепции, учения, методы исследования

Компиля́ция (англ. compilation, code compilation) в программировании, преобразование компилятором компьютерной программы , обычно составляемой на языке программирования высокого уровня ( исходного кода ), в эквивалентную программу на выходном языке (в машинный или промежуточный код) с учётом платформы исполнения ( операционной системы , аппаратных средств). Логически процесс компиляции делится на этапы, основными из которых являются анализ исходного кода (текста) и синтез объектного кода, или кодогенерация. Каждый из этапов, в свою очередь, делится на фазы (англ. translation phase). Например, этап анализа состоит из фаз лексического анализа, синтаксического анализа и семантического анализа. Каждая стадия просмотра компилятором исходного текста от начала до конца называется проходом. Различают также компиляцию на диск (англ. compiling to disk) и более быструю компиляцию в оперативную память (англ. compiling to memory) ( Пройдаков, Теплицкий. 2015 ).

Редакция информационных технологий

Опубликовано 31 марта 2023 г. в 14:20 (GMT+3). Последнее обновление 31 марта 2023 г. в 14:20 (GMT+3). Связаться с редакцией

Информация

Идеи, Концепции, учения, методы исследования

Области знаний: Теория компиляторов и интерпретаторов

  • Научно-образовательный портал «Большая российская энциклопедия»
    Свидетельство о регистрации СМИ ЭЛ № ФС77-84198,
    выдано Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор) 15 ноября 2022 года.
    ISSN: 2949-2076
  • Учредитель: Автономная некоммерческая организация «Национальный научно-образовательный центр «Большая российская энциклопедия»
    Главный редактор: Кравец С. Л.
    Телефон редакции: +7 (495) 917 90 00
    Эл. почта редакции: secretar@greatbook.ru
  • © АНО БРЭ, 2022 — 2023. Все права защищены.
  • Условия использования информации. Вся информация, размещенная на данном портале, предназначена только для использования в личных целях и не подлежит дальнейшему воспроизведению.
    Медиаконтент (иллюстрации, фотографии, видео, аудиоматериалы, карты, скан образы) может быть использован только с разрешения правообладателей.
  • Условия использования информации. Вся информация, размещенная на данном портале, предназначена только для использования в личных целях и не подлежит дальнейшему воспроизведению.
    Медиаконтент (иллюстрации, фотографии, видео, аудиоматериалы, карты, скан образы) может быть использован только с разрешения правообладателей.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *