Я продолжаю слышать термин, и все поиски в Google приводят меня к статьям о компиляторах. Я просто хочу понять, что означает термин цель компиляции: |
ОБНОВЛЕНИЕ: Чтобы дать некоторый контекст: я слышал, что веб-сборка является целью компиляции для других языков, таких как C, C ++, Rust и т. Д.
Ответы:
Компиляторы, по сути, являются переводчиками, которые вводят данные на одном языке и выдают результаты на другом. Например, компилятор Eiffel Software принимает ввод на языке Eiffel и создает C. GCC для Intel считывает ввод на языке C и производит сборку x86. Ассемблер GAS для Intel берет сборку x86 и создает объектный код x86. Все эти три вещи являются технически компиляторами.
Независимо от формата входные данные, считываемые компилятором, называются исходными, а выходные - целевыми . Последний термин взят из одного из его определений, «предполагаемый результат».
Большинство компиляторов предназначены для создания ассемблера или объектного кода для конкретного процессора или архитектуры. Из-за этого target часто используется для ссылки на саму архитектуру, а не на выходной формат.
Назначение компилятора не обязательно должно быть таким же, как архитектура, в которой он выполняется, и в тех случаях, когда это происходит, программа называется кросс-компилятором . (Например, GCC может быть создан для работы на системах x86 для компиляции C в сборку ARM.)
Кроме того, существуют отдельные компиляторы, способные выдавать выходные данные для разных целей в зависимости от ввода, например переключателей в командной строке. Это так называемые многоцелевые компиляторы.
источник
В переводе, будь то естественный язык, такой как английский, или искусственный, такой как C, мы используем источник и цель терминологии, чтобы говорить о вводе и выводе системы перевода. В переводе на естественный язык система представляет собой компетентный человеческий мозг, способный переводить между двумя языками. В языках программирования это компилятор.
Таким образом, источником для компилятора является язык программирования (C), а целью является байт-код (инструкции машинного уровня). Мы часто используем target при компиляции, потому что разные системы (архитектуры ЦП) имеют разные наборы команд, например, ARM, MIPS и т. Д. Компилятору необходимо знать, какой набор команд является целевым, чтобы он мог создать правильный вывод (байт-код).
источник
WebAssemby - это что-то новейшее и лучшее, которое конвертирует код c / c ++ в двоичный формат.
Вот ссылка, где из одного приложения вы можете увидеть, как быстро оно конвертирует простую факториальную программу в машинный код.
Проверьте этого зверя, https://godbolt.org/
Вы можете использовать этот пример программы для запуска на этом сайте, чтобы увидеть сборку.
Немного базовой информации о хосте и цели, о том, как язык программирования переведен на 10101010.
GCC преобразует код C / C ++ в код сборки. Инструмент под названием «ассемблер» преобразует ассемблерный код в машинный код, а инструмент под названием «компоновщик» соединяет несколько файлов машинного кода в один исполняемый файл (.EXE под Windows). Большинство этих компиляторов позволяют записывать полученный ассемблерный код в файл, чтобы вы могли посмотреть на ассемблерный код или изменить его.
Ассемблер и компоновщик являются частью цепочки инструментов, что означает, что они обычно поставляются вместе с компилятором.
Однако некоторые компиляторы (например, Microsoft) напрямую конвертируют код C / C ++ в машинный язык, поэтому ассемблер больше не нужен. Многие из этих компиляторов не могут создавать ассемблерный код, поэтому вы не можете записать ассемблерный код в файл.
Кстати, есть даже компиляторы (не для C / C ++, а для других языков программирования), которые напрямую создают файл .EXE, поэтому компоновщик не требуется.
источник