Sukurkite savo programavimo kalbą (I)

Programavimo kalbų raida

ParaŔęs pirmąjÄÆ straipsnÄÆ apie kaip susikurti savo operacinę sistemą, kažkas man pasakė, kad jei galėčiau padaryti straipsnÄÆ apie kaip sukurti programavimo kalbą. IÅ” pradžių nekreipiau daug dėmesio, bet dabar ir kitais bÅ«dais sužinojau daug daugiau apie programavimo kalbų kÅ«rimą. Taigi padarykime pagrindinė programavimo kalba, lengvai ÄÆterpiamas ÄÆ kitas programas ir kuris veikia su virtualia maÅ”ina, kurią taip pat sukursime. Å iandien mes turime sukurti paprasčiausią virtualią maÅ”iną.

Jums tikriausiai ÄÆdomu: Virtuali maÅ”ina? Bet ar tai nėra labai sunku ir ar tai sulėtina programas? " PrieÅ”ingai, paprasta virtuali maÅ”ina yra labai paprasta ir palyginti greita. aÅ” pasirinkau RÅ«dys kaip virtualios maÅ”inos kalba. Bet kas tai yra RÅ«dys?

RÅ«dys Tai programavimo kalba, orientuota ÄÆ vykdymo saugumą, todėl ją naudojant praktiÅ”kai neÄÆmanoma uždaryti virtualios maÅ”inos. Tai yra sukurta kuriama kalba "Mozilla. Servo, pakaitalas Lankytojų, su nurodytomis, vystosi jame. Vis tiek galite pakeisti savo sintaksę, bet kodas, kurÄÆ naudosiu, iÅ”liks iki pirmojo stabilaus leidimo.

RÅ«dys ÄÆdiegiama Linux Paprastu bÅ«du. Tačiau oficialaus siuntinio nėra. Vartotojai ubuntu galite pridėti Å”iuos du EEPS: ppa: hansjorg / rust  y ppa: cmrx64 / krovinys, vartotojai Arka gali naudoti AUR (krovinys yra viską ÄÆdiegiantis paketas). Likusieji gali naudoti:

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

Kaip veikia virtuali maŔina?

Jei žinote, kaip veikia montuotojų pasaulis, jis yra visiÅ”kai tas pats, su kaupu ar kaminu. Jei ne, aÅ” jums tai paaiÅ”kinsiu. Ä®sivaizduokime Å”ÄÆ kodą:

spausdinti 2 + 3

Kompiuteris nesupranta, ką reiÅ”kia 2 + 3, ir nežino, kokios tvarkos laikytis. Kompiuteriai dirba su baterijomis ar kaminais, kuriuose kaupiami ir nuolat gaunami duomenys. Tas kodas mÅ«sų virtualioje maÅ”inoje turėtų atrodyti maždaug taip:

PUSH 2 PUSH 3 PRIDĖTI SPAUSDINTI

IÅ” esmės 2 uždėtume ant virÅ”uje esančios kamino, taip pat 3. ADD iÅ”trauktų (t. Y. PaÅ”alintų iÅ” kamino ir gautų jo vertę) paskutinius 2 kamino elementus ir pridėtų rezultatą prie kamino virÅ”aus. ā€žPRINTā€œ paimtų paskutinÄÆ elementą ant kamino ir panaudotų jÄÆ mums parodyti. Dabar padarykime tai RÅ«dys.

Pirmiausia turime apibrėžti ā€žBytecodeā€œ, mes galėtume naudoti esamą, tokią, kokia yra Java o el CLR .NET / Mono, bet mes sukursime paprastesnÄÆ.

https://gist.github.com/a01de8904fd39a442c20

Kiekvienai instrukcijai naudojame Å”eÅ”ioliktainę žymėjimą. AukÅ”tai mes ÄÆdėjome # [iÅ”vedamas (FromPrimitive)]yra ypatumas RÅ«dys ir tai padės mums vėliau tiesiogiai palyginti baitą su baitais.

Dabar turime sukurti funkciją, kuri vykdo kiekvieną iÅ” Å”ių instrukcijų. Tam turime perskaityti baitą ir palyginti jÄÆ su instrukcijomis, kurias turime suraÅ”yme. Jei radote egzistuojančių, turite atlikti savo veiksmą.

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

Mes tai darome norėdami perskaityti kiekvieną baitą atskirai ir juos vykdyti:

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

Kaip matote, mes diferencijuojame, ar mums anksčiau buvo suteikta komanda PUSH (mÅ«sų INTEGER komanda), kitas baitas bus visiÅ”kai perkeltas ÄÆ kaminą. Mes naudojame dvi funkcijas, kurių aÅ” jÅ«sų nemokiau, self.pop () y self.push (), kurios akivaizdžiai atsakingos už kamino tvarkymą.

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

Jie nėra labai sudėtingi, tačiau ā€žpopā€œ funkcija turi klaidų aptikimo mechanizmus. Tiesą sakant, RÅ«dys, jei paÅ”alinsime tuos mechanizmus, tai sukeltų kompiliavimo klaidą. Dabar mes tiesiog turime paskambinti ÄÆ programą Perinas (mÅ«sų virtualioji maÅ”ina) ir paleiskite baitą.

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

Tą baitekodą galima nuskaityti iÅ” failo, bet čia, kad bÅ«tų paprasčiau, aÅ” jÄÆ iÅ”saugojau kintamajame. Jei tai ÄÆvykdysime, tai suteiks mums laukiamą rezultatą:

ā€žPerin v0.1ā€œ ā€žPerin VMā€œ vykdo ā€žFlopFlipā€œ baitkodą. ā€žPerinVMā€œ egzemplioriaus paleidimas ā€žPerinVM v0.1.0ā€œ sveikojo skaičiaus vertė 5

Visą kodą galite rasti GitHub po ā€žApacheā€œ licencija 2.0: https://github.com/AdrianArroyoCalle/perin. Norėdami sudaryti jie turi krovinys ÄÆdiegta ir ÄÆdėta:

ÄÆkrauti && ./target/main

Kitame skyriuje pamatysime daugiau apie mūsų programavimo kalbą.


Palikite komentarą

JÅ«sų elektroninio paÅ”to adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ɓngel GatĆ³n
  2. Duomenų paskirtis: kontroliuoti Å”lamÅ”tą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms Å”alims, iÅ”skyrus teisinius ÄÆsipareigojimus.
  5. Duomenų saugojimas: ā€žOccentus Networksā€œ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir iÅ”trinti savo informaciją.

  1.   kelininkas sakė

    Ä®domus smalsumas, nors iÅ” tikrųjų jis nėra labai naudingas, tačiau nepakenkia žinoti.

    Puiku, kad reklamuojate ā€žRustā€œ, tai yra daug žadanti kalba, kuri ne tik yra saugesnė nei ā€žc ++ā€œ, bet (kol kas) aiÅ”kesnė savo sintaksėje.

    Kalbant apie nuotrauką, nelaikyčiau ā€žJava Evolution XDā€œ.

    1.    kelininkas sakė

      IÅ” fortrano aÅ” niekada jo nenaudojau, bet negirdėjau apie tai daug gerų dalykų ...

      1.    Žiaurus sakė

        AÅ” tai darau, ir tai ypač naudinga inžinerijoje, nors ā€žPythonā€œ vis labiau ÄÆsitvirtina.

      2.    Jonas sakė

        ā€žFortranā€œ yra galbÅ«t kita puiki kalba kartu su C. Vis dar Å”iandien tikrai kritiniais klausimais bus vienas ar kitas.

        Ir bÅ«tų galima ginčytis, ar Fortranas yra C evoliucija, kai galbÅ«t turėtų bÅ«ti atvirkŔčiai, nes C yra naujesnis, modernesnis ir turi daugiau galimybių; nors vienas nė kiek neatitrÅ«kęs nuo kito.

        Nors dėl galutinių pozicijų tam tikru požiūriu galima ginčytis.

    2.    Franciskas sakė

      +1 prie ā€žJavaā€œ

  2.   Portaro sakė

    PažiÅ«rėkime, ar man tai patinka, aÅ” duodu kažką programavimui, bet pagrindinÄÆ, norėdamas sužinoti, ar aÅ” suprantu daugiau.

  3.   usergnulinux sakė

    Koks yra tikrasis naujos programavimo kalbos kÅ«rimo tikslas? Man atrodo, kad tai yra triukas paslėpti Å”altinio kodą.

  4.   Yeilly sakė

    Draugas, kas nutiko tęsiant ā€žsavo operacinę sistemąā€œ? Nepalikite jo, praÅ”au tęskite.

    Tiesą sakant, jÅ«s esate meistras ir tik Å”ios dvi dainos visiÅ”kai pavergė mano dėmesÄÆ, tačiau nenorėčiau, kad jos liktų pusiaukelėje.

    Žinau, kad daugelis iÅ” mÅ«sų galvoja tą patÄÆ ir laukiame Å”ių labai ÄÆdomių temų tęsinių ir iÅ”vadų.

  5.   Cristianas Davidas sakė

    Labai ÄÆdomu, labai ačiÅ«. šŸ™‚

  6.   Prepaid sakė

    ā€žJavaā€œ nelaikau programavimo kalba, greičiau komandų vertėju, nes ji nėra kompiliuojama

    1.    mario sakė

      [Programavimo kalba yra oficiali kalba, skirta procesams, kuriuos gali atlikti tokios maŔinos, kaip kompiuteriai, iŔreikŔti.]

      Dėl Å”ios priežasties ā€žJavaā€œ yra programavimo kalba. Net ā€žBashā€œ kalba (ā€žLinux shellā€œ kalba) yra savaime programavimo kalba.

      Yra dviejų tipų kalbos:
      - Sudarė
      - AiŔkinamas
      - miÅ”rus (virtualios maÅ”inos, sudaromos vietinės bibliotekos ir interpretuojamas funkcinis kodas)

      Vertėjai žodžiu yra labai naudingi, kai kalbama apie daugialypę platformą, todėl jų pasirodymas nėra pražūtingas. ā€žJavaā€œ, VB.NET, C ++ .NET, F #, C # yra visos kalbos. Basho kalba, Å”ikÅ”nosparnis, PHP, ā€žJavascriptā€œ ir daugelis kitų yra aiÅ”kinamos kalbos.

      Jei nemanote, kad Java yra kalba, nes ji yra interpretuojama (kuri nėra), neturėtumėte apsvarstyti daugelio kitų kalbų, kurios naudojamos programoms kurti. Be to, pagal trijų taisyklę neturėtumėte manyti, kad yra kokia nors programavimo kalba, iÅ”skyrus pačią maÅ”ininę kalbą.

      Ir kodėl gi ne? Net maÅ”ininė kalba negalėjo bÅ«ti laikoma kalba, nes tai iÅ” tikrųjų yra tik procesoriaus ā€žinterpretuojamasā€œ komandų rinkinys.

      Kadangi iÅ” tikrųjų VISOS kalbos yra ne kas kita, o komandų rinkinys, kurÄÆ interpretuoja procesorius.

      Jums gali patikti kalba daugiau ar mažiau (Å”iuo atveju ā€žJavaā€œ), atrodyti daugiau ar mažiau naudinga ir galinga, tačiau sakyti, kad tai nėra programavimo kalba, nes ji nėra sukompiliuota ... tai prieÅ”tarauja visiems programavimo kalbos apibrėžimams.

    2.    mario sakė

      šŸ˜ Tikiuosi, kad neatrodžiau per grubi

      1.    Marija Antuanetė iÅ” Manuela Cardenas sakė

        ramu, tu tik sunaikinai mūsų gyvenimus

      2.    mario sakė

        hahahahaha, perdoooon. tai nebuvo mano tikslas xD

    3.    carlos sakė

      java yra programavimo kalba. nes galite sukurti programą ir, kai kuriate, sukuriate .jar, kurÄÆ interpretuoja JVM. Tada pagal jÅ«sų python logiką jis taip pat nėra aiÅ”kinamas, bet jis yra sukompiliuotas skirtingiems vykdomiesiems failams ...

  7.   Eliasas Mongelosas sakė

    Labai gera informacija

  8.   Carlosas Arturo sakė

    geros informacijos, bet aÅ” abejoju, bus galima sukurti naują programavimo kalbą nuo nulio, nesikliaujant kitomis analogijomis ar programine ÄÆranga. AÅ” kalbu taip pat, kaip ir kitos kalbos, pavyzdžiui, ā€žJavaā€œ ar HTML.
    Labai dėkoju už jÅ«sų pagalbą Å”iuo klausimu.