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 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.
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ä.
Fortranista en ole koskaan käyttänyt sitä, mutta en ole kuullut siitä paljon hyvää ...
Minä teen, ja se on erityisen hyödyllinen suunnittelussa, vaikka Python on saamassa jalansijaa.
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.
+1 Java: lle
Katsotaanpa, pidänkö tästä, annan jotain ohjelmoinnille, mutta perustiedot nähdäksesi ymmärränkö enemmän.
Mikä on uuden ohjelmointikielen luomisen todellinen tarkoitus? Minulle henkilökohtaisesti tuntuu, että lähdekoodin piilottaminen on temppu.
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ä.
Erittäin mielenkiintoinen, kiitos paljon. 🙂
En pidä jaavaa ohjelmointikielenä, pikemminkin komentotulkkina, koska se ei ole käännettävissä
[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ä.
😐 Toivon, että en vaikuttanut liian töykeältä
ei hiljaa, vain tuhosit elämämme
hahahahaha, perdoooon. se ei ollut aikomukseni xD
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 ...
Erittäin hyvä tieto
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ä.