Hogyan kell használni a virtuális gép papagáj 1. rész

Alex Snastin. Független szoftverfejlesztő, tanácsadó

Alex Snastin - egy független szoftver fejlesztő, tanácsadó és fordító angol műszaki és oktatási irodalom IT. Részt vett a fejlesztés a hálózati irodai alkalmazások, kliens / szerver C-típusú linuxos környezetben.

Leírás: ismerteti az általános jellemzőit és működési elvek a virtuális gép Parrot, valamint a forráskód példák az első cikk ebben a sorozatban. A következő cikk részletesen összeállítására irányuló eljárást és eszközöket; Ezen kívül fogunk beszélni Parrot interakció különböző programozási nyelvek.

A bármely programozási nyelv meglétét feltételezi egy olyan mechanizmust, amely végrehajtja az átalakulás parancsokat és utasításokat a nyelv a bináris kódot a célrendszer, amelyen a program fut. A fordító generálja a gépi kód megfelel egy adott architektúra. Amennyiben a helyzet bonyolultabb, vagy értelmezett script nyelvek. Ők igényelnek bizonyos végrehajtási környezetet, amely az úgynevezett tolmács vagy virtuális gépen (VM, virtuális gép).

Egészen a közelmúltig, minden értelmezett nyelv „című könyv vele” saját virtuális gép. A nevek Perl, Python, Ruby - ez nem csak a nevét script nyelv, hanem olvassa el a tolmácsok, a virtuális gépek szükségesek azok működését. Nem is olyan régen volt egy ötlet, majd az általánosított végrehajtása a virtuális gép, amely lehetővé teszi, hogy a program végrehajtásához ténylegesen különböző programozási nyelveken. Mi nevezték ezt a „soknyelvű” Parrot. A cikksorozat ezen a virtuális gép lesz hasznos a szoftverfejlesztők számára értelmezhető nyelven, valamint a rendszergazdák a Unix rendszerek.

Tehát Parrot - egy virtuális gép. Fő feladata, hogy végre speciális utasítások nem függ az adott hardver platform. A forráskód a programozási nyelvekben először átalakítjuk egy sor speciális utasítások, általában a továbbiakban bytecode (bytecode), majd végre a működési környezet, a virtuális gép.

Jelenleg Parrot kaphatnak utasításokat teljesítő négy formátumban. A PIR méret (Parrot Intermediate képviselet, közbenső képviselet) utasításokat programozók írhat vagy generálni fordítóprogramok különböző nyelven. Ez a formátum lehetővé teszi, hogy elrejtse bizonyos szempontból egy alacsonyabb szinten, például egy módszere, amely a paramétereket a funkciót. Egy szinttel lejjebb a PIR formátum segítségével le PASM (Parrot Assembly), amelynek utasításait is elérhető, hogy olvassa el az a személy, és lehet a fordító által generált. De itt a fejlesztő teljesen felelős minden végrehajtás részleteit: a koordinációs hívó egyezmények funkciók és eljárások, a forgalmazás virtuális gép nyilvántartások, és így tovább. Általánosságban, ez assembler assembler - igényel magasan képzett programozó.

Format múlt (Parrot absztrakt szintaxis fa) képes fogadni a bemeneti absztrakt szintaxis fa struktúra - nagyon hasznos azoknak, akik részt vesznek a fejlesztési fordítóprogramok.

Az összes fenti formátumok minden esetben automatikusan átkerül a negyedik méret PBC (Parrot bytecode). A bájtkód egy lefordított bináris kód kizárólag Parrot tolmács. Az ember nem valószínű, hogy képes lesz olvasni, és még valószínű, hogy képes, hogy írjon valamit közvetlenül bytecode. Parrot bytecode teljesen független minden platformon. Természetesen a byte-kód sokkal gyorsabb, mint a script forráskódot, hogy nem volt pre-összeállítani.

A beállított Parrot virtuális gép utasításokat beleértve számtani és logikai műveleteket, összehasonlítva az építési és a végrehajtás áramlásszabályozó, azaz hurkok, ha-akkor struktúra és hasonlók Támogatja a globális és lokális változók, dolgozó osztályok és objektumok, végre mechanizmusok alprogram és módszerek átadása a paramétereket, I / O, többszálas és így tovább.

Virtuális gép Parrot regiszter alapú, azaz a Mint hardver processzor meghatározza a biztosító elemek ultra-gyors hozzáférést biztosít abban tárolt adatokat. Ezek az elemek a nevezett regiszterek. Parrot regiszterek kínál négyféle: egész szám (I), a lebegőpontos (N), a vonalak (S) PMC-konténerek (P), amely később tárgyaljuk. Regiszterek minden típus lehet több, de egy meghatározott összeget kell meghatározni az egyes alprogram a fordítás során.

Most feltárni a rejtélyes betűszó PMC - polimorf Container, polimorf tartályba. PMC-doboz lehet bármilyen összetett adattípus vagy szerkezetében a tömb, a hash tábla, egy szótár, egy listát, stb Bármely PMC-tartály végre a saját speciális aritmetikai, logikai, és szöveg művelet, azaz modellezni a kívánt viselkedés az objektum. PMC-tartályokat lehet építeni a Parrot-program vagy lehet betölteni dinamikusan csak akkor, ha a szükség úgy kívánja.

A Parrot végre szemétgyűjtés (garbage collection), így a programozó nem aggódni a látszólagos felszabadulás elfoglalt memória - gondoskodunk a Parrot.

Annak érdekében, hogy folytassa a „helyszíni vizsgálatok” a Parrot virtuális gépet, telepíteni kell azt. A legjobb módja -, hogy kihasználják a teljes munkaidőben vezetője csomagok a forgalmazás, és nem probléma a telepítés során.

Könnyű fejlesztés egy új szoftver általában értékelik az alábbi kritériumoknak: milyen gyorsan meg lehet írni az elemi program kimenetét tetszőleges vonal, az úgynevezett „HelloWorld-teszt”. Nos, úgy becsüljük meg ennek a kritériumnak.

A hello.pir fájlt (ne felejtsük el, hogy a PIR formátum a legmagasabb szintű képviselete a kódot?) Írunk be az alábbi kódot:

vonal kimeneti utasítás nem különbözik az utasításokat a Perl vagy Python. Ez egy pozitív dolog, egy kis érv a Parrot. De a világ nem tökéletes, és mindent, ami benne van, sajnos, nem tökéletes. Csak a „plusz” az akkor legalább egy „mínusz”. És így a Parrot. Elindítása után a teszt helyett a várható eredmény, látni fogjuk, a következő üzenettel:

Ez azt jelenti, hogy a kimeneti karaktersorozatot helytelenül. Olvassa el a dokumentációt, azt találjuk, hogy az alapértelmezett a fő Parrot egy 8 bites ASCII, míg a legtöbb modern disztribúció által kapott de facto szabványos UTF-8.

A probléma megoldódott kifejezetten, megjegyezve szükséges kódolás előtagként, hogy a kimeneti karakterlánc. Úgy néz ki, mint ez:

Most a teszt fut, mint az várható volt. Meg kell jegyezni, hogy a támaszok Parrot ASCII karakterkészlet, iso-8859-1 (Latin 1), unicode (adott kiviteli fixed_8, UCS2, utf8 és utf16), továbbá egy speciális bináris, ami lehetővé teszi, hogy értelmezze a húr, mint az említett puffer formázatlan bináris adatokat.

A csata hevében a probléma elfelejtettük, hogy megvitassák a szerkezet és a szintaxis a program. És mégis, mi van ott, hogy megvitassák - és minden olyan egyértelmű: az első sor adja meg a szubrutin fő, a második - egy utasítás eleme a szervezet a szubrutin (az output string állandók), a harmadik - a befejezése a használati rutinok. Nos, még PIR-utasításokat annak meghatározására kezdete és vége rutinok kezdeni egy „pont”. Ez minden a leírás.

Line, valamint más típusú változók tárolhatók speciális regiszterek, amelyek már szóltunk. Tekintsük a következő példát:

A string regisztrálja S0 a sor az első helyre. Egy másik sztringregiszter S1 kerül rögzítésre az eredménye szervezetek (összefűzzük) tartalmát a regiszter S0 és kifejezetten megadva sztring konstansok. A „pont” kifejezés olyan működését összefűzzük vagy kombinálása sorok. Ezután a regiszter tartalma S1 kimenet.

Fontos megjegyezni, hogy nem tudja végrehajtani a közvetlen belépés a regiszterek PIR formátumban. Ehelyett a linkeket a nyilvántartások által azonosított prefix - egy dollár jel: $ S0, S1 $. Compiler, lásd referenciák $ S0, társult, hogy az egyik rendelkezésre álló karakterlánc virtuális gép nyilvántartások és hozzárendeli a regiszter beállított értéket.

Lehetséges egy másik lehetőség használatának nyilvántartások - egyfajta „nevű nyilvántartás”, hogy jobb érthetősége érdekében a forráskódot. Nevezett regisztereket is megjelenik a fordítóprogram a belső regiszterek a virtuális gép:

A második sor szubrutin fő .local irányelv előírja, hogy a megnevezett nyilvántartásban fel kell használni (vagy az aktuális rutint távcsöves elemzi ebben az esetben) a jelenlegi rutin. Következő Oldal típusa nevű karakterlánc megadott regiszterből, azaz regiszter egy karakterlánc (S). Továbbá, említhetjük típusú nyilvántartások egész int (I), úszó nyilvántartása lebegőpontos számok (N), PMC polimorf regiszterek konténerek (P), és emellett lehet írva itt PMC-típus neve.

Annak érdekében, hogy továbbra is tanulmányozza a szintaxis és ellenőrzési struktúrák Parrot virtuális gép, akkor kell egy program, egy kicsit több dolga, mint egy egyszerű levezetés sor, de nem túl nagy nehézséget. Erre a célra helyénvaló négyzetösszege például az első tíz természetes számok.

Ebben a programban, új elemek: aritmetikai műveletek egész számokkal, loop tag. tervezési vizsgálati körülmények esetén. Továbbá azt találtuk, hogy támogatta a széles körű működését megbízás összege + = tmp, de a növekmény inc i végrehajtott parancs, nem i ++, például Perl.

Méltányosság, meg kell jegyezni, hogy a formájában sok PIR-dokumentum egy úgynevezett „szintaktikus cukor” (szintaktikus cukor), azaz sokkal természetesebb és intuitív a humán megfelelője a „titokzatos” szerelési útmutató. Például, a molekularész

Meg lehet írva a „assemblerizovannom” formában:

Fontos szabály, ha egy ilyen szerelvény stílus: ha az utasítás nem módosítja a nyilvántartásban, ez nyilvántartást kell az első helyre, valójában, mivel a legtöbb „igazi” összeszerelő.

A legjobb példa erre, hogy bizonyítsa a rekurzív függvény hívások bármely programozási nyelv számítani a faktoriális. Parrot virtuális gép a program a következő:

Miután faktoriális szubrutin írásbeli .return irányelv (res), hogy másolja az érték szerepel a nyilvántartásban nevű res, abban az esetben, hogy a hívó program számára van fenntartva a visszatérési értéke az alprogram.

Cím főrutin írott formában

Az a tény, hogy a feltételezett PIR-formátum alapértelmezés szerint, hogy a végrehajtás kezdődik az első alprogram a forrás fájlban. A végrehajtás sorrendje módosítható úgy, hogy a szükséges szubrutin fejléc módosítót: fő. By the way, nem szükséges, hogy a nevét, a kiindulási szubrutin fő, a legfontosabb dolog - a módosítót.

Ahhoz, hogy javítják a teljesítményt és sebességet a Parrot-programok végezhet előtti összeállítása a bytecode (PBC formátum). A fájl neve, amely tárolja az eredménye az összeállítás van adva a parancssorban után -o zászló, és a fájl kiterjesztése legyen .pbc.

Például, ha úgy döntünk, hogy összeállítja a bájtkódot programunk faktoriális, akkor végre kell hajtania a következő parancsot:

Most már végre mind fctr_calc.pir fájlt, és fctr_calc.pbc fájlt. Előre lefordított fctr_calc.pbc fájl lesz gyorsabb, de nem valószínű, akkor képes lesz arra, hogy vizuálisan értékelni a különbség a sebességben, amikor futtatja ezeket a programokat a modern szupergyors számítógépek.

Ebben a cikkben megnézzük az általános jellemzői és működési elvek a virtuális gép Parrot, és tanulmányozta a forráskód példák. Ez az első lépés a funkcionalitás és a hatékonyság a Parrot. Az alábbi cikk leírja a mechanizmus összeállításánál és eszközök; Ezen kívül fogunk beszélni Parrot interakció különböző programozási nyelvek.

Alex Snastin - egy független szoftver fejlesztő, tanácsadó és fordító angol műszaki és oktatási irodalom IT. Részt vett a fejlesztés a hálózati irodai alkalmazások, kliens / szerver C-típusú linuxos környezetben.

Kapcsolódó cikkek