Limbajul de programare interpretat

Un limbaj de programare interpretat  este un limbaj de programare al cărui cod sursă este executat prin metoda de interpretare [1] . Clasificarea limbajelor de programare în funcție de metoda de execuție [2] , grupul de limbaje interpretate include limbaje în care instrucțiunile de program sunt traduse separat una după alta și imediat executate (interpretate) [3] folosind un program special de interpret (care se opune [1] limbajelor compilate , în care toate instrucțiunile programului sunt traduse în prealabil în cod obiect [3] ). Un astfel de limbaj poate implementa constructe care permit schimbări dinamice în timpul rulării (modificarea subrutinelor existente sau crearea de noi subrutine). Aceste constructe fac dificilă compilarea și traducerea într-un limbaj compilat [1] .

În general, orice limbaj poate fi compilat și interpretat. În cazul limitativ, un astfel de limbaj poate fi implementat doar cu ajutorul interpreților [4] . Există și denumiri limbaj interpretativ  („interpretativ”) [4] , limbaj interpretabil („interpretabil”), limbaj interpretat („interpretabil”) [5] .

Cu toate acestea, pentru multe limbi, există o diferență de performanță între implementările compilate și interpretate.

Un număr mare de limbaje, inclusiv BASIC , C , Lisp , Pascal și Python , au ambele implementări. Java folosește compilarea JIT pentru a genera cod nativ, deși inițial este tradus într-o formă interpretată. Limbile Microsoft .NET Framework sunt compilate în Common Intermediate Language (CIL) , care este compilat în codul nativ în timpul rulării. Majoritatea implementărilor Lisp vă permit să amestecați ambele tipuri de cod.

Istorie

În primele zile ale programării, limbajele au fost puternic influențate de modul în care au fost executate. De exemplu, limbajele compilate necesitau ca tipul de date al unei variabile să fie specificat în momentul în care a fost declarată sau utilizată pentru prima dată. În timp ce limbile interpretate, datorită naturii lor dinamice, au făcut posibilă renunțarea la această cerință, care a oferit mai multă flexibilitate și o dezvoltare accelerată.

Inițial, limbajele interpretate au fost convertite în codul mașinii linie cu linie, adică fiecare linie logică a fost compilată chiar înainte de execuție. Ca urmare, fiecare instrucțiune inclusă în corpul buclei și executată de mai multe ori a fost procesată de compilator de același număr de ori. În prezent, astfel de efecte sunt rare. Majoritatea limbilor interpretate sunt pretraduse într-o reprezentare intermediară. Este un bytecode sau un cod threaded . Acesta este un set de instrucțiuni pentru apelarea fragmentelor mici de cod de nivel inferior, echivalent cu mai multe instrucțiuni de asamblare sau , respectiv , instrucțiuni de mașină virtuală . Deja acest cod este executat de un interpret sau de o mașină virtuală. De exemplu, o astfel de schemă este utilizată de Java , Python și Ruby (folosește reprezentarea codului sub forma unui arbore de sintaxă abstractă ).

Codul intermediar poate fi creat fie prin compilarea explicită a întregului proiect (Java), fie prin traducere implicită de fiecare dată înainte de începerea programului (Perl, Ruby) și atunci când codul sursă se schimbă (Python).

Beneficii

Există o serie de caracteristici care sunt mult mai ușor de implementat într-un interpret decât într-un compilator:

În plus, principiile și stilul de programare adesea nu necesită crearea și descrierea unor constructe speciale care modelează programul (manifeste, clase, tipuri de date). Acest lucru vă permite să dezvoltați și să testați codul în mod incremental, ceea ce este util atât pentru scrierea de programe mici, cât și pentru dezvoltarea de module izolate pentru sisteme complexe. Datorită versatilității lor, sunt convenabile de utilizat ca limbaje de scripting .

Eliminarea etapei de compilare permite o dezvoltare mai rapidă a programelor, astfel încât limbajele interpretate sunt utilizate atunci când scrieți programe complexe unice (de exemplu, pentru a efectua un calcul unic).

Dezavantaje

Principalul dezavantaj este execuția mai lentă a programului [1] [6] [7] în comparație cu execuția unui program precompilat în codul mașinii . De exemplu, PHP și Python pot fi de peste 100 de ori mai lente decât C++ [8] . Traducerea în bytecode și compilarea JIT nu rezolvă complet această problemă. Un interpret suplimentar sau un strat de mașină virtuală încetinește execuția programului și poate necesita mai multe resurse. La runtime, interpretul trebuie să fie întotdeauna încărcat în memorie (care pot fi programe mari, cum ar fi un browser pentru JS sau Office pentru VBA) [6] . Comentariile pot reduce performanța și, pentru a ocoli acest lucru, sunt create două versiuni ale codului - gata de utilizare (cu comentariile eliminate) și dezvoltate [9] .

Ca rezultat, în medie, codul interpretat ar trebui testat mai amănunțit decât codul compilat, respectarea convențiilor de codificare mai strictă și ar trebui să fie utilizați analizatori suplimentari de calitate a codului. Ultimul dezavantaj nu este foarte pronunțat, deoarece dezvoltarea serioasă în limbaje compilate necesită și utilizarea acestor instrumente.

Note

  1. ↑ 1 2 3 4 5 6 Dorot V. L., Novikov F. A. Limbajul de programare interpretat, Interpretare // Dicționar explicativ al vocabularului informatic modern . - Ed. a 3-a. - Sankt Petersburg. : BHV-Petersburg, 2004. - S.  215 . — 608 p. — ISBN 9785941574919 . — ISBN 5941574916 .
  2. Makarova N.V., Volkov V.B. 19.1.2. Clasificarea limbajelor de programare // Informatică: manual pentru universități. - Sankt Petersburg. : Petru, 2015. - S. 557. - 576 p. — ISBN 9785496015509 .
  3. ↑ 1 2 Microsoft Press. interpret, interpreted language // Dicţionar explicativ de inginerie informatică. - M . : Ediţia rusă, 1995. - S. 236. - 496 p. — ISBN 5750200086 . — ISBN 1556155972 .
  4. ↑ 1 2 I.153 limbaj interpretativ // Dicţionar explicativ de sisteme de calcul / Ed. V. Illingworth şi alţii - M . : Mashinostroenie, 1990. - S. 241-242. — 560 p. — ISBN 521700617X .
  5. ↑ 1 2 Kochergin V. I. interpret // Dicționar științific și tehnic explicativ englez-rus mare de tehnologii informatice informatice și electronică radio. - 2016. - ISBN 978-5-7511-2332-1 .
  6. ↑ 1 2 3 4 Interpret, Interpretare // Dicționar explicativ de informatică / Pod. ed. G. G. Pivnyak. - Dnepropetrovsk: Universitatea Națională de Mine, 2008. - S.  327 -328. — 599 p. - ISBN 978-966-350-087-4 .
  7. Voroysky F. S. Interpretare, Interpret // Informatică. Dicționar enciclopedic - carte de referință. - M. : Fizmatlit, 2006. - S. 325. - 768 p. — ISBN 5922107178 . — ISBN 9785457966338 .
  8. McConnell, 2010 , 25.3. Unde să cauți grăsimi și melasă? Limbi interpretate, p. 585.
  9. McConnell, 2010 , 32.4. Sfaturi pentru un comentariu eficient. Performanța nu este un motiv rezonabil pentru a nu comenta, p. 774.

Literatură