Интерпретирани програмски језик
Интерпретирани језик је програмски језик који код већине својих имплементација извршава инструкције директно, без претходног компиловања програма у упутство машинског језика. Интерпретатор извршава програм директно, превођењем сваке изјаве у секвенцу једног или више потпрограма који је већ преведен у машински код.
Термини интерпретирани језик и компиловани језик нису добро дефинисани, јер у теорији, сваки програмски језик може бити или интерпретиран или компилован. У модерним имплементацијама програмских језика је све популарнија платформа која обезбеђује обе опције.
Интерпретирани језици могу бити у супротности са машинским језицима. Функционално, и извршење и интерпретација имају исто значење — Налажење следеће инструкције/изјаве из програма и његово извршење. Иако је интерпретирани бајткод додатно идентичан машинском коду у форми и има приказ асемблера, термин "интерпретиран" је практично резервисан за "софтверски обрађене" језицике (од стране виртуелне машине или емулатора) на врху процесора.
У принципу, програми у многим језицима могу бити компиловани или интерпретирати, емулирани или природно извршени, тако да се ова ознака примењује искључиво на основу заједничке имплементације, а не представља битну особину језика.
Многи језици су имплементирани коришћењем и компилатора и интерпретера, укључујући Бејсик, С, Lisp, Паскал и Пајтон. Јава и С # су компиловани у бајткод, у виртуалну машину-пријатељски интерпретирани језик. Lisp имплементације могу слободно мешати интерпретирани и компиловани код.
Историјат интерпретираног / компилованог
[уреди | уреди извор]У раним данима рачунарства, дизајн језика је био под великим утицајем одлуке да ли да користе компиловани или интерпретирани начин извршења. На пример, Smalltalk (1980), који је дизајниран да буде интерпретиран у run-time, допушта општим објектима да динамички делују један према другом.
У почетку, интерпретирани језици су били компиловани линију по линију; то јест, свака линија је компилована у тренутку извршавања, а ако петља или потпрограм проузрокује одређене линије које треба да се извше више пута, морале су да се прекомпилирају сваки пут. Ово је постало много ређе. Већина тзв интерпретираних језика користе средњу репрезентацију, која комбинује компиловање и интерпретирање.
Неки примери:
- Јава
- Пајтон
- Руби (Слично томе, користи Апстрактно синтаксно дрво као средњи приказ)
- Форт
Средњи приказ се може превести једном за свагда (као у Јави), сваки пут пре извршења (као у Перл или Руби), или сваки пут када је промена у извору откривена пре извршења (као у Пајтон).
Предности интерпретираног језика
[уреди | уреди извор]Интерпретирани језик даје неку додатну флексибилност имплементацији у односу на компиловане имплементације. Функције које су често лакше за спровођење у интерпретатору него у компилаторима укључују и (али нису ограничене на):
- независност платформе (Јавин бајткод, на пример)
- одраз употребе евалуатора (нпр Функција првог реда евал)
- динамично куцање
- мања извршна величина програма (од кад имплементација има флексибилност да изабере инструкцију кода)
- Обим (рачунарска наука)
Недостаци интерпретираног језика
[уреди | уреди извор]Недостаци интерпретираног језика су:
- Без статичког типа провере, који обично обавља компилатор, програми могу бити мање поуздани, јер тип провере елиминише класу програмских грешака.
- Интерпретери могу да буду подложни нападима инјекција кода.
- Спорије извршење у односу на директно Машински језик извршење на хост процесор. Техника која се користи за побољшање перформанси је just-in-time компилација који претвара често извршене секвенце интерпретираних инструкција у машински код. JIT је најчешће комбинован са компилацијом на бајткоду, као у Јави.
- Изворни код се може читати и копирати (нпр ЈаваСкрипт у веб страницама), или лакше пројектовати уназад кроз одраз у апликацијама где интелектуална својина има комерцијалну предност. У неким случајевима шифровање може да се користи за скривање изворног кода, или заваравање запослених да сакрије своју сврху.
Листа често коришћених интерпретираних језика
[уреди | уреди извор]- APL Векторски оријентисан језик који користи скуп неуобичајених карактера
- J APL варијанта у којој је прећутна дефиниција даје неке од предности прикупљања
- Бејсик (иако је оригинална верзија, Dartmouth BASIC, је направљен, као што су многи модерни BASIC-и)
- ECMAScript
- Actionscript
- E4X
- Јаваскрипт (прво назван Mocha, па онда LiveScript)
- JScript
- Једначина манипулације и решавање система
- Euphoria Интерпретирана или копилована
- Forth
- Game Maker Language
- Lava
- Madness Script
- Перл
- PHP
- PostScript
- Python
- Lisp
- MUMPS
- REXX
- Ruby
- JRuby (Јавина имплементација Рубија)
- Seed7
- Smalltalk
- Скриптни језици
- Табеле
- S
- Tcl
- VBScript
- PowerShell
- XMLmosaic Хмл садржи, C # као програмски језик интерпретиран од конзоле апликације написане у Visual Basic .NET
Језици обично компиловани на бајткод
Многи интерпретирани језици су прво компиловани у бајткод. Понекад, бајткод може бити компилован природно бинарно користећи АОТ компилатор или природно извршен, од стране процесора.
- Јава (је састављен у Јава бајткоду и интерпретиранод стране ЈВМ)
- Lua
- .NET Framework језици (преведени на бајткод, назван CIL).
- Pike
- Пајтон
- Squeak Smalltalk
- Visual FoxPro
- Lisp
- AppleScript
Види још
[уреди | уреди извор]- Списак програмских језика по врсти
- Превођени програмски језик
- Програм који се извршава
- Код управљања
Референце
[уреди | уреди извор]- Brown,P.J. . Writing Interactive Compilers and Interpreters,John Wiley. 1979. ISBN 978-0-471-27609-8.