Hvordan Actionscript Virtual Machine Works

How Actionscript Virtual Machine Works
Del
Del
Del
Del

Dette Cyber ​​mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av.

Hvis du er involvert med AS3 utvikling du kanskje har hørt om en virtuell maskin som lever inne i Flash Player eller den såkalte Bytecode at koden blir forvandlet til. Men hva er de egentlig


En betydelig del av Flash Player er AVM Anmeldelser - Actionscript Virtual Machine. Når du kompilere AS3 koden den blir forvandlet til et binært instruksjonssett, kalt bytecode, som er innebygd i den produserte SWF. Som en bruker laster SWF inn i Flash Player, analyserer AVM Bytecode og utfører det steg for steg

La oss undersøke prosessen i litt mer detalj. Ta en titt på følgende uttalelse og forestille vi ønsker å kjøre den (beregne resultatet og tilordne den til "foo"):
foo = 2 + 3 * 4;

Fra et menneskelig synspunkt denne linjen betyr "Multipliser 3 av 4, tilsett 2 til resultat og tilordne til en variabel kalt foo ".

På den annen side hvis en datamaskin leser denne linjen det ville lagre det som" tegnet f, etterfulgt av karakter o, etterfulgt av karakter o, etterfulgt av karakter plass , etterfulgt av tegnet er lik, etterfulgt av ... ". Og så videre. Ved denne tilstanden denne informasjonen er ganske ubrukelig og ytterligere skritt må tas for å snu utsagnet til noe som en maskin kan utføre. I utgangspunktet hva vi trenger å gjøre er å kompilere kildekoden.



The Compiler

Som jeg nevnt før, ovenfor er uttalelsen rå kildekode, en samling av tegn som betyr ingenting til en datamaskin. For å oppnå nyttig informasjon har vi å kjøre koden gjennom noen prosedyrer. Først bør vi snu strømmen av tegn i ord og andre, slå ordene i setninger.

Det første skrittet for å snu tegnene i ord er gjort av en tokenizer som i utgangspunktet utfører leksikalsk analyse av kildekoden. Det går over karakterene og grupper dem inn i rekke "tokens" (og det avgjør også sin type - identifikatorer, operatører, konstanter ...). Etter tokenizer (det er også kalt en lexer BTW) ferdig jobben sin, får vi en matrise som kan illustreres slik: product: [Identifier foo] [Operator tilsvarer] [Integer 2] [Operator plus] [Integer 3] [ ,,,0],Operatør formere] [Integer 4]

Dette er et høyere nivå struktur som inneholder "ord" i stedet for de rå tegn.

De resulterende tokens blir matet inn i en parser. Den utfører semantisk analyse av symboler og monterer dem i maskininstruksjoner. I enklere ord, konstruerer det setninger ut av ordene (tokens) og fornuftig ut av dem (dvs. kompilerer instruksjoner ut av dem). For eksempel hvis parseren er gitt en uttalelse 2 + 3; i ++; som symboler parseren må først skille tokens inn "setninger" (2 + 3 og jeg ++) og deretter faktisk forstå dem (den første er å legge drift og andre er en økning). Etter vi forstår instruksjonen kan vi faktisk kompilere instruksjoner til maskinen ut av inngangs

Etter analyse av beviser på vår strengen får vi følgende instruksjoner.
Presse to push-tre trykk 4 formere legge assign "foo"

Dette er instruksjoner som en datamaskin kan utføre. Komprimere den til en binær format og du har bytecode. Bytecode er en liste med instruksjoner som en maskin er veldig flinke til behandling og da behandles for gi de ønskede resultater.



The Interpreter

Etter at vi kompilert kildekoden til bytecode vi kan kjøre den med en virtuell maskin. VM er programvare som utfører Bytecode en instruksjon om gangen, så la oss bare gå gjennom tolkningen av vår uttalelse:


    Push to - Kommandoen er å presse nummer 2 i bunken. VM opprettholder en stabel under kjøring som kommandoene kan operere på, er at for å presse inn og pop av verdier (http://en.wikipedia.org/wiki/Stack_(data_structure)). Foreløpig stabelen ser slik ut: [2]

    Trykk 3 - presse et annet heltall i bunken. Nå ser det ut [2, 3];

    trykk 4 - presse enda et heltall i bunken. Nå ser det ut [2, 3, 4];

    formere - denne kommandoen pops 2 verdiene Av stabelen, multipliserer dem og skyver resultatet tilbake til bunken. Det dukker verdiene 3 og 4 (som for øyeblikket er på toppen av stabelen), multipliserer dem og skyver den resulterende 12 til stabelen. Det påvirker stabelen å ligne [2, 12];

    legge til - du har sikkert gjettet det: Kommandoen pop 12 og to av stabelen, legger dem og skyver den resulterende 14 i bunken. Nå bare 14 forblir inne stabelen

    tildele "foo." - Denne kommandoen spretter en verdi av stabelen og tilordne den til en variabel kalt foo. Så nå variabelen foo inneholder verdi av 14 og stakken er tom.

    Det er det! Dette er et eksempel på en ekstremt enkel setning utføres med en svært enkel virtuell maskin. La oss undersøke en litt mer komplisert eksempel:
    bar = 12 /(4 + 2) - (6 - 9) * 3

    Dette kan kompilere til (jeg sier "kan" fordi det er forskjellige måter å kompilere setningen ):
    presse 12 push-fire trykk to add skillet trykk 6 Push 9 trekke fra push-3 formere trekke tildele "bar"

    Dette vil bli tolket som:


      De første 3 skyver vil være lagt til bunken: [12, 4, 2]

      legge til - vil oppsummere de 2 verdier på toppen av bunken: [12, 6]

      skillet - vil komme 6 , deretter pop 12, dele 12 med 6 og skyv resultatet til bunken: [2]

      De neste 2 kommandoer vil presse heltall i bunken: [2, 6, 9]

      subtrahere - vil trekke de 2 tallene på toppen av bunken. Vil dukke 9, deretter 6, deretter trekke 6 fra 9 og presse resultatet til bunken: [2, -3]

      En annen heltall vil bli presset til å stabelen: [2, -3, 3]

      formere - vil komme og multiplisere 2 tall på toppen av bunken. -9, Som er 3 ganger -3, vil bli skjøvet tilbake til bunken: [2, -9]

      subtrahere - vil trekke -9 fra to og skyv resultatet til bunken: [11]

      assign - vil komme 11 og tilordne den til en variabel som heter "bar". Stack er nå tom.

      Resultatet er nå lagret i en variabel kalt "bar", og det er 11. Yay!



      Konklusjon

      Det er den mest grunnleggende informasjon om en VM, kan det komme godt med når du begynner å lære noen lavnivå Flash Player ting. VM inne i Flash Player er selvfølgelig mye mer kompleks, men basen er den samme som i eksempelet er presentert ovenfor.

      Hvis du ønsker å lære mer om Actionscript Virtual Machine kan du ta en titt på denne PDF dokumentet av Adobe. Takk for lesing!