Izradite vlastiti programski jezik (I)

Evolucija programskih jezika

Nakon pisanja prvog članka o kako stvoriti vlastiti operativni sustavNetko mi je rekao bih li mogao napisati članak o kako stvoriti programski jezik. U početku nisam obraćao puno pažnje, ali sada sam i na druge načine naučio mnogo više o stvaranju programskih jezika. Pa učinimo osnovni programski jezik, lako ugradivi u druge programe i koji radi s virtualnim strojem koji ćemo također dizajnirati. Danas moramo napraviti najosnovniji virtualni stroj.

Vjerojatno se pitate: Virtualni stroj? Ali nije li to vrlo teško i usporava li programe? " Suprotno tome, jednostavan virtualni stroj vrlo je jednostavan i relativno brz. odabrao sam Hrđa kao jezik za virtualni stroj. Ali što je to Hrđa?

Hrđa To je programski jezik koji je usredotočen na sigurnost izvršenja, pa će pomoću njega praktički biti nemoguće da netko može zatvoriti virtualni stroj. To je kompilirani jezik u razvoju koji su stvorili Mozilla. Servo, zamjena za Tropski gušter, razvija se u njemu. Još uvijek možete promijeniti sintaksu, ali kôd koji ću koristiti ostat će do prvog stabilnog izdanja.

Hrđa instalira u Linux Na jednostavan način. Međutim, službene pakete nema. Korisnici Ubuntu možete dodati ovo dvoje PPA: ppa: hansjorg / hrđa  y ppa: cmrx64 / teret, korisnici Svod mogu koristiti AUR (teret-git je paket koji sve instalira). Ostali mogu koristiti:

curl -s https://static.rust-lang.org/rustup.sh | sudo sh

Kako funkcionira virtualni stroj?

Ako znate kako svijet asemblera funkcionira, potpuno je isto, sa hrpom ili hrpom. Ako ne, objasnit ću vam. Zamislimo sljedeći kod:

ispis 2 + 3

Računalo ne razumije što znači 2 + 3, niti zna kojim redoslijedom se treba pridržavati. Računala rade s baterijama ili hrpama u kojima se podaci akumuliraju i kontinuirano izvlače. Taj kôd u našem virtualnom stroju trebao bi izgledati otprilike ovako:

PUSH 2 PUSH 3 DODAJ TISAK

U osnovi bismo stavili 2 na hrpu, 3 također. ADD bi povukao (tj. Uklonio ga iz stoga i dobio njegovu vrijednost) posljednje 2 stavke na stogu i dodao rezultat na vrh stoga. PRINT bi uzeo posljednju stavku na hrpi i njome je prikazao nama. Ajmo sada to učiniti Hrđa.

Prvo moramo definirati jezik za bajt, mogli bismo upotrijebiti postojeću poput one u Java ili CLR .NET / Mono, ali stvorit ćemo jedan temeljniji.

https://gist.github.com/a01de8904fd39a442c20

Za svaku nastavu koristimo heksadecimalni zapis. Na vrh smo stavili # [izvodi (izPrimitivnog)], posebnost je Hrđa a kasnije će nam pomoći da izravno možemo usporediti nabrajanje s bajtovima.

Sada moramo napraviti funkciju koja izvršava svaku od tih uputa. Za to moramo pročitati bajt i usporediti ga s uputama koje imamo u nabrajanju. Ako nađete nešto što postoji, morate izvršiti svoju radnju.

https://gist.github.com/8950ce212a2de2f397f9

To činimo kako bismo pročitali svaki bajt pojedinačno i kako bismo ih izvršili:

https://gist.github.com/12e24a1f0dd65e4cd65d

Kao što vidite, razlikujemo se ako smo prije dobili naredbu PUSH (naša naredba INTEGER), sljedeći bajt bit će u potpunosti prebačen u stog. Tamo koristimo dvije funkcije koje vas nisam naučio, self.pop () y self.push (), koji su očito zaduženi za rukovanje hrpom.

https://gist.github.com/54147f853a8a2b8c01d9

Nisu vrlo složeni, ali pop funkcija ima mehanizme za otkrivanje pogrešaka. Zapravo, u Hrđa, ako uklonimo te mehanizme, to bi nam stvorilo pogrešku u kompilaciji. Sada jednostavno moramo pozvati program perin (naš virtualni stroj) i izvršite bytecode.

https://gist.github.com/99b1ab461318b3a644d0

Taj se bytecode može pročitati iz datoteke, ali ovdje sam ga radi jednostavnosti spremio u varijablu. Ako ga izvršimo, dat će nam očekivani rezultat:

Perin v0.1 Perin VM izvršava FlopFlip bytecode Pokretanje instance PerinVM PerinVM v0.1.0 Integer vrijednost 5

Sav kôd dostupan je na GitHub ispod Apache licenca 2.0: https://github.com/AdrianArroyoCalle/perin. Da bi ih sastavili moraju imati Naboj instaliran i stavljen:

izgraditi naboj && ./cilj/glavno

U sljedećem ćemo poglavlju vidjeti više o našem programskom jeziku.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   cestar dijo

    Zanimljiva znatiželja, iako nije previše korisna u stvarnosti, ne škodi znati.

    Sjajno je što oglašavate Rust, to je jezik koji puno obećava, ne samo što je sigurniji od c ++, već je (za sada) jasniji u svojoj sintaksi.

    Što se tiče fotografije, ne bih razmatrao Java Evolution XD.

    1.    cestar dijo

      A od fortrana ga nikad nisam koristio, ali nisam čuo puno dobrih stvari o njemu ...

      1.    Sablazan dijo

        Da, i to je posebno korisno u inženjerstvu iako Python dobiva na snazi.

      2.    Huan dijo

        Fortran je možda drugi sjajni jezik uz C. Još uvijek će danas u zaista kritičnim pitanjima biti jedno ili drugo.

        I bilo bi diskutabilno da je Fortran kao 'evolucija' C-a, kad bi možda trebalo biti obrnuto, jer je C noviji, moderniji i s više mogućnosti; iako se jedno ni najmanje ne odvaja od drugog.

        Iako su konačna stajališta s neke točke gledišta diskutabilna.

    2.    Francisco dijo

      +1 za Javu

  2.   nosač dijo

    Pogledajmo sviđa li mi se ovo, dajem nešto programiranju, ali osnovno da vidim razumijem li više.

  3.   usergnulinux dijo

    Koja je stvarna svrha stvaranja novog programskog jezika? Osobno mi se čini da je trik sakriti izvorni kod.

  4.   Yeilly dijo

    Prijatelju, što se dogodilo s nastavkom "vlastitog operativnog sustava"? Ne ostavljajte ga tamo, molim vas, nastavite.

    Zapravo ste majstor i upravo su mi ove dvije pjesme potpuno privukle pažnju, ali ne bih želio da ostanu na pola puta.

    Znam da mnogi od nas misle isto i čekamo nastavke i zaključke ovih vrlo zanimljivih tema.

  5.   Cristian David dijo

    Vrlo zanimljivo, puno vam hvala. 🙂

  6.   Franco dijo

    Javu ne smatram programskim jezikom, već interpretatorom naredbi, jer se ne može kompilirati

    1.    Mario dijo

      [Programski jezik je formalni jezik dizajniran da izrazi procese koje mogu provoditi strojevi poput računala.]

      Iz tog je razloga Java programski jezik. Čak je i Bash jezik (linux shell jezik) sam po sebi programski jezik.

      Postoje dvije vrste jezika:
      - Sastavljeno
      - Protumačeno
      - Mješovito (virtualni strojevi, izvorne se knjižnice sastavljaju i interpretira funkcionalni kod)

      Tumači su vrlo korisni kada je u pitanju multiplatform i za to nemaju katastrofalne performanse. Java, VB.NET, C ++ .NET, F #, C # su svi mješoviti jezici. Bash jezik, bat, PHP, Javascript i mnogi drugi su interpretirani jezici.

      Ako Javu ne smatrate jezikom jer se tumači (što nije), ne biste trebali uzeti u obzir mnoge druge jezike koji se koriste za izradu programa. Štoviše, prema tom pravilu od tri ne biste trebali uzeti u obzir da postoji bilo koji programski jezik, osim samog strojnog jezika.

      A zašto ne? Čak se ni strojni jezik ne može smatrati jezikom jer je to zapravo samo skup naredbi koje "interpretira" procesor.

      Jer u stvari, SVI jezici nisu ništa drugo do skup naredbi koje interpretira procesor.

      Možda vam se jezik sviđa više ili manje (Java, u ovom slučaju), čini se više-manje korisnim i moćnim, ali ako kažem da nije programski jezik jer nije kompiliran ... to se protivi svim definicijama programskog jezika.

    2.    Mario dijo

      😐 Nadam se da se nisam činio previše bezobraznim

      1.    Marije Antoanete od Manuele Cardenas dijo

        bez tišine samo si nam uništio život

      2.    Mario dijo

        hahahahaha, perdoooon. nije mi bila namjera xD

    3.    Carlos dijo

      java je programski jezik. jer možete razviti aplikaciju i kad kompajlirate napravite .jar koji interpretira JVM. Tada se prema vašoj python logici ne tumači, već se kompajlira u različite izvršne datoteke ...

  7.   Elijah Mongelos dijo

    Vrlo dobre informacije

  8.   Carlos Arturo dijo

    dobre informacije, ali sumnjam, moći će se stvoriti novi programski jezik ispočetka, bez potrebe za oslanjanjem na druge analogije ili softver. Govorim na isti način kao i drugi jezici poput jave ili HTML-a.
    Izuzetno bih vam zahvalio na ovom pitanju.