Сваки ред кода који напишете мора бити преведен на језик који ваш рачунар разуме. Али како се то дешава?

Изворни код програмских језика високог нивоа као што су ПХП, Свифт и ЈаваСцрипт помало личи на природни језик. Видећете енглеске речи у таквом коду и моћи ћете да разумете неке његове функционалности, чак и ако не знате сам језик. Али такав изворни код мора бити у машински читљивом формату да би рачунар могао да покрене коначни програм.

Да би то урадила, машини је потребан посредник да преведе ваш код у нешто што може да обради. Овај посредник може бити тумач, компајлер или асемблер. Сви они раде сличну ствар: преводе изворни код из облика читљивог за људе у машински читљив. Али начин на који то раде је сасвим другачији.

Шта је тумач?

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

instagram viewer

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

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

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

Компајлер чита ваш изворни код и преводи га у машински читљив извршни фајл. За разлику од тумача, он чита цео изворни код у једном потезу, генеришући машински код за каснију обраду од стране ЦПУ-а. Пошто компајлер обавља овај задатак само једном, компајлирани програми су обично бржи и ефикаснији за меморију.

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

Кључне разлике

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

Извршење кода: Обрада улаза и излаза

Тумач може само да прикупи, преведе и изврши сваки унос по реду. Покреће сваки ред изворног кода узастопно како долази, а коначни излаз зависи од тога шта свака линија даје током извршавања.

Компајлер спаја цео изворни код и преводи га само једном. Дакле, узима цео ваш изворни код као улаз, који конвертује и шаље у ЦПУ да добије излаз.

Отклањање грешака и праћење грешака

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

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

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

Перформансе и брзина

Као што се и очекивало, компајлер помаже машини да брже покрене програмски код пошто ЦПУ обрађује код само једном. Ово није тако за тумаче, који преводе сваки ред током извођења.

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

На пример, Цхроме претраживач обрађује ЈаваСцрипт користећи В8 мотор; ово ради на компајлеру Јуст-Ин-Тиме (ЈИТ). Пиинсталлер модул је још један помоћник који спаја и компајлира Питхон скрипту у извршни пакет.

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

Употреба меморије

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

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

Уопштено говорећи, међутим, компајлирани програми захтевају мање меморије за време извршавања. Пошто унапред претварају цео изворни код у машински читљив код, дају ЦПУ-у мање посла. Ово је у супротности са тумачима, који преводе код само у време извођења.

Подршка за програмски језик

Преводилац и компајлер имају приличан удео дистрибуција програмског језика. Неки популарни компајлирани језици укључују Ц, Ц#, Руст и Голанг. Интерпретирани језици су такође популарни, међу њима Питхон, ЈаваСцрипт и ПХП.

Више програмера преферира интерпретиране језике. Док ЈаваСцрипт и Питхон користе тумаче, они су укупно два најпожељнија језика, према 2023 Стацк Оверфлов Девелопер Анкета. Руст и Ц# представљају састављене групе на петој и шестој позицији.

Где тумачени језици сијају

Преводиоци блистају у овим областима:

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

Где побеђују компајлирани језици

Шта је са компајлерима? Ево неких аспеката у којима њихови језици показују одређену снагу:

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

Избор правог преводиоца за ваш пројекат

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

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