Превођење у програмирању: шта је и како функционише

Последње ажурирање: КСНУМКС март КСНУМКС
  • Компајлирање трансформише изворни код у извршни машински код.
  • Компајлер врши лексичку, синтаксичку и семантичку анализу.
  • Постоје АОТ, ЈИТ, унакрсни компајлери и транспилери.
  • Преведени код је бржи од интерпретираног кода.

Процес компилације

Ако сте се упустили у свет програмирања, вероватно сте чули термин „ компилирање “. Овај концепт је фундаменталан за развој софтвера, јер дефинише процес којим се изворни код написан у програмском језику трансформише у формат који рачунар може да изврши.

Разумевање шта значи компајлирати и како компајлер функционише је од суштинског значаја за сваког програмера који жели да оптимизује свој код и боље разуме како функционишу програмски језици. У наставку ћемо детаљно објаснити шта овај процес подразумева, типове компајлера који постоје и кључне разлике између компајлираног и интерпретираног кода.

Шта је компајлирање?

Компајлирање је процес превођења изворног кода из програмског језика високог нивоа (као што су C++, Java или Rust) у бинарни код или машински код, који процесор рачунара може директно да изврши.

Изворни код је написан језиком који људи могу да читају и разумеју, али рачунари могу да интерпретирају само бинарни код. Стога је за претварање изворног кода у извршни код потребан посебан програм који се зове компајлер . Ако желите да сазнате више о овој теми, можете погледати наш водич о концептима и разликама између компајлера и интерпретера.

Шта је компајлер и како функционише?

Компилатор је програм специјализован за трансформацију изворног кода у објектни код или извршни код. Овај процес конверзије се састоји од неколико фаза:

  Мастер Обсидијан ЦЛИ: Моћ терминала у вашим белешкама

1. Претходна обрада

Пре компилације, изворни код пролази кроз фазу препроцесирања где се макрои проширују, неопходне датотеке укључују и друге модификације се врше пре генерисања кода који је заправо компајлиран.

2. Лексичка анализа

Компилатор скенира изворни код и дели га на токене , који су најмање јединице значења у програмском језику, као што су кључне речи, идентификатори и оператори.

3. Синтаксичка анализа

У овој фази се проверава да је структура кода исправна према граматици програмског језика. Ако постоје синтаксичке грешке, компајлер ће их открити и рећи програмеру где се налазе како би се могле исправити.

4. Семантичка анализа

Компилатор проверава да ли операције и изрази у коду имају логичког смисла. Проверава да ли су променљиве и функције добро дефинисане и да ли се извршавају валидне операције. Ово је кључно како би се осигурало да се ваш код компајлира без проблема.

5. Генерисање средњег кода

Након провере синтаксе и семантике кода, компајлер генерише међукод , поједностављену репрезентацију која се може оптимизовати пре коначног превођења у машински код.

6. Оптимизација кода

У овој фази, компајлер побољшава генерисани код како би га учинио ефикаснијим и смањио потрошњу меморије и време обраде.

7. Генерисање машинског кода

Коначно, међукод се конвертује у инструкције машинског кода специфичне за архитектуру процесора рачунара. Овај део процеса је од виталног значаја како би се осигурало да ће програм исправно функционисати на хардверу.

8. Повезивање

Генерисани објектни код се комбинује са библиотекама и другим модулима потребним за производњу коначне извршне датотеке. Занимљиво је како се ове библиотеке управљају, и за то може бити користан специјализовани компајлер, као што су они које можете пронаћи у нашем одељку о компајлерима за C језик.

  ЈетБраинс Јуние: Помоћник за кодирање са АИ

Врсте компајлера

Постоје различите врсте компајлера у зависности од њиховог рада и намене:

  • АОТ (Ахеад-Оф-Тиме) компајлери: Они компајлирају сав код пре него што га изврше. Примери: ГЦЦ, Цланг.
  • ЈИТ (Јуст-Ин-Тиме) компајлери: Они компајлирају код током извршавања да би побољшали перформансе. Примери: ЈВМ за Јава, В8 за ЈаваСцрипт. За дубље разумевање ове врсте, предлажемо наш водич Јуст-Ин-Тиме компајлери.
  • Унакрсни компајлери: Они генеришу извршни код за платформу различиту од оне коју покрећу. Ако сте заинтересовани, можете прочитати о Унакрсни преводиоци у детаље.
  • Транспилерс: Они трансформишу код из једног језика високог нивоа у други, као што је ТипеСцрипт у ЈаваСцрипт.

Преведени код наспрам интерпретираног кода

Једна од главних разлика у извршавању програма је да ли се код компајлира или интерпретира :

  • Састављен код: Потпуно је преведен пре покретања и обично је бржи. Пример: Ц, Ц++.
  • Интерпретирани код: Преведено ред по ред током извршавања, олакшавајући преносивост, али смањујући перформансе. Пример: Питхон, ЈаваСцрипт.

Пример практичне компилације

Претпоставимо да напишете програм у Ц:

#инцлуде инт маин() { принтф("Здраво, свет!\н"); ретурн 0; }

Да бисте компајлирали овај код са ГЦЦ-ом у терминалу, требало би да покренете:

гцц програм.ц -о програм

Кроз чланак смо детаљно истражили процес компилације, од његове дефиниције до значаја у развоју софтвера. Док интерпретирани језици нуде флексибилност, компајлирани језици су значајни по својој ефикасности. Разумевање начина на који компајлер ради и фазе процеса је кључно за побољшање наших вештина као програмера.

Увод у језик Ц
Повезани чланак:
Увод у језик Ц – Ултимативни водич