Po pisanju prvega članka o kako ustvariti svoj operacijski sistem, mi je nekdo rekel, da če bi lahko napisal članek o kako ustvariti programski jezik. Sprva nisem posvečal veliko pozornosti, zdaj pa sem na druge načine izvedel veliko več o ustvarjanju programskih jezikov. Torej, narediva osnovni programski jezik, ki ga je mogoče enostavno vgraditi v druge programe in deluje z navideznim računalnikom, ki ga bomo tudi oblikovali. Danes moramo narediti najosnovnejši virtualni stroj.
Verjetno se sprašujete: Navidezni stroj? A ni to zelo težko in ali to upočasni programe? " Nasprotno pa je preprost navidezni stroj zelo preprost in razmeroma hiter. izbral sem Rust kot jezik za navidezni stroj. Toda kaj je to Rust?
Rust namesti v Linux Na preprost način. Vendar pa ni uradne pakete. Uporabniki Ubuntu lahko dodate ta dva PPA: ppa: hansjorg / rja y ppa: cmrx64 / tovor, uporabniki Arch lahko uporabi AUR (cargo-git je paket, ki namesti vse). Ostali lahko uporabljajo:
curl -s https://static.rust-lang.org/rustup.sh | sudo sh
Kako deluje navidezni stroj?
Če veste, kako deluje svet zbiralcev, je popolnoma enako, tako glede sklada ali sklada. Če ne, vam bom razložil. Predstavljajmo si naslednjo kodo:
natisni 2 + 3
Računalnik ne razume, kaj pomeni 2 + 3, niti ne ve, kateremu vrstnemu redu mora slediti. Računalniki delujejo z baterijami ali skladi, v katerih se podatki zbirajo in neprestano pridobivajo. Ta koda v našem virtualnem računalniku bi morala izgledati nekako takole:
PUSH 2 PUSH 3 ADD PRINT
V bistvu bi na vrh postavili 2, 3 pa tudi. ADD bi potegnil (tj. Odstranil ga iz sklada in dobil njegovo vrednost) zadnja 2 elementa v kupu in rezultat dodal na vrh sklada. PRINT bi vzel zadnji element na kupu in ga uporabil za prikaz. Zdaj pa narediva to v Rust.
Najprej moramo določiti jezik za bajtno kodo, lahko uporabimo obstoječo, kot je tista v Java o el CLR .NET / Mono, vendar bomo ustvarili bolj osnovnega.
https://gist.github.com/a01de8904fd39a442c20
Za vsako navodilo uporabljamo šestnajstiški zapis. Na visoko smo postavili # [izhaja (izPrimitive)], je posebnost Rust in nam bo kasneje pomagalo, da bomo lahko neposredno primerjali naštevanje z bajti.
Zdaj moramo narediti funkcijo, ki izvrši vsako od teh navodil. Za to moramo prebrati bajt in ga primerjati z navodili, ki jih imamo v naštevanju. Če najdete kakršno koli, ki obstaja, morate izvesti svoje dejanje.
https://gist.github.com/8950ce212a2de2f397f9
To naredimo, da preberemo vsak bajt posebej in jih izvedemo:
https://gist.github.com/12e24a1f0dd65e4cd65d
Kot lahko vidite, razlikujemo, če smo prej dobili ukaz PUSH (naš ukaz INTEGER), naslednji bajt bo v celoti prenesen v sklad. Tam uporabljamo dve funkciji, ki vas ju nisem naučil, self.pop () y self.push (), ki so očitno zadolženi za ravnanje s skladom.
https://gist.github.com/54147f853a8a2b8c01d9
Niso zelo zapleteni, ima pa pop funkcija mehanizme za odkrivanje napak. Pravzaprav v Rust, če odstranimo te mehanizme, bi to povzročilo napako pri sestavljanju. Zdaj moramo preprosto poklicati program Perin (naš virtualni stroj) in izvedite bajtno kodo.
https://gist.github.com/99b1ab461318b3a644d0
To bajtno kodo je mogoče prebrati iz datoteke, vendar sem jo zaradi enostavnosti shranil v spremenljivko. Če jo izvedemo, nam bo dal pričakovani rezultat:
Perin v0.1 Perin VM izvede bajtno kodo FlopFlip Zagon primerka PerinVM PerinVM v0.1.0 Celotna vrednost 5
Vsa koda je na voljo na GitHub pod Licenca Apache 2.0: https://github.com/AdrianArroyoCalle/perin. Za sestavljanje jih morajo imeti Cargo nameščen in postavljen:
polnjenje gradi && ./cilj/glavno
V naslednjem poglavju bomo videli več o našem programskem jeziku.
Zanimiva radovednost, čeprav v resnici ni zelo koristna, vendar ne škodi vedeti.
Super je, da oglašujete Rust, je jezik, ki obljublja veliko, ne samo, da je bolj varen kot c ++, ampak je (za zdaj) bolj jasen v svoji sintaksi.
Kar zadeva fotografijo, ne bi upošteval Java evolution XD.
In od fortrana ga nisem nikoli uporabljal, vendar o njem nisem slišal veliko dobrega ...
Jaz sem in je še posebej koristen v inženirstvu, čeprav se Python vse bolj uveljavlja.
Fortran je morda drugi odlični jezik skupaj s C. Tudi danes bo v resnično kritičnih vprašanjih eno ali drugo.
In sporno bi bilo, da je Fortran kot "evolucija" C-ja, čeprav bi bilo morda obratno, saj je C novejši, modernejši in z več možnostmi; čeprav se eno niti najmanj ne loči od drugega.
Čeprav so o končnih stališčih z nekega vidika sporna.
+1 za Javo
Poglejmo, ali mi je to všeč, nekaj dam programiranju, ampak osnovno, da vidim, če razumem več.
Kaj je resnični namen ustvarjanja novega programskega jezika? Osebno se mi zdi, da je potegavščina skriti izvorno kodo.
Prijatelj, kaj se je zgodilo z nadaljevanjem "lastnega operacijskega sistema"? Ne puščajte ga tam, prosim, nadaljujte.
Pravzaprav ste mojster in ravno ti dve pesmi sta popolnoma pritegnili mojo pozornost, vendar ne bi rad, da ostaneta na pol poti.
Vem, da mnogi med nami razmišljamo enako in čakamo na nadaljevanje in zaključke teh zelo zanimivih tem.
Zelo zanimivo, najlepša hvala. 🙂
Jave ne štejem za programski jezik, temveč za tolmač ukazov, saj ni kompatibilen
[Programski jezik je formalni jezik, namenjen izražanju procesov, ki jih lahko izvajajo stroji, kot so računalniki.]
Iz tega razloga je Java programski jezik. Tudi jezik Bash (jezik lupine linux) je sam po sebi programski jezik.
Obstajata dve vrsti jezikov:
- Sestavljeno
- Tolmačeno
- mešano (navidezni stroji, izvorne knjižnice so sestavljene in interpretirana funkcionalna koda)
Tolmači so zelo koristni pri multiplatformih in za to nimajo katastrofalne zmogljivosti. Java, VB.NET, C ++ .NET, F #, C # so vsi mešani jeziki. Bash jezik, bat, PHP, Javascript in mnogi drugi so tolmačeni jeziki.
Če Java ne štejete za jezik, ker se razlaga (kar pa ne), ne bi smeli upoštevati številnih drugih jezikov, ki se uporabljajo za izdelavo programov. Poleg tega po tem pravilu treh ne bi smeli upoštevati, da obstaja kateri koli programski jezik, razen samega strojnega jezika.
In zakaj ne? Niti strojnega jezika ne bi mogli šteti za jezik, saj gre v resnici le za ukaz, ki ga »razlaga« procesor.
Ker dejansko VSE jeziki niso nič drugega kot nabor ukazov, ki jih interpretira procesor.
Morda vam je jezik bolj ali manj všeč (v tem primeru Java), zdi se bolj ali manj uporaben in zmogljiv, vendar če rečemo, da ni programski jezik, ker ni preveden ..., je v nasprotju z vsemi definicijami programskega jezika.
😐 Upam, da se mi ni zdel preveč nesramen
brez tišine si nam uničil samo življenje
hahahahaha, perdoooon. to ni bil moj namen xD
java je programski jezik. Ker lahko razvijete aplikacijo in pri prevajanju naredite .jar, ki ga razlaga JVM. Nato se po vaši python logiki tudi ne razlaga, ampak se prevede v različne izvedljive datoteke ...
Zelo dobre informacije
dobre informacije, dvomim pa, da bo mogoče nov programski jezik ustvariti iz nič, ne da bi se bilo treba zanašati na druge analogije ali programsko opremo. Govorim na enak način kot drugi jeziki, kot sta Java ali HTML.
Hvaležen bi bil za vašo pomoč pri tem vprašanju.