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 ÄÆ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Ä .
Ä®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ā.
IÅ” fortrano aÅ” niekada jo nenaudojau, bet negirdÄjau apie tai daug gerų dalykų ...
AÅ” tai darau, ir tai ypaÄ naudinga inžinerijoje, nors āPythonā vis labiau ÄÆsitvirtina.
ā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.
+1 prie āJavaā
PažiÅ«rÄkime, ar man tai patinka, aÅ” duodu kažkÄ programavimui, bet pagrindinÄÆ, norÄdamas sužinoti, ar aÅ” suprantu daugiau.
Koks yra tikrasis naujos programavimo kalbos kÅ«rimo tikslas? Man atrodo, kad tai yra triukas paslÄpti Å”altinio kodÄ .
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ų.
Labai ÄÆdomu, labai aÄiÅ«. š
āJavaā nelaikau programavimo kalba, greiÄiau komandų vertÄju, nes ji nÄra kompiliuojama
[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.
š Tikiuosi, kad neatrodžiau per grubi
ramu, tu tik sunaikinai mūsų gyvenimus
hahahahaha, perdoooon. tai nebuvo mano tikslas xD
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 ...
Labai gera informacija
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.