Luo oma ohjelmointikieli (I)

Ohjelmointikielien kehitys

Kun olet kirjoittanut ensimmäisen artikkelin kuinka luoda oma käyttöjärjestelmäJoku kertoi minulle, voisinko tehdä artikkelin aiheesta kuinka luoda ohjelmointikieli. Aluksi en kiinnittänyt paljon huomiota, mutta nyt ja muilla tavoin olen oppinut paljon enemmän ohjelmointikielien luomisesta. Joten tehdään ohjelmointikieli, helppo upottaa muihin ohjelmiin ja joka toimii myös suunniteltavan virtuaalikoneen kanssa. Tänään meidän on tehtävä kaikkein yksinkertaisin virtuaalikone.

Mietit todennäköisesti: Virtuaalikone? Mutta eikö se ole kovin vaikeaa ja hidastaa se myös ohjelmia? " Sen sijaan yksinkertainen virtuaalikone on hyvin yksinkertainen ja suhteellisen nopea. olen valinnut Ruoste virtuaalikoneen kielenä. Mutta mikä se on Ruoste?

Ruoste Se on ohjelmointikieli, joka on keskittynyt suoritusturvallisuuteen, joten sen käyttämisen on käytännössä mahdotonta sulkea virtuaalikone. Se on käännetty kehitettävä kieli, jonka on luonut mozilla. Servo, korvaa Gecko, kehittyy hänessä. Voit silti muuttaa syntaksiasi, mutta käyttämääni koodia säilytetään ensimmäiseen vakaan julkaisuun saakka.

Ruoste asennetaan sisään Linux Yksinkertaisella tavalla. Virallista pakettia ei kuitenkaan ole. Verkkotunnuksen käyttäjät Ubuntu voit lisätä nämä kaksi PPA: ppa: hansjorg / ruoste  y ppa: cmrx64 / lasti, käyttäjän Kaari voi käyttää AUR (rahti-git on paketti, joka asentaa kaiken). Loput voivat käyttää:

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

Kuinka virtuaalikone toimii?

Jos tiedät kuinka kokoonpanijamaailma toimii, se on täsmälleen sama pinon tai pinon kanssa. Jos ei, selitän sen sinulle. Kuvitellaan seuraava koodi:

tulosta 2 + 3

Tietokone ei ymmärrä mitä 2 + 3 tarkoittaa, eikä tiedä mitä järjestystä noudatetaan. Tietokoneet toimivat paristoilla tai pinoilla, joihin tietoja kerätään ja kerätään jatkuvasti. Tämän virtuaalikoneemme koodin pitäisi näyttää tältä:

PUSH 2 PUSH 3 LISÄÄ TULOSTA

Pohjimmiltaan laittaisimme 2 pinon päälle, myös 3. ADD vetää (eli poistaa sen pinosta ja saa sen arvon) pinon 2 viimeistä kohdetta ja lisää tulos pinon yläosaan. PRINT ottaisi pinon viimeisen kohteen ja näyttäisi sen meille. Tehdään nyt se sisään Ruoste.

Meidän on ensin määriteltävä kieli bytecode, voimme käyttää olemassa olevaa kaltaista Jaava tai CLR .NET / Mono, mutta aiomme luoda perustavanlaatuisemman.

https://gist.github.com/a01de8904fd39a442c20

Käytämme heksadesimaalimerkintöjä jokaiselle käskylle. Olemme asettaneet korkealle # [johdetaan (FromPrimitive)], on Ruoste ja se auttaa meitä myöhemmin pystymään vertaamaan luetteloa suoraan tavuihin.

Nyt meidän on tehtävä toiminto, joka suorittaa kaikki nuo ohjeet. Tätä varten meidän täytyy lukea tavu ja verrata sitä ohjeisiin, jotka meillä on luettelossa. Jos löydät sellaisia, jotka ovat olemassa, sinun on suoritettava toimintasi.

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

Teemme sen lukemaan jokaisen tavun erikseen ja suorittamaan ne:

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

Kuten näette, erotellaan, saiko meille PUSH-komento (INTEGER-komento) aiemmin, seuraava tavu viedään kokonaan pinoon. Käytämme siellä kahta toimintoa, joita en ole opettanut sinulle, self.pop () y self.push (), jotka tietysti vastaavat pinon käsittelystä.

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

Ne eivät ole kovin monimutkaisia, mutta pop-toiminnossa on virheiden havaitsemismekanismeja. Itse asiassa Ruoste, jos poistamme nuo mekanismit, se antaisi meille käännösvirheen. Nyt meidän on vain kutsuttava ohjelma Perin (virtuaalikoneemme) ja suorita tavukoodi.

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

Tämä tavukoodi voidaan lukea tiedostosta, mutta tässä yksinkertaisuuden vuoksi olen tallentanut sen muuttujaan. Jos suoritamme sen, se antaa meille odotetun tuloksen:

Perin v0.1 Perin VM suorittaa FlopFlip-tavukoodin PerinVM-ilmentymän käynnistäminen PerinVM v0.1.0 kokonaisluku 5

Kaikki koodit ovat saatavilla osoitteessa GitHub alla Apache-lisenssi 2.0: https://github.com/AdrianArroyoCalle/perin. Koottamiseksi heillä on oltava lasti asennettu ja laitettu:

latausrakenne && ./target/main

Seuraavassa luvussa on lisätietoja ohjelmointikielestämme.


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   tienkuljettaja dijo

    Mielenkiintoinen uteliaisuus, vaikka se ei olekaan kovin hyödyllinen todellisuudessa, ei haittaa tietää.

    On hienoa, että mainostat Rustia, se on kieli, joka lupaa paljon, paitsi että se on turvallisempi kuin c ++, mutta (toistaiseksi) selkeämpi sen syntaksissa.

    Mitä tulee valokuvaan, en pidä Java Java XD: tä.

    1.    tienkuljettaja dijo

      Fortranista en ole koskaan käyttänyt sitä, mutta en ole kuullut siitä paljon hyvää ...

      1.    Huono dijo

        Minä teen, ja se on erityisen hyödyllinen suunnittelussa, vaikka Python on saamassa jalansijaa.

      2.    Johannes dijo

        Fortran on ehkä toinen suuri kieli C.: n kanssa. Vielä nykyäänkin todella kriittisissä kysymyksissä tulee olemaan yksi tai toinen.

        Ja olisi kiistanalaista, että Fortran on C: n "evoluutiona", kun ehkä sen pitäisi olla päinvastoin, koska C on uudempi, nykyaikaisempi ja enemmän mahdollisuuksia; vaikka yksi ei ole irti toisistaan ​​vähemmäkään.

        Vaikka kaikki lopulliset kannat ovat kyseenalaisia ​​jostakin näkökulmasta.

    2.    Francisco dijo

      +1 Java: lle

  2.   Portaro dijo

    Katsotaanpa, pidänkö tästä, annan jotain ohjelmoinnille, mutta perustiedot nähdäksesi ymmärränkö enemmän.

  3.   usergnulinux dijo

    Mikä on uuden ohjelmointikielen luomisen todellinen tarkoitus? Minulle henkilökohtaisesti tuntuu, että lähdekoodin piilottaminen on temppu.

  4.   Yeilly dijo

    Ystävä, mitä tapahtui "oman käyttöjärjestelmän" jatkamiselle? Älä jätä sitä sinne, jatka sitä.

    Itse asiassa olet mestari ja juuri nämä kaksi kappaletta ovat täysin kiehtoneet huomioni, mutta en halua heidän pysyvän puolivälissä.

    Tiedän, että monet meistä ajattelevat samaa ja odotamme näiden erittäin mielenkiintoisten aiheiden jatkoa ja johtopäätöksiä.

  5.   Cristian David dijo

    Erittäin mielenkiintoinen, kiitos paljon. 🙂

  6.   Franco dijo

    En pidä jaavaa ohjelmointikielenä, pikemminkin komentotulkkina, koska se ei ole käännettävissä

    1.    Mario dijo

      [Ohjelmointikieli on virallinen kieli, joka on tarkoitettu ilmaisemaan prosessit, jotka koneet, kuten tietokoneet, voivat suorittaa.]

      Tästä syystä Java on ohjelmointikieli. Jopa bash-kieli (Linux-shell-kieli) on sinänsä ohjelmointikieli.

      Kieliä on kahta tyyppiä:
      - Koottu
      - Tulkittu
      - Mixed (virtuaalikoneet, alkuperäiset kirjastot kootaan ja toiminnallinen koodi tulkitaan)

      Tulkit ovat erittäin hyödyllisiä multiplatformin suhteen, eivätkä heillä ole tuhoisaa esitystä sitä varten. Java, VB.NET, C ++ .NET, F #, C # ovat kaikki sekakieliä. Baskin kieli, lepakko, PHP, Javascript ja monet muut ovat tulkittuja kieliä.

      Jos Java ei ole mielestäsi kieli, koska sitä tulkitaan (mikä se ei ole), sinun ei pitäisi ottaa huomioon monia muita kieliä, joita käytetään ohjelmien tekemiseen. Tämän kolmen säännön mukaan sinun ei pitäisi ajatella, että ohjelmointikieliä olisi, paitsi itse konekieli.

      Ja miksi ei? Edes konekieliä ei voida pitää kielenä, koska se on oikeastaan ​​vain joukko komentoja, jotka prosessori "tulkitsee".

      Koska kaikki kielet ovat käytännössä vain joukko komentoja, jotka prosessori tulkitsee.

      Saatat pitää enemmän tai vähemmän kielestä (tässä tapauksessa Java), vaikuttaa enemmän tai vähemmän hyödylliseltä ja tehokkaalta, mutta sanoa, että se ei ole ohjelmointikieli, koska sitä ei ole käännetty ... se on vastoin kaikkia ohjelmointikielen määritelmiä.

    2.    Mario dijo

      😐 Toivon, että en vaikuttanut liian töykeältä

      1.    Maria Antoinette Manuela Cardenasista dijo

        ei hiljaa, vain tuhosit elämämme

      2.    Mario dijo

        hahahahaha, perdoooon. se ei ollut aikomukseni xD

    3.    carlos dijo

      java on ohjelmointikieli. Koska voit kehittää sovelluksen ja kääntäessäsi luoda .jar, jonka JVM tulkitsee. Python-logiikkasi mukaan sitä ei myöskään tulkita, mutta se kääntyy erilaisiin suoritettaviin tiedostoihin ...

  7.   Elijah Mongelos dijo

    Erittäin hyvä tieto

  8.   Carlos Arturo dijo

    hyvää tietoa, mutta epäilen, on mahdollista luoda uusi ohjelmointikieli tyhjästä tarvitsematta luottaa muihin analogioihin tai ohjelmistoihin. Puhun samalla tavalla kuin muutkin kielet, kuten Java ja HTML.
    Arvostan suuresti apuasi tässä kysymyksessä.