Limbajul scriptului
Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită pe 12 noiembrie 2021; verificările necesită
7 modificări .
Limbajul de scripting ( limbaj de scripting, limbaj de scripting ; limbaj de scripting englez ) - un limbaj de scripting de nivel înalt ( script englez ) - scurte descrieri ale acțiunilor efectuate de sistem. Diferența dintre programe și scripturi este destul de neclară. Un script este un program care se ocupă cu componente software gata făcute [1] , care, odată încărcate, nu depind de prezența/absența continuă a unei conexiuni la Rețea în activitatea lor .
Potrivit lui John Oosterhout , autorul limbajului Tcl , limbajele de nivel înalt pot fi împărțite în limbaje de programare de sistem și limbaje de scripting . El le- a numit și pe acestea din urmă limbaje de adeziv sau limbaje de integrare a sistemului . Scripturile sunt de obicei interpretate mai degrabă decât compilate [2] , deși limbajele de scripting primesc compilatoare JIT unul câte unul [3] [4] [5] .
Într-un sens mai restrâns, un limbaj de scripting poate fi înțeles ca un limbaj specializat pentru extinderea capacităților unui shell de comandă sau a unui editor de text și a instrumentelor de administrare a sistemului de operare [6] .
Clasificare
Limbajele de programare în general și limbajele de scripting în special pot fi clasificate în multe moduri diferite.
În ceea ce privește viteza, limbajele de scripting pot fi împărțite în limbaje de analiză dinamică ( sh , COMMAND.COM ) și limbaje precompilate ( Perl ). Limbile de analiză dinamică citesc instrucțiuni dintr-un fișier de program în blocurile minime necesare și execută acele blocuri fără a citi codul suplimentar. Limbile precompilate traduc întregul program în bytecode și apoi îl execută. Unele limbaje de scripting au capacitatea de a compila un program din mers în codul mașinii (așa-numita compilare JIT ).
După aplicație, limbile pot fi împărțite aproximativ în trei tipuri [7] :
- comandă-scenariu;
- scenarii aplicate;
- scenarii universale.
Limbaje de scriptare de comandă
A apărut în anii 1960 pentru a gestiona sarcini în sistemele de operare. Dintre limbile din acea vreme, JCL pentru OS/360 este cel mai cunoscut . Această clasă include limbaje batch ( eng. batch language ) și limbaje shell de comandă , cum ar fi sh , csh pentru Unix . Aceste limbi sunt cel mai frecvent utilizate în procesarea loturilor [7] .
De exemplu, limbajul AppleScript al sistemului de operare MacOS are un Editor Script care vă permite să înregistrați acțiunile pe măsură ce sunt efectuate de utilizator în sistem într-un fișier script (fișier text) și să îl formatați ca program executabil. Această abordare permite unui utilizator non-programator să compună scripturi simple [8] .
Limbi încorporate (scripting aplicat)
Limbajele de scripting de acest tip au început să apară în anii 1980, când comunicarea interactivă cu sistemul de operare a devenit posibilă pe computerele personale industriale. Într-o arhitectură client-server, astfel de limbaje funcționau în partea client a software-ului [7] .
Limbi de uz general
Acest tip de limbaj de scripting este cel mai cunoscut (mai ales atunci când este aplicat la programarea web ). Limbi de acest tip au apărut încă din anii 1990 [7] .
Trebuie remarcat faptul că multe dintre limbile din această categorie au utilizări mai largi decât doar limbaje de scripting, cum ar fi JavaScript, care în unele cazuri poate rula pe server.
Critica
Creatorul Java, James Gosling , a relegat limbajele de programare dinamică (prin menționarea PHP și Ruby) în rolul limbajelor de scripting care generează pagini web, dar sunt nepotrivite pentru utilizare într-o nișă mai largă de aplicații datorită scalabilității și performanței. probleme [9] . Adepții limbilor dinamice nu au lăsat criticile fără răspuns din toate punctele de vedere, în special cu privire la eforturile sale de a prezenta limbajele dinamice moderne ca doar „scrise” [10] .
Pluginuri și scripturi
Pentru a scrie extensii personalizate, atât scripturile (în terminologia unor programe „ macro -uri ”), cât și pluginurile (module independente scrise în limbaje compilate ; în unele programe pot fi numite „utilități”, „exportatori”, „drivere”). fi folosit.
Limbajul de scripting este util în următoarele cazuri:
- Dacă doriți să asigurați programabilitatea fără riscul destabilizarii sistemului. Deoarece, spre deosebire de pluginuri , scripturile sunt interpretate mai degrabă decât compilate, un script prost scris va afișa un mesaj de diagnosticare în loc să provoace o blocare a sistemului . Contraexemplele pot fi, de exemplu, JVM și CLR , iar dacă primul a fost dezvoltat din motive de portabilitate a codului (securitatea este un efect secundar), atunci al doilea este tocmai din motive de securitate.
- Dacă codul expresiv este important.
- În primul rând, cu cât sistemul este mai complex, cu atât trebuie să scrieți mai mult cod „ pentru că este necesar ”. Un script poate muta o parte din acest cod standard (inițializare, distrugere, sincronizare între fire etc.) în mediul de execuție a scriptului.
- În al doilea rând, un limbaj de scripting poate avea un concept de programare complet diferit față de programul principal - de exemplu, un joc poate fi o aplicație monolitică cu un singur fir, în timp ce scripturile care controlează caracterele sunt executate în paralel sau ca corutine . Această abordare este bună din punct de vedere al scalabilității sistemului (scripturile nu depind de implementarea procedurilor, sunt scrise mult mai rapid și mai ușor de depanat), dar nu foarte bună din punct de vedere al calității codului, deoarece este inevitabil duce la duplicarea acestuia.
- O abordare mult mai rațională este crearea fișierelor de resurse (opțional, fișiere xml , structuri, baze de date ) care descriu comportamentul „în mod esențial” (într-un stil declarativ ), așa cum se face cu alte proprietăți ale obiectelor din joc (texturi, modele, efecte, sunete).
- În al treilea rând, limbajul de scriptare are propriul set de comenzi specifice domeniului și o linie de script poate face același lucru ca câteva zeci de linii într-o limbă tradițională. Cu toate acestea, este de remarcat faptul că expresivitatea mai mare a codului în limbajele de scripting este o consecință a limitărilor și/sau a noutății acestora și comparăm C (anii 1970) și PHP (anii 1990) și/sau Fortran (anii 1950) și Python (anii 1990) nepotrivit.
- Scripturile sunt cunoscute pentru pragul lor scăzut de intrare; chiar și un programator slab calificat poate scrie într-un limbaj de scripting. Acesta este atât un plus, cât și un minus. Pe de o parte, acest lucru vă permite să angajați forță de muncă ieftină (eliberând specialiștii de munca de rutină și creșterea intensă a vitezei de dezvoltare ), iar pe de altă parte, reduce în mod critic productivitatea și fiabilitatea (datorită concentrării predării unor astfel de limbi pe rezolvarea unor probleme specifice, iar nu asupra înțelegerii esenței produselor produse).acțiuni).
- Problema unui prag ridicat de intrare apare în principal în limbajele cu sintaxă redundantă ( C++ , C# ) și poate fi rezolvată complet doar prin abandonarea lor în favoarea celor mai de succes (ceea ce, desigur, este departe de a fi întotdeauna posibil). În acest caz, scenariile acționează ca un paliativ . De fapt, acestea au apărut atunci când scalabilitatea limbajelor asemănătoare C a devenit insuficientă pentru munca de zi cu zi și pragul pentru intrarea noilor veniți în industrie a crescut dramatic.
- Problema unei cantități mari de rutină este, în general, de nerezolvat, dar în majoritatea cazurilor poate fi netezită prin mijloace suplimentare mai fiabile, de exemplu, generarea automată a codului .
- Dacă este necesară o multiplatformă . De exemplu, JavaScript - este executat de browsere sub o varietate de sisteme de operare.
- Problema cu multiplatformă decurge direct din standardul de limbaj: standardul C, de exemplu, specifică „sizeOf (short) <= sizeOf (int) <= sizeOf (long)”, dar nu specifică ce adâncime de biți ar trebui să aibă. (Bibliotecile de aplicații rezolvă această problemă, de exemplu glib ). Limbile moderne non-scripting ( Java , C# , Haskell ) sunt complet lipsite de această problemă tocmai datorită standardizării bune.
- Limbajele de scripting sunt folosite pentru a scrie programe care nu necesită optimitate și viteză de execuție. Datorită simplității lor, pe ele sunt adesea scrise programe mici („problemă”).
- Multe limbaje de scriptare de uz general sunt suficient de lente încât sunt adesea folosite numai în combinație cu biblioteci terțe (de exemplu , NumPy în combinație cu Python).
- Acesta nu este un exemplu foarte bun, deoarece NumPy se bazează pe vechea bibliotecă Fortran MATHLAB , al cărei cod, deși a fost testat în timp, începe inevitabil să „putrezească” - a fost scris pentru computere extrem de primitive cu un singur fir cu alte blocaje (și deși acest lucru este compensat prin optimizarea compilatoarelor și paralelizarea la nivelul sistemului de operare, performanța se va degrada treptat).
- Un exemplu mai corect: Lua este un limbaj de scripting integrat clasic de uz general, care necesită o implementare minimă a C pentru a rula (oriunde există C, Lua poate funcționa).
- Limbajele de scripting sunt, de asemenea, bune pentru vizualizarea datelor: crearea de grafice și prezentări complexe, precum și de programe simple (de exemplu, Python este folosit în shell-urile grafice Gnome și Cinnamon pentru a crea applet -uri și utilitare mici de configurare).
Pluginurile au și beneficii importante.
- Programele gata făcute traduse în codul mașinii rulează mult mai rapid decât scripturile care sunt interpretate dinamic din codul sursă de fiecare dată când sunt executate. Majoritatea programelor sunt portabile la nivel de cod sursă și pot fi executate de interpretul de limbaj adecvat, cum ar fi scripturile. Utilizarea bytecode ( Java , C# , LLVM ) vă permite să stocați, să transferați și să executați programe într-un mod mai eficient decât scripturile.
- Compilarea JIT vă permite, de asemenea, să optimizați codul general pentru o anumită platformă (în viitor, pentru o anumită familie de procesoare și hardware disponibil).
- Acces complet la orice resursă hardware sau OS (în limbajul de scripting, trebuie să existe un API special scris în limbajul compilat pentru aceasta). Pluginurile care funcționează cu hardware sunt denumite în mod tradițional drivere .
- Dacă se așteaptă mult schimb de date între programul principal și extensia personalizată, este mai ușor pentru plug-in să-l furnizeze.
- Limbajele de programare compilate se caracterizează prin utilizarea unui sistem puternic de tip static, care vă permite să capturați eficient erorile și să vă optimizați mai bine codul. Utilizarea tastării dinamice în scripturile moderne este mai probabilă din cauza caracteristicilor tehnice de implementare și a unor motive istorice. De asemenea, limbile tipizate static au potențialul de creștere, și anume tranziția de la tastarea tradițională monomorfă la tastarea polimorfă . Extensiile de monomorfism în limbaje moderne asemănătoare C ( supraîncărcare , polimorfism ad-hoc ) și polimorfism de subtip , precum și polimorfismul parametric și clasele de tip în limbaje experimentale (de exemplu, Haskell) nu sunt disponibile pentru limbajele de scripting (tasare statică). la timpul de execuție va duce la o pierdere semnificativă a performanței).
Note
- ↑ Susie R. Limbaje de scripting: Python. „PC World”, 9, 2001 . Consultat la 9 octombrie 2012. Arhivat din original la 17 ianuarie 2013. (nedefinit)
- ↑ Ousterhout, 1998 .
- ↑ LuaJIT . Consultat la 9 octombrie 2012. Arhivat din original pe 2 octombrie 2012. (nedefinit)
- ↑ PyPy . Consultat la 9 octombrie 2012. Arhivat din original la 12 mai 2008. (nedefinit)
- ↑ Joab Jackson (Serviciul de știri IDG), Facebook lansează un compilator PHP just-in-time . Preluat la 9 octombrie 2012. Arhivat din original la 11 iunie 2012. (nedefinit)
- ↑ Yu. A. Denisov, Programming for the Humanities, 12. Prelegere: Prezentarea gramaticilor
- ↑ 1 2 3 4 5 6 7 Bogatyrev, 2001 .
- ↑ Trofimov, Trofimova, 1997 .
- ↑ James Gosling: „Java nu este sub nicio amenințare serioasă din partea PHP, Ruby sau C#” . Consultat la 9 octombrie 2012. Arhivat din original pe 24 octombrie 2012. (nedefinit)
- ↑ Ryan Tomayko, Gosling nu a primit nota . Consultat la 9 octombrie 2012. Arhivat din original la 18 ianuarie 2012. (nedefinit)
Literatură
Link -uri
Dicționare și enciclopedii |
|
---|
În cataloagele bibliografice |
|
---|