Що саме - ціль компіляції?


17

Я постійно чую цей термін, і всі пошукові запити google призводять мене до статей про компілятори. Я просто хочу зрозуміти, що означає термін компілювати ціль: |

ОНОВЛЕННЯ: Щоб надати певний контекст: я чув, як говорилося, що веб-збірка - це ціль компіляції для інших мов, таких як C, C ++, Rust і т.д.


Я б радив прочитати статті про компілятори.

4
Статті про компілятори припускають, що ви це вже знаєте. Це розумне питання.
Карл Білефельдт

Я більше думав про статті у стилі вікіпедії. І я погоджуюся з питанням розумним. Це була лише пропозиція, а не критика.

4
Питання розумне, але погано написане. Термін "ціль" може мати різний зміст, тому я рекомендую дати посилання або більше контексту, де ви його чули чи читали про нього.
Док Браун

@DocBrown Я чув це в багатьох контекстах, але останнім часом в контексті веб-асамблеї є ціллю компіляції для інших мов.
ScionOfBytes

Відповіді:


17

Компілятори, по суті, є перекладачами, які беруть вклад однією мовою і дають вихід на іншій. Наприклад, компілятор програми Eiffel Software приймає введення мови Ейфелева і виробляє C. GCC для Intel зчитує введення C-мови та виробляє збірку x86. Ассамблер GAS для Intel приймає збірку x86 і виробляє об'єктний код x86. Усі три речі технічно є компіляторами.

Незалежно від формату, вхід, прочитаний компілятором, називається джерелом, а вихід називається цільовим . Останній термін узятий із одного з його визначень, "передбачуваний результат".

Більшість компіляторів призначені для створення збірки або об'єктного коду для певного процесора чи архітектури. Через це, target часто використовується для посилання на саму архітектуру, а не на вихідний формат.

Ціль компілятора не повинна бути такою ж, як архітектура, де він працює, а в тих випадках, коли це відбувається, програма називається крос-компілятором . (Наприклад, GCC може бути побудований для роботи в системах x86 для компіляції C в збірку ARM.)

Крім того, є окремі компілятори, здатні виробляти вихід для різних цілей залежно від введення, наприклад, комутатори в командному рядку. Вони називаються багатоцільовими компіляторами.


2
В якості бічної зауваження, можливо, варто згадати, що цей термін також використовується в більш узагальненій формі в контексті систем збирання - ціль - це результат з будь-якого кроку збирання, який не обов'язково повинен бути компіляційним дією (наприклад, створення інсталятора).
BartoszKP

2
компілятори - це перекладачі, а не фільтри.

1
@Birfl. очевидно. "tr" означає перекладати, а не фільтрувати. фільтри не є перекладачами, це просто очевидно.

2
@Birfl: Я не ходжу по вікіпедії. просто виробляють один потік з іншого ssys нічого. відмінність між фільтрами та перекладачами дуже добре відома. фільтр включає / виключає на основі присудка. вона не перетворюється. фільтрувати список цілих чисел по парних? і ви отримуєте неперетворені навіть цілі числа. перекладіть той самий список за допомогою inc і ви отримаєте перетворену версію вихідного списку.

1
ваш рахунок складання відмінний, за винятком терміна "фільтр".

4

У перекладі, чи мова є природною мовою, як англійська, або штучною, як C, ми використовуємо джерело термінології та ціль, щоб говорити про вхід та вихід системи перекладу. У перекладі на природну мову система - це компетентний людський мозок, здатний перекладати між двома мовами. У мовах програмування це компілятор.

Таким чином, джерелом для компілятора є мова програмування (C), тоді як мета - байт-код (інструкції на рівні машини). Ми часто використовуємо target у компіляції, оскільки різні системи (архітектури процесора) мають різні набори інструкцій, наприклад, ARM, MIPS тощо. Компілятору необхідно знати, який набір інструкцій є цільовим, щоб він міг створити правильний вихід (байт-код).


0

WebAssemby - це щось останнє та найбільше, яке перетворює код c / c ++ у двійковий формат.

  • WebAssembly має на меті виконати на власній швидкості, скориставшись загальним обладнанням. Він призначений для інтеграції з веб-платформою.

Ось посилання, де можна побачити один із додатків, як швидко він конвертує просту факторну програму в машинний код.

Перевірте цього звіра, https://godbolt.org/

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

# include<stdio.h>

int square(int num) {
    return num * num;
}

int main() {
    int res = square(4);
    printf("%d\n",res);
  return 0;
}
  • Визначте портативний, ефективний для розміру та часу завантаження двійковий формат, який слугуватиме ціллю компіляції, яку можна скласти для виконання на рідній швидкості, скориставшись загальними апаратними можливостями, доступними на широкому діапазоні платформ, включаючи мобільний та IoT.

Деякі основні відомості про хост і ціль, як перекладається мова програмування на 10101010.

host=>pc :(windows, iOS, Linux, zOS, Solaris..etc)
target=>CPUhardware: (Intel x86, ARM, PowerPC, etc)
  1. GCC перетворить код C / C ++ у код складання. Інструмент під назвою "ассемблер" перетворює код складання в машинний код, а інструмент під назвою "linker" з'єднує кілька файлів машинного коду в один виконуваний файл (.EXE під Windows). Більшість цих компіляторів дозволяють записати отриманий код асемблера у файл, щоб ви могли переглянути код асемблера або змінити його.

  2. Асемблер і лінкер є частиною ланцюга інструментів, що означає, що вони зазвичай постачаються разом з компілятором.

  3. Деякі компілятори (як-от Microsoft), однак безпосередньо перетворюють код C / C ++ в машинну мову, тому асемблер більше не потрібен. Багато з цих компіляторів не в змозі створити код асемблера, тому ви не можете записати код асемблера у файл.

До речі: Є навіть компілятори (не для C / C ++, а для інших мов програмування), які безпосередньо створюють файл .EXE, тому не потрібен посилання.

Веб-збирання: https://github.com/WebAssembly/design

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.