Компилятивная программа что это такое

Компиляция — это процесс, облегчающий общение программиста и вычислительной машины

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

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

Таким образом, компиляция — это когда входная информация (исходный код), представляющая описание алгоритма или написанная на проблемно-ориентированном языке программа, переписывается в эквивалентный перечень команд, представленных в объектном коде (машинно-ориентированном языке).

Если еще упростить определение, то компилировать — это транслировать машинную программу с проблемно-ориентированного в машинно-ориентированный язык.

Что такое компьютерная программа

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

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

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

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

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

Гибкий компилятор был разработан на основе модульного принципа. Его управление осуществляется таблицами. Запрограммирован он на высокоуровневом языке. Также возможна его реализация при помощи компилятора компиляторов.

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

Интерпретирующий или пошаговый компилятор использует принцип последовательного выполнения независимой компиляции для каждого отдельного оператора или команды из исходной программы.

Компилятор компиляторов — это транслятор, который воспринимает формальное описание для языка программирования. Он способен самостоятельно генерировать компилятор для конкретного языка.

Отладочный компилятор может самостоятельно устранять некоторые виды ошибок синтаксиса.

Резидентному компилятору отведено постоянное место в оперативной памяти, и он доступен при повторном использовании широким спектром задач.

Отличия императивного и декларативного программирования

Существуют самокомпилируемые компиляторы. Они пишутся тем же языком, с которого происходит трансляция.

Универсальный компилятор имеет в основании формальное описание семантики и синтаксиса входного языка. Он состоит из ядра, синтаксического и семантического загрузчиков.

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

Компиляция Java реализовывается при использовании компиляторов, работающих на самых различных платформах. Это позволяет исходные коды перекомпилировать под потребности операционных систем от разных производителей.

Источник: fb.ru

Понятие компиляции в информатике

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

Введение

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

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

Читайте также:
Доктор веб что это за программа и нужна ли она

Решим твою учебную задачу всего за 30 минут
Попробовать прямо сейчас

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

Компиляция в информатике

Есть различные виды компиляции:

  1. Компиляция пакетного типа. Она преобразует сразу несколько исходных модулей в едином комплекте.
  2. Компиляция построчного типа. Аналог интерпретации, то есть пошаговой независимой компиляции всех следующих операторов.
  3. Условная компиляция, при которой преобразование исходного текста зависит от заданных исходных условий с помощью директив компилятора. То есть путём изменения величины некоторых констант, возможно отключать или наоборот включать преобразование участков исходной программы.

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

Подобрали для написания работы по теме «Понятие компиляции в информатике»
Готовые курсовые работы и рефераты
Консультации эксперта по предмету
Помощь в написании учебной работы

  1. Векторный компилятор. Выполняет перевод входных данных в машинный код, при этом выполняя подстройку под векторные процессоры.
  2. Гибкий компилятор. Базируется на модульном принципе и управляется при помощи таблиц. Его программа выполнена на языке высокого уровня и имеется возможность реализовать его посредством компилятора компиляторов.
  3. Инкрементальный компилятор. Выполняет вторичное преобразование компонентов исходной программы и приложений к ней, не делая перекомпиляцию всей программы.
  4. Компилятор пошаговый или выполняющий интерпретацию. Применяет методику поочерёдного проведения самостоятельной компиляции любого выбранного процесса исходного модуля.
  5. Компилятор компиляторов. Программа трансляции, воспринимающая формализованное представление языка программирования. У него имеется возможность самому сформировать необходимый компилятор для выбранного программного языка.
  6. Компилятор отладки. Способен выявить и устранить различные типы синтаксических ошибок.
  7. Резидентный компилятор. Имеет своё фиксированное расположение в оперативной памяти и может повторно применяться обширным диапазоном задач.
  8. Компилятор самокомпилируемый. Он формируется на том же языке, что и транслируемая программа. Это универсальный компилятор, в котором заложены семантика и синтаксис исходного языка. В его состав входят ядро, семантический и синтаксический загрузчики.

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

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

В процессе выполнения компиляции, реализуются следующие этапы:

  1. Анализ лексики. Выполняется преобразование символики исходной программы в набор лексем (абстрактных единиц).
  2. Анализ синтаксиса (грамматики). Выполняется преобразование набора лексем в дерево разбора.
  3. Анализ семантики. Выполняется обработка дерева разбора для определения его смысловых значений (семантики). Это может быть процесс привязки идентификаторов к их видам, определение совместимости т так далее. В итоге формируется промежуточное представление (код), и возможно формирование дополненного дерева разбора или даже нового дерева. Возможно так же формирование абстрактного набора команд, удобного для последующего применения.
  4. Повышение оптимальности. Удаляются лишние образования и формируется упрощённый код без смысловых потерь. Процесс оптимизации возможно осуществлять на различных этапах. К примеру, можно оптимизировать промежуточный или окончательный машинный код.
  5. Процесс генерации кода. Выполняется трансформация промежуточных представлений в коды конечного языка.

Замечание 1

Для разных типов компиляторов возможно подразделение или совмещение данных этапов в различных вариациях.

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

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

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

Источник: spravochnick.ru

Компилируемые языки: список, плюсы и минусы

Компилируемые языки

Желающие изучить веб-программирование часто сталкиваются с таким понятием, как компилируемые языки. Информации про них в Интернете мало, говорится лишь основная суть. Но и этого минимума достаточно, чтобы разобраться. Условно все языки делятся на компилируемые и интерпретируемые. Их создали, чтобы преобразовывать код в форму, считываемую компьютером.

Читайте также:
Постлечебная программа для наркозависимых что это такое

Эти языки очень похожи, но разница между ними существенная.

Более того, есть еще третий вид, который вобрал в себя преимущества компилятора и интерпретатора. Как правило, начинающие программисты сразу ломают голову, какой же вид выбрать для изучения. Ниже в статье мы рассмотрели особенности компилируемого языка в сравнении с другими. После ее прочтения, сомнений в выборе остаться не должно.

Что значит компилируемый язык программирования

Любой язык общения представляет собой текст, составленный из различных символов, которые известны и понятны собеседникам. Язык программирования тоже состоит из символов, чья последовательность подчиняется определенным правилам и называется кодом. С помощью кода происходит взаимодействие «человек–компьютер».

Но такое общение нельзя назвать прямым: программист вводит текст (код), который преобразуются посредством определенной программы в символы. Именно такой преобразованный текст компьютер будет воспринимать как команды микропроцессора. А программа, ответственная за трансформацию кода, называется компилятором.

Компилятор является необходимым не для всех языков программирования, а только для компилируемых. Программа, созданная таким языком, требует не только написания как такового, но и прогонки через компилятор. Только после этого ее можно запускать на выполнение в виде исполняемого модуля с определенным расширением (например, для ОС Windows файл будет иметь .exe расширение).

Компилируемый язык программирования

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

Преимущества и недостатки компилируемых языков

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

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

В качестве примеров компилируемых языков можно привести:

  • процедурный язык программирования Pascal;
  • высокоуровневый язык Go;
  • функциональный язык Erlang;
  • язык программирования Ada;
  • язык функционального программирования Haskell;
  • мультипарадигмальный Rust;
  • объектно-ориентированный C;
  • статически типизированный C++.

Источник: gb.ru

Компиляция и компоновка программ в С/C++

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

Создание исполняемых файлов — это многоступенчатый процесс, основные составляющие которого: компиляция и компоновка. На самом деле, даже если программа «откомпилировалась без ошибок», она может не работать из-за возможной ошибки во время стадии компоновки. Весь процесс трансляции файлов исходного кода в исполняемый файл лучше было бы называть построением проекта.

Компиляция!

Компиляция относится к обработке файлов исходного кода (.c, .cc, или .cpp) и создании объектных файлов проекта. На этом этапе не создается исполняемый файл. Вместо этого компилятор просто транслирует высокоуровневый код в машинный язык.

Например, если вы создали (но не скомпоновали) три отдельных файла, у вас будет три объектных файла, созданные в качестве выходных данных на этапе компиляции. Расширение таких файлов будет зависеть от вашего компилятора, например *.obj или *.o. Каждый из этих файлов содержит машинные инструкции, которые эквивалентны исходному коду. Но вы не можете запустить эти файлы!

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

Компоновка!

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

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

Читайте также:
Файлы dvr что это за программа

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

Интегрированная среда разработки (IDE) эти два этапа берёт на себя и вам не стоит беспокоиться о том, какие из файлов были изменены. IDE сама решает,когда создавать объекты файлов, а когда нет.

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

Источник: cppstudio.com

Программирование: Что такое компилятор и зачем он нужен

Фото с сайта Pixabay.com

Компилятор — это программа, которая переводит написанный человеком код в машинный, то есть понятный компьютеру

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

Что происходит, когда компилируется код?

Сложность компиляции зависит от синтаксиса языка программирования и от того, насколько сильно этот язык использует абстракции. Например, компилятор для C гораздо проще, чем для C++ или C#. Кстати, если вы, вдруг, плохо знаете английский язык, но вам нужно найти ответ на свой технический вопрос, то вам поможет сайт CodeRoad — вопросы/ответы по программированию. Здесь переводят на русский язык самые популярные вопросы со StackOverflow.

Лексический анализ

Сначала компилятор читает все символы исходного кода, затем создает описания для этих символов. Например, код на C++: int A = (B*C) + 15; может быть описан так:
• Тип «int»; значение «C»; равно; левая скобка; значение «A»; умножить; значение «B»; правая скобка; плюс; литерал «15».

Синтаксический анализ

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

Если значения «B» и «C» были раннее объявлены и находятся в доступной области видимости, компилятор скажет:

• «B»: объявленный идентификатор.
Если переменные были объявлены, но им не присвоено значение, то компилятор выдаст предупреждение:
• Локальное значение «B» использовано без инициализации.

Не игнорируйте предупреждения компилятора. Ошибки, приводящие к возникновению предупреждений, могут сломать ваш код.

Один проход или два?

Некоторые языки имеют компиляторы, которые читают код только один раз. Pascal — один из таких языков. Другие требуют минимум двух проходов. Это происходит из-за того, что в них вы можете предварительно объявить классы и функции, но не описывать их.

Так, например, можно сделать в С++. Компилятору неизвестно, сколько памяти нужно классу, поэтому, когда он доходит до его описания, он компилирует тело класса, а потом перечитывает исходный код.

Генерация машинного кода

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

Скорость скомпилированного кода должна быть максимально возможной. Она может изменяться в зависимости от качества кода и его оптимизации.

Генерация кода — это сложно

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

• Instruction pipelining
• Внутренний кэш

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

Кэши и очереди

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

• Целочисленная арифметика (целые числа)
• Арифметика с числами с плавающей точкой (дробные числа)

Эти операции часто выполняются параллельно, чтобы ускорить работу кода.

Источник: www.km.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru