Szkriptnyelv
Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. november 12-én felülvizsgált
verziótól ; az ellenőrzések 7 szerkesztést igényelnek .
Szkriptnyelv ( szkriptnyelv , szkriptnyelv ; angol szkriptnyelv ) - magas szintű szkriptnyelv ( English script ) - a rendszer által végrehajtott műveletek rövid leírása. A programok és a szkriptek közötti különbség meglehetősen homályos. A script egy olyan program, amely kész szoftverkomponensekkel [1] foglalkozik , amelyek betöltése után nem függenek attól, hogy munkájuk során továbbra is fennáll-e/hiányzik-e a hálózathoz való kapcsolat .
John Oosterhout , a Tcl nyelv szerzője szerint a magas szintű nyelvek rendszerprogramozási nyelvekre és szkriptnyelvekre oszthatók . Ez utóbbiakat ragasztónyelveknek vagy rendszerintegrációs nyelveknek is nevezte . _ _ A szkripteket általában értelmezik , nem pedig lefordítják [2] , bár a szkriptnyelvek egyenként kapják meg a JIT fordítókat [3] [4] [5] .
Szűkebb értelemben a szkriptnyelv egy parancshéj vagy szövegszerkesztő és az operációs rendszer adminisztrációs eszközeinek képességeinek bővítésére szolgáló speciális nyelvként értelmezhető [6] .
Osztályozás
A programozási nyelvek általában és a szkriptnyelvek különösen sokféleképpen osztályozhatók.
Sebesség szempontjából a szkriptnyelvek dinamikus elemzési nyelvekre ( sh , COMMAND.COM ) és előre lefordított nyelvekre ( Perl ) oszthatók . A dinamikus elemzési nyelvek utasításokat olvasnak be egy programfájlból a minimálisan szükséges blokkokban, és végrehajtják ezeket a blokkokat további kód olvasása nélkül. Az előre lefordított nyelvek a teljes programot bájtkódra fordítják , majd végrehajtják. Egyes szkriptnyelvek képesek egy programot menet közben gépi kódba fordítani (úgynevezett JIT-fordítás ).
Alkalmazás szerint a nyelvek nagyjából három típusra oszthatók [7] :
- parancs-forgatókönyv;
- alkalmazott forgatókönyvek;
- univerzális forgatókönyvek.
Parancs-szkript nyelvek
Az 1960-as években jelent meg az operációs rendszerek feladatainak kezelésére. Az akkori nyelvek közül a JCL for OS/360 a legismertebb . Ez az osztály tartalmazza a kötegelt nyelveket ( ang. batch language ) és a parancshéjnyelveket , mint például az sh , csh Unix számára . Ezeket a nyelveket leggyakrabban kötegelt feldolgozásban használják [7] .
Például a MacOS operációs rendszer AppleScript nyelve rendelkezik egy Script Editorral, amely lehetővé teszi, hogy a felhasználó által a rendszerben végrehajtott műveleteket szkriptfájlba (szövegfájlba) rögzítse, és végrehajtható programként formázza. Ez a megközelítés lehetővé teszi a nem programozó felhasználó számára, hogy egyszerű szkripteket állítson össze [8] .
Beágyazott (alkalmazott szkriptnyelvek)
Az ilyen típusú szkriptnyelvek az 1980-as években kezdtek megjelenni, amikor az operációs rendszerrel való interaktív kommunikáció lehetővé vált az ipari személyi számítógépeken. Kliens-szerver architektúrában az ilyen nyelvek a szoftver kliens oldalán működtek [7] .
Általános célú nyelvek
Ez a fajta szkriptnyelv a legismertebb (főleg, ha webes programozásra alkalmazzák ). Az ilyen típusú nyelvek az 1990-es évek óta jelennek meg [7] .
Meg kell jegyezni, hogy az ebbe a kategóriába tartozó nyelvek közül sok szélesebb körű, mint a szkriptnyelvek, mint például a JavaScript, amely bizonyos esetekben futhat a szerveren.
Kritika
A Java megalkotója , James Gosling a dinamikus programozási nyelveket (a PHP és a Ruby említésével) a szkriptnyelvek szerepébe helyezte, amelyek weboldalakat generálnak, de skálázhatóságuk és teljesítményük miatt alkalmatlanok az alkalmazások szélesebb körében való használatra. problémák [9] . A dinamikus nyelvek hívei nem hagyták minden tekintetben megválaszolatlanul a kritikát, különös tekintettel arra, hogy a modern dinamikus nyelveket csak "forgatókönyvként" akarta bemutatni [10] .
Beépülő modulok és szkriptek
Egyéni kiterjesztések írásához mind a szkriptek (egyes programok terminológiájában " makrók "), mind a beépülő modulok ( fordított nyelveken írt független modulok ; egyes programokban "segédprogramoknak", "exportőröknek", "illesztőprogramoknak") is használhatók. használva lenni.
A szkriptnyelv a következő esetekben hasznos:
- Ha biztosítani szeretné a programozhatóságot a rendszer destabilizálásának kockázata nélkül. Mivel a beépülő modulokkal ellentétben a szkripteket a program értelmezi, nem pedig lefordítja, a rosszul megírt szkript diagnosztikai üzenetet jelenít meg, nem pedig rendszerösszeomlást okoz . Ellenpélda lehet például a JVM és a CLR , és ha az elsőt a kódhordozhatóság miatt fejlesztették ki (a biztonság mellékhatás), akkor a másodikat pontosan biztonsági okokból.
- Ha a kifejező kód fontos.
- Először is, minél összetettebb a rendszer, annál több kódot kell írnod " mert szükséges ". A szkript áthelyezheti a sablonkód egy részét (inicializálás, megsemmisítés, szálak közötti szinkronizálás stb.) a parancsfájl-végrehajtási környezetbe.
- Másodszor, egy szkriptnyelv teljesen eltérő programozási koncepcióval rendelkezhet, mint a fő program – például egy játék lehet monolitikus egyszálú alkalmazás, míg a karaktereket vezérlő szkriptek párhuzamosan vagy korutinként futnak le . Ez a megközelítés a rendszer méretezhetősége szempontjából jó (a szkriptek nem függenek az eljárások megvalósításától, sokkal gyorsabban és könnyebben debuggolhatók), de nem túl jó a kód minősége szempontjából, mivel ez elkerülhetetlen megkettőzéséhez vezet.
- Sokkal racionálisabb megközelítés az olyan erőforrásfájlok (opcióként xml fájlok, struktúrák, adatbázisok ) létrehozása, amelyek "lényegében" ( deklaratív stílusban ) írják le a viselkedést, ahogyan a játékon belüli objektumok egyéb tulajdonságainál (textúrák, modellek, effektusok, hangok).
- Harmadszor, a szkriptnyelvnek saját, tartomány-specifikus parancskészlete van, és a parancsfájl egy sora ugyanazt tudja végrehajtani, mint egy hagyományos nyelv több tucat sora . Érdemes azonban megjegyezni, hogy a kód nagyobb kifejezőképessége a szkriptnyelvekben korlátaik és/vagy újdonságaik következménye, és hasonlítsa össze a C -t (1970-es évek) és a PHP -t (1990-es évek) és/vagy a Fortran -t (1950-es évek) és a Python -t (1990-es évek). alkalmatlan.
- A szkriptek alacsony belépési küszöbükről ismertek; még egy alacsonyan képzett programozó is tud szkriptnyelven írni. Ez egyszerre plusz és mínusz. Ez egyrészt lehetővé teszi olcsó munkaerő felvételét (szakemberek megszabadítása a rutinmunka alól és a fejlesztési sebesség nagymértékű növelése ), másrészt kritikusan csökkenti a termelékenységet és a megbízhatóságot (mivel az ilyen nyelvek oktatásának középpontjában áll konkrét problémák megoldása, és nem az előállított termékek lényegének megértése).
- A magas belépési küszöb problémája elsősorban a redundáns szintaxisú nyelvekben ( C++ , C# ) fordul elő, és csak úgy oldható meg teljesen, ha elhagyjuk őket a sikeresebbek javára (ami persze messze nem mindig lehetséges). Ebben az esetben a szkriptek palliatív hatást fejtenek ki . Valójában akkor keletkeztek, amikor a C-szerű nyelvek skálázhatósága elégtelenné vált a mindennapi munkához, és drámaian megnőtt az újonnan érkezők belépési küszöbe az iparágba.
- A nagy mennyiségű rutin problémája általánosságban elmondható, hogy megoldhatatlan, de a legtöbb esetben megbízhatóbb kiegészítő eszközökkel, például automatikus kódgenerálással elsimítható .
- Ha több platformra van szükség . Például a JavaScript - a böngészők hajtják végre számos operációs rendszer alatt.
- A többplatformos probléma közvetlenül a nyelvi szabványból következik: a C szabvány például megadja, hogy „sizeOf (short) <= sizeOf (int) <= sizeOf (long)”, de nem határozza meg, hogy mekkora bitmélységgel kell rendelkezniük. (az alkalmazáskönyvtárak megoldják ezt a problémát, pl. glib ). A modern nem szkriptnyelvek ( Java , C# , Haskell ) pontosan a jó szabványosítás miatt teljesen nélkülözik ezt a problémát.
- A szkriptnyelvek olyan programok írására szolgálnak, amelyek nem igényelnek optimalitást és végrehajtási sebességet. Egyszerűségük miatt gyakran kis egyszeri ("problémás") programokat írnak rájuk.
- Sok általános célú szkriptnyelv elég lassú ahhoz, hogy gyakran csak harmadik féltől származó könyvtárakkal együtt használják őket (pl . a NumPy és a Python kombinációja).
- Ez nem túl jó példa, mivel a NumPy a régi Fortran MATHLAB könyvtáron alapul , amelynek kódja, bár idővel tesztelt, elkerülhetetlenül elkezd „rothadni” – rendkívül primitív egyszálú számítógépekre írták, amelyekben más szűk keresztmetszetek is vannak (és bár ezt kompenzálja a fordítók optimalizálása és az operációs rendszer szintű párhuzamosítás, a teljesítmény fokozatosan romlik).
- Helyesebb példa: A Lua egy klasszikus, általános célú beágyazható szkriptnyelv, amelynek futtatásához minimális C implementációra van szükség (ahol van C, a Lua működhet).
- A szkriptnyelvek alkalmasak az adatok megjelenítésére is: összetett grafikonok és prezentációk, valamint egyszerű programok létrehozására (például a Python a Gnome és Cinnamon grafikus shellekben kisalkalmazások és kis konfigurációs segédprogramok létrehozására szolgál ).
A beépülő moduloknak fontos előnyei is vannak.
- A gépi kódra lefordított kész programok sokkal gyorsabban futnak, mint azok a szkriptek, amelyek minden egyes végrehajtáskor dinamikusan értelmeződnek a forráskódból . A legtöbb program forráskód szinten hordozható, és a megfelelő nyelvi értelmezővel, például szkriptekkel futtatható. A bájtkód ( Java , C# , LLVM ) használata lehetővé teszi a programok tárolását, átvitelét és végrehajtását a szkripteknél hatékonyabban.
- A JIT-összeállítás azt is lehetővé teszi, hogy optimalizálja az általános kódot egy adott platformhoz (a jövőben egy adott processzorcsaládhoz és a rendelkezésre álló hardverhez).
- Teljes hozzáférés bármilyen hardverhez vagy operációs rendszer erőforráshoz (a szkriptnyelvben ehhez egy speciális API -nak kell lennie a lefordított nyelven írva). A hardverrel együttműködő beépülő modulokat hagyományosan illesztőprogramoknak nevezik .
- Ha sok adatcsere várható a fő program és az egyéni bővítmény között, akkor azt a beépülő modul könnyebben tudja biztosítani.
- A lefordított programozási nyelveket erős statikus típusú rendszer jellemzi, amely lehetővé teszi a hibák hatékony észlelését és a kód jobb optimalizálását. A dinamikus gépelés használata a modern szkriptekben valószínűbb a technikai megvalósítási jellemzők és a történelmi okok miatt. Ezenkívül a statikusan tipizált nyelveknek megvan a növekedési potenciálja, nevezetesen a hagyományos monomorf tipizálásról a polimorf tipizálásra való átállás . A modern C-szerű nyelvek monomorfizmus-kiterjesztései ( túlterhelés , ad-hoc polimorfizmus ) és az altípus-polimorfizmus , valamint a paraméteres polimorfizmus és a típusosztályok kísérleti nyelvekben (pl. Haskell) nem érhetők el a szkriptnyelvek számára (statikus gépelés). futásidőben jelentős teljesítménycsökkenéshez vezet).
Jegyzetek
- ↑ Susie R. Szkriptnyelvek: Python. "PC World", 2001. 9 . Letöltve: 2012. október 9. Az eredetiből archiválva : 2013. január 17.. (határozatlan)
- ↑ Outerhout, 1998 .
- ↑ LuaJIT . Letöltve: 2012. október 9. Az eredetiből archiválva : 2012. október 2.. (határozatlan)
- ↑ PyPy . Letöltve: 2012. október 9. Az eredetiből archiválva : 2008. május 12.. (határozatlan)
- ↑ Joab Jackson (IDG hírszolgálat), a Facebook kiad egy PHP just-in-time fordítót . Letöltve: 2012. október 9. Az eredetiből archiválva : 2012. június 11. (határozatlan)
- ↑ Yu. A. Denisov, Programozás humán tudományoknak, 12. Előadás: Nyelvtanok bemutatása
- ↑ 1 2 3 4 5 6 7 Bogatyrev, 2001 .
- ↑ Trofimov, Trofimova, 1997 .
- ↑ James Gosling: „A Java nem fenyegeti komolyan a PHP, a Ruby vagy a C# felől ” Letöltve: 2012. október 9. Az eredetiből archiválva : 2012. október 24.. (határozatlan)
- ↑ Ryan Tomayko, Gosling Did't Get The Memo . Letöltve: 2012. október 9. Az eredetiből archiválva : 2012. január 18.. (határozatlan)
Irodalom
Linkek
Szótárak és enciklopédiák |
|
---|
Bibliográfiai katalógusokban |
|
---|