Есть ли простое объяснение того, что такое компилятор? - PullRequest
2 голосов
/ 11 ноября 2010

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

Мы хотим, чтобы Stackoverflow был хорошим местом для поискаответы о программировании.Мы не должны оставлять что-то столь фундаментальное для Википедии.Простая аналогия - спросить мастера-плотника, что такое 10-пенсовый гвоздь, и отмахнуться.Конечно, это простой вопрос, но плотник, который думает, что объяснение чего-то столь простого находится под ним / ней, просто в снобе в лучшем случае, вежливо, или в ином случае, если в противном случае.

По крайней мере, этот вопроспредоставляет место для сбора ссылок на объяснения, связанные с компилятором, внутри или вне Stackoverflow.

[Я сделал бы этот CW, но не увидел флажок, он был перемещен или удален?]

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

Википедия о компиляторах .

Ответы [ 2 ]

5 голосов
/ 11 ноября 2010

Я собирался дать ответ, но первое предложение статьи Wikipedia практически совпадает с тем, что я собирался напечатать:

Компилятор - это компьютерная программа [...] , который преобразует исходный код, написанный на языке программирования [...] , в другой компьютерный язык [...]

3 голосов
/ 11 ноября 2010

Краткий ответ

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

Таким образом, компилятор просто действует как статический переводчик для (обычно формального) человеческого языка на (обычно даже более формальный и минималистичный) машинный язык или набор инструкций.

Некоторые различия, о которых следует помнить

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

Типичным примером может служить программа на C, которая компилируется с помощью одной командной строки, но на самом деле обрабатывает несколько файлов .c (исходный код) и .h (заголовок) в несколько .o (объект). файл и может затем связать их с несколькими файлами .a (сборка / библиотека) для создания программы вывода (.exe, .out, ...) или другой .a или .dll или .so (сборка для динамической или разделяемой библиотеки для разных платформ).

Указанные шаги также можно выполнить, выполнив несколько командных строк, чтобы отделить различные происходящие операции.

Multi-Language Compilation Process


Это, очевидно, объяснение очень высокого уровня, ориентированное на ИТ-мир, но нет никаких сомнений в том, что вы можете обратиться к термину «компилятор» для других программ и машин, преобразующих входные данные любого вида в каким-то образом выполнимый или пригодный для использования вывод. другого рода.


Графика предоставлена ​​ Википедия Компилятор Страница

...