Miután megírta az első cikket hogyan hozhat létre saját operációs rendszertValaki elmondta, hogy tudnék-e cikket készíteni erről hogyan lehet programozási nyelvet létrehozni. Eleinte nem nagyon figyeltem, de most és más módszerekkel sokkal többet tanultam a programozási nyelvek létrehozásáról. Tehát tegyük alapvető programozási nyelv, könnyen beágyazható más programokba, és egy olyan virtuális géppel működik, amelyet mi is megtervezünk. Ma a legalapvetőbb virtuális gépet kell elkészítenünk.
Valószínűleg kíváncsi vagy: Virtuális gép? De ez nem túl nehéz, és a programokat is lelassítja? " Ezzel szemben egy egyszerű virtuális gép nagyon egyszerű és viszonylag gyors. választottam Rozsda mint a virtuális gép nyelvét. De mi az Rozsda?
Rozsda települ Linux Egyszerű módon. Hivatalos csomag azonban nincs. A Ubuntu felveheti ezt a kettőt PPA: ppa: hansjorg / rozsda y ppa: cmrx64 / rakomány, felhasználói Bolthajtás lehet használni AUR (cargo-git az a csomag, amely mindent telepít). A többi felhasználhatja:
curl -s https://static.rust-lang.org/rustup.sh | sudo sh
Hogyan működik egy virtuális gép?
Ha tudod, hogyan működik az assembler világ, pontosan ugyanaz, a verem vagy a verem mellett. Ha nem, elmagyarázom neked. Képzeljük el a következő kódot:
2 + 3 nyomtatás
A számítógép nem érti, mit jelent a 2 + 3, és azt sem, hogy milyen sorrendet kövessen. A számítógépek akkumulátorokkal vagy halmokkal működnek, amelyekben az adatok felhalmozódnak és folyamatosan kinyerhetők. A virtuális gépünk kódjának ilyennek kell kinéznie:
PUSH 2 PUSH 3 ADD PRINT
Alapvetően a tetejére tennénk a kettőt, a hármat is. Az ADD kihúzza (vagyis eltávolítja a veremből, és megkapja az értékét) a verem utolsó 2 elemét, és az eredményt a verem tetejéhez adja. A PRINT elveszi a verem utolsó elemét, és azt felhasználja, hogy megjelenítse nekünk. Most tegyük ezt be Rozsda.
Először meg kell határoznunk a bájtkódot, használhatunk egy létezőt, amilyen a Jáva vagy a CLR .NET / Mono, de egy alaposabbat fogunk létrehozni.
https://gist.github.com/a01de8904fd39a442c20
Minden utasításhoz hexadecimális jelölést használunk. A magasra tettük # [levezetés (FromPrimitive)], a sajátossága Rozsda és később segítségünkre lesz, ha közvetlenül összehasonlíthatjuk a felsorolást a bájtokkal.
Most létre kell hoznunk egy olyan függvényt, amely végrehajtja az utasításokat. Ehhez el kell olvasnunk egy bájtot, és össze kell hasonlítanunk a felsorolásban szereplő utasításokkal. Ha talál ilyeneket, akkor végre kell hajtania a műveletet.
https://gist.github.com/8950ce212a2de2f397f9
Tesszük, hogy minden bájtot külön-külön olvassunk és futtassunk:
https://gist.github.com/12e24a1f0dd65e4cd65d
Amint láthatja, megkülönböztetjük, ha korábban kaptuk a PUSH parancsot (az INTEGER parancsunkat), a következő bájt teljesen a verembe kerül. Két olyan funkciót használunk, amelyeket nem tanítottam meg, self.pop () y self.push (), amelyek nyilvánvalóan felelősek a verem kezeléséért.
https://gist.github.com/54147f853a8a2b8c01d9
Nem túl összetettek, de a pop funkció hibadetektálási mechanizmusokkal rendelkezik. Valójában a Rozsda, ha eltávolítjuk ezeket a mechanizmusokat, fordítási hibát okozna. Most egyszerűen be kell hívnunk egy programot Perin (virtuális gépünk) és hajtsunk végre egy byte-kódot.
https://gist.github.com/99b1ab461318b3a644d0
Ez a bájtkód leolvasható egy fájlból, de itt az egyszerűség kedvéért egy változóban tároltam. Ha végrehajtjuk, akkor a várt eredményt kapjuk:
Perin v0.1 A Perin virtuális gép FlopFlip byte-kódot hajt végre PerinVM példány indítása
Minden kód elérhető a címen GitHub alatt Apache licenc 2.0: https://github.com/AdrianArroyoCalle/perin. Összeállításához meg kell Szállítmány telepítve és felhelyezve:
töltésépítés && ./target/main
A következő fejezetben többet fogunk megtudni a programozási nyelvünkről.
Érdekes kíváncsiság, bár a valóságban nem túl hasznos, nem árt tudni.
Nagyon jó, hogy a Rustot hirdeti, ez egy olyan nyelv, amely sokat ígér, nemcsak hogy biztonságosabb, mint a c ++, hanem (egyelőre) szintaxisában is tisztább.
Ami a fotót illeti, nem venném figyelembe a java evolution XD-t.
És a fortran-tól soha nem használtam, de nem sok jót hallottam róla ...
Én igen, és ez különösen hasznos a mérnöki munkában, annak ellenére, hogy a Python egyre nagyobb teret hódít.
A Fortran talán a másik nagy nyelv C. mellett. Az igazán kritikus kérdésekben ma is az egyik vagy a másik lesz.
És vitatható lenne, hogy a Fortran a C „evolúciója”, amikor talán fordítva kellene lennie, mivel a C újabb, modernebb és több lehetőséggel rendelkezik; bár az egyik a legkevésbé sem válik el a másiktól.
Bár a végső álláspontok valamilyen szempontból vitathatóak.
+1 a Java-ra
Lássuk, tetszik-e ez nekem, adok valamit a programozásnak, de alapból, hátha értek többet.
Mi a valódi célja egy új programozási nyelv létrehozásának? Személy szerint nekem úgy tűnik, hogy ez egy trükk a forráskód elrejtésére.
Barátom, mi történt a "saját operációs rendszered" folytatásával? Ne hagyja ott, kérem, folytassa.
Valójában mester vagy, és ez a két dal teljesen lekötötte a figyelmemet, de nem szeretném, ha félúton megállnának.
Tudom, hogy sokan gondoljuk ugyanezt, és várjuk e nagyon érdekes témák folytatásait és következtetéseit.
Nagyon érdekes, köszönöm szépen. 🙂
Nem gondolom, hogy a java programozási nyelv, inkább parancsértelmező, mivel nem fordítható
[A programozási nyelv olyan formális nyelv, amelyet olyan gépek kifejlesztésére terveztek, amelyeket olyan gépek, mint például számítógépek, végezhetnek.
Emiatt a Java programozási nyelv. Még a bash nyelv (linux shell nyelv) is programozási nyelv.
Kétféle nyelv létezik:
- Összeállított
- Értelmezve
- Vegyes (virtuális gépek, a natív könyvtárak összeállítása és a funkcionális kód értelmezése)
A tolmácsok nagyon hasznosak, ha multiplatformról van szó, és ehhez nincsenek katasztrofális teljesítményeik. A Java, VB.NET, C ++ .NET, F #, C # mind vegyes nyelvek. A bash nyelv, a denevér, a PHP, a Javascript és még sok más értelmezett nyelv.
Ha a Java-t nem tekinti nyelvnek, mert az értelmezve van (ami nem az), akkor ne vegye figyelembe sok más programkészítéshez használt nyelvet. Ezenfelül a három szabály szerint nem szabad úgy gondolkodnia, hogy létezik programozási nyelv, kivéve magát a gépnyelvet.
És miért ne? Még a gépnyelv sem tekinthető nyelvnek, mivel valójában csak a processzor által "értelmezett" parancsok halmaza.
Mivel gyakorlatilag az ÖSSZES nyelv nem más, mint egy parancssor, amelyet egy processzor értelmez.
Lehet, hogy egy nyelv többé-kevésbé tetszik neked (ebben az esetben a Java), többé-kevésbé hasznosnak és hatékonynak tűnik, de azt mondhatod, hogy ez nem programozási nyelv, mert nincs lefordítva ... ellentmond minden programozási nyelv meghatározásának.
😐 Remélem, hogy nem tűntem túl durván
nem csend, csak az életünket romboltad le
hahahahaha, perdoooon. nem volt szándékomban xD
a java egy programozási nyelv. Mivel kifejleszthet egy alkalmazást, és amikor fordít, készít egy .jar fájlt, amelyet a JVM értelmez. Ezután a python logikája szerint ezt sem értelmezi, hanem különböző futtatható fájlokra fordítja ...
Nagyon jó információ
jó információ, de kétlem, hogy új programozási nyelvet lehet létrehozni a semmiből anélkül, hogy más analógiákra vagy szoftverekre kellene támaszkodnunk. Ugyanúgy beszélek, mint más nyelvek, például a java vagy a HTML.
Nagyra értékelném a segítségét ebben a kérdésben.