Krijoni gjuhën tuaj të programimit (I)

Evolucioni i gjuhëve të programimit

Pas shkrimit të artikullit të parë në si të krijoni sistemin tuaj operativDikush më tha nëse mund të bëja një artikull si të krijoni një gjuhë programimi. Në fillim nuk i kushtova shumë vëmendje, por tani dhe në mënyra të tjera kam mësuar shumë më tepër për krijimin e gjuhëve të programimit. Pra, le të bëjmë një gjuhë themelore programimi, lehtësisht i ngulitur në programe të tjera dhe që funksionon me një makinë virtuale të cilën gjithashtu do ta projektojmë. Sot duhet të bëjmë makinerinë më themelore virtuale.

Me siguri po pyesni: Një makinë virtuale? Por a nuk është kjo shumë e vështirë dhe a ngadalëson edhe programet? " Në të kundërt, një makinë e thjeshtë virtuale është shumë e thjeshtë dhe relativisht e shpejtë. Unë kam zgjedhur Ndryshk si gjuhë për makinën virtuale. Por çfarë është Ndryshk?

Ndryshk Shtë një gjuhë programimi që është e përqendruar në sigurinë e ekzekutimit, kështu që përdorimi i saj do të jetë praktikisht e pamundur që dikush të mbyllë makinerinë virtuale. Shtë një gjuhë e përpiluar në zhvillim e krijuar nga Mozilla. Ndihmës, zëvendësimi për gekon, po zhvillohet tek ai. Ju përsëri mund ta ndryshoni sintaksën tuaj, por kodi që unë do të përdor do të mbahet deri në lëshimin e parë të qëndrueshëm.

Ndryshk instalon në Linux Në një mënyrë të thjeshtë. Sidoqoftë, nuk ka asnjë parcelë zyrtare. Përdoruesit e Ubuntu mund t’i shtoni këto dy APP-ja: ppa: hansjorg / ndryshk  y ppa: cmrx64 / ngarkesë, përdoruesit e Hark mund të përdorë AUR (ngarkesë-git është paketa që instalon gjithçka). Pjesa tjetër mund të përdorë:

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

Si funksionon një makinë virtuale?

Nëse e dini se si funksionon bota e montuesve, është saktësisht e njëjta gjë, me pirgun ose pirgun. Nëse jo, do ta shpjegoj për ju. Le të imagjinojmë kodin e mëposhtëm:

shtyp 2 + 3

Kompjuteri nuk kupton se çfarë do të thotë 2 + 3, dhe as nuk di se çfarë urdhri duhet të ndjekë. Kompjuterët punojnë me bateri ose pirgje në të cilat grumbullohen të dhëna dhe nxirren vazhdimisht. Ky kod në makinerinë tonë virtuale duhet të duket diçka e tillë:

SHTYPJE 2 SHTYPJE 3 SHTYP SHTYPI

Në thelb ne do të vendosim 2 në pirg në krye, 3 gjithashtu. ADD do të tërhiqte (d.m.th. do ta hiqte nga pirgu dhe do të merrte vlerën e tij) 2 artikujt e fundit në pirg dhe do të shtonte rezultatin në majë të pirgut. PRINT do të merrte artikullin e fundit në pirg dhe do ta përdorte për ta shfaqur për ne. Tani le ta bëjmë këtë Ndryshk.

Së pari duhet të përcaktojmë një gjuhë për Bajtkodi, ne mund të përdorim një ekzistues si ai në Java ose CLR të .NET / Mono, por ne do të krijojmë një më themelore.

https://gist.github.com/a01de8904fd39a442c20

Ne përdorim shënimin heksadecimal për secilin udhëzim. Në lart kemi vendosur # [rrjedhin (FromPrimitive)], është një veçanti e Ndryshk dhe kjo do të na ndihmojë më vonë që të jemi në gjendje të krahasojmë numërimin me bajte direkt.

Tani ne duhet të bëjmë një funksion që ekzekuton secilën prej atyre udhëzimeve. Për këtë duhet të lexojmë një bajt dhe ta krahasojmë me udhëzimet që kemi në numërim. Nëse gjeni ndonjë që ekziston, duhet të ekzekutoni veprimin tuaj.

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

Ne e bëjmë këtë për të lexuar secilin bajt individualisht dhe për t'i ekzekutuar ato:

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

Siç mund ta shihni, ne dallojmë nëse më parë na është dhënë komanda PUSH (komanda jonë INTEGER), bajti tjetër do të merret plotësisht në pirg. Aty po përdorim dy funksione që nuk ju kam mësuar, self.pop () y vetvetja. shtyj (), të cilat padyshim janë të ngarkuara me trajtimin e pirgut.

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

Ato nuk janë shumë komplekse, por funksioni pop ka mekanizma të zbulimit të gabimeve. Në fakt, në Ndryshk, nëse i heqim ato mekanizma do të na jepte një gabim përpilimi. Tani thjesht duhet të telefonojmë në një program Shumë (makina jonë virtuale) dhe ekzekutoni një bytecode.

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

Ky bytecode mund të lexohet nga një skedar, por këtu për thjeshtësi e kam ruajtur atë në një ndryshore. Nëse e ekzekutojmë, do të na japë rezultatin e pritur:

Perin v0.1 Perin VM ekzekuton bajtekodin FlopFlip Fillimi i shembullit PerinVM PerinVM v0.1.0 Vlera e plotë 5

I gjithë kodi është në dispozicion në GitHub nën Licenca Apache 2.0: https://github.com/AdrianArroyoCalle/perin. Për të përpiluar ato duhet të kenë ngarkesë instaluar dhe vendosur:

ndërtimi i tarifave &&. / target / kryesor

Në kapitullin tjetër do të shohim më shumë rreth gjuhës sonë të programimit.


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   udhëtar dijo

    Kuriozitet interesant, megjithëse nuk është shumë i dobishëm në realitet, nuk dëmton ta dish.

    Greatshtë mirë që reklamoni Rust, është një gjuhë që premton shumë, jo vetëm që është më e sigurt se c ++, por (tani për tani) më e qartë në sintaksën e saj.

    Sa për foton, unë nuk do ta konsideroja evolucionin java XD.

    1.    udhëtar dijo

      Dhe nga fortran, nuk e kam përdorur kurrë, por nuk kam dëgjuar shumë gjëra të mira për të ...

      1.    I lavdishëm dijo

        Po, dhe është veçanërisht e dobishme në inxhinieri edhe pse Python po fiton terren.

      2.    John dijo

        Fortran është ndoshta gjuha tjetër e shkëlqyeshme së bashku me C. Ende sot në pyetjet me të vërtetë kritike do të jetë njëra ose tjetra.

        Dhe do të ishte e diskutueshme që Fortran është si një 'evolucion' i C, kur ndoshta duhet të jetë e kundërta, pasi C është më e re, më moderne dhe me më shumë mundësi; megjithëse njëra nuk është shkëputur nga tjetra në të paktën.

        Edhe pse pozicionet përfundimtare janë të gjitha të diskutueshme nga një këndvështrim.

    2.    Francisco dijo

      +1 në Java

  2.   portier dijo

    Le të shohim nëse më pëlqen kjo, unë i jap diçka programimit, por thelbësore për të parë nëse kuptoj më shumë.

  3.   usergnulinux dijo

    Cili është qëllimi i vërtetë i krijimit të një gjuhe të re programimi? Më duket personalisht se është një dredhi për të fshehur kodin burimor.

  4.   Yeilly dijo

    Mik, çfarë ndodhi me vazhdimin e "sistemit tënd operativ"? Mos e lini atje ju lutem vazhdoni.

    Në të vërtetë, ju jeni një mjeshtër dhe vetëm këto dy këngë më kanë rrëmbyer plotësisht vëmendjen, por nuk do të doja që ato të qëndronin përgjysmë.

    E di që shumë prej nesh mendojnë të njëjtën gjë dhe po presim vazhdimet dhe përfundimet e këtyre temave shumë interesante.

  5.   Kristian David dijo

    Shumë interesante, faleminderit shumë. 🙂

  6.   Franco dijo

    Unë nuk e konsideroj java një gjuhë programimi, përkundrazi një interpretuese të komandave, pasi nuk është e kompilueshme

    1.    Mario dijo

      [Një gjuhë programimi është një gjuhë zyrtare e krijuar për të shprehur procese që mund të kryhen nga makina të tilla si kompjuterët.]

      Për këtë arsye, Java është një gjuhë programimi. Edhe gjuha Bash (gjuhë linux shell) është një gjuhë programimi në vetvete.

      Ekzistojnë dy lloje gjuhësh:
      - përpiluar
      - Interpretuar
      - Të përziera (Makinat virtuale, hartohen bibliotekat vendase dhe interpretohet kodi funksional)

      Përkthyesit janë shumë të dobishëm kur bëhet fjalë për multiplatform dhe nuk kanë një performancë katastrofike për këtë. Java, VB.NET, C ++. NET, F #, C # janë gjuhë të përziera. Gjuha bash, bat, PHP, Javascript dhe shumë më tepër interpretohen gjuhë.

      Nëse nuk e konsideroni Java si gjuhë sepse interpretohet (e cila nuk është), nuk duhet të merrni parasysh shumë gjuhë të tjera që përdoren për të bërë programe. Për më tepër, sipas atij rregulli prej tre nuk duhet të konsideroni se ekziston ndonjë gjuhë programimi përveç vetë gjuhës së makinës.

      Dhe pse jo? Edhe gjuha e makinës nuk mund të konsiderohet gjuhë pasi në të vërtetë është vetëm një grup komandash "të interpretuara" nga procesori.

      Sepse në mënyrë efektive, T ALL GJITHA gjuhët nuk janë asgjë më shumë sesa një grup komandash që interpretohen nga një procesor.

      Ju mund të pëlqeni një gjuhë pak a shumë (Java, në këtë rast), duket pak a shumë e dobishme dhe e fuqishme, por të thuash që nuk është gjuhë programimi sepse nuk është përpiluar ... bie ndesh me të gjitha përkufizimet e gjuhës së programimit.

    2.    Mario dijo

      😐 Shpresoj të mos dukem shumë i vrazhdë

      1.    Maria Antoinette e Manuela Cardenas dijo

        pa qetësi ti vetëm na shkatërrove jetën

      2.    Mario dijo

        hahahahaha, perdoooon. nuk ishte qëllimi im xD

    3.    Carlos dijo

      java është një gjuhë programimi. sepse ju mund të zhvilloni një aplikacion dhe kur përpiloni bëni një .jar që interpretohet nga JVM. Pastaj sipas logjikës tuaj python as nuk interpretohet por përpilohet në ekzekutues të ndryshëm

  7.   Elijah Mongelos dijo

    Informacion shumë i mirë

  8.   Carlos Arturo dijo

    informacion i mirë, por kam një dyshim, do të jetë e mundur të krijoni një gjuhë të re programimi nga e para pa pasur nevojë të mbështeteni në analogji ose softuer tjetër. Unë flas në të njëjtën mënyrë që gjuhët e tjera janë bërë si java ose HTML.
    Unë do ta vlerësoja shumë ndihmën tuaj për këtë pyetje.