Интерпретирани програмски језик

С Википедије, слободне енциклопедије

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

Термини интерпретирани језик и компиловани језик нису добро дефинисани, јер у теорији, сваки програмски језик може бити или интерпретиран или компилован. У модерним имплементацијама програмских језика је све популарнија платформа која обезбеђује обе опције.

Интерпретирани језици могу бити у супротности са машинским језицима. Функционално, и извршење и интерпретација имају исто значење — Налажење следеће инструкције/изјаве из програма и његово извршење. Иако је интерпретирани бајткод додатно идентичан машинском коду у форми и има приказ асемблера, термин "интерпретиран" је практично резервисан за "софтверски обрађене" језицике (од стране виртуелне машине или емулатора) на врху процесора.

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

Многи језици су имплементирани коришћењем и компилатора и интерпретера, укључујући Бејсик, С, Lisp, Паскал и Пајтон. Јава и С # су компиловани у бајткод, у виртуалну машину-пријатељски интерпретирани језик. Lisp имплементације могу слободно мешати интерпретирани и компиловани код.

Историјат интерпретираног / компилованог[уреди | уреди извор]

У раним данима рачунарства, дизајн језика је био под великим утицајем одлуке да ли да користе компиловани или интерпретирани начин извршења. На пример, Smalltalk (1980), који је дизајниран да буде интерпретиран у run-time, допушта општим објектима да динамички делују један према другом.

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

Неки примери:

Средњи приказ се може превести једном за свагда (као у Јави), сваки пут пре извршења (као у Перл или Руби), или сваки пут када је промена у извору откривена пре извршења (као у Пајтон).

Предности интерпретираног језика[уреди | уреди извор]

Интерпретирани језик даје неку додатну флексибилност имплементацији у односу на компиловане имплементације. Функције које су често лакше за спровођење у интерпретатору него у компилаторима укључују и (али нису ограничене на):

Недостаци интерпретираног језика[уреди | уреди извор]

Недостаци интерпретираног језика су:

  • Без статичког типа провере, који обично обавља компилатор, програми могу бити мање поуздани, јер тип провере елиминише класу програмских грешака.
  • Интерпретери могу да буду подложни нападима инјекција кода.
  • Спорије извршење у односу на директно Машински језик извршење на хост процесор. Техника која се користи за побољшање перформанси је just-in-time компилација који претвара често извршене секвенце интерпретираних инструкција у машински код. JIT је најчешће комбинован са компилацијом на бајткоду, као у Јави.
  • Изворни код се може читати и копирати (нпр ЈаваСкрипт у веб страницама), или лакше пројектовати уназад кроз одраз у апликацијама где интелектуална својина има комерцијалну предност. У неким случајевима шифровање може да се користи за скривање изворног кода, или заваравање запослених да сакрије своју сврху.

Листа често коришћених интерпретираних језика[уреди | уреди извор]

Језици обично компиловани на бајткод

Многи интерпретирани језици су прво компиловани у бајткод. Понекад, бајткод може бити компилован природно бинарно користећи АОТ компилатор или природно извршен, од стране процесора.

Види још[уреди | уреди извор]

Референце[уреди | уреди извор]