Etter å ha skrevet den første artikkelen på hvordan du lager ditt eget operativsystemNoen fortalte meg om jeg kunne gjøre en artikkel om hvordan lage et programmeringsspråk. Først fulgte jeg ikke mye oppmerksomhet, men nå og på andre måter har jeg lært mye mer om etableringen av programmeringsspråk. Så la oss gjøre et grunnleggende programmeringsspråk, lett å legge inn i andre programmer, og som fungerer med en virtuell maskin som vi også vil designe. I dag må vi lage den mest grunnleggende virtuelle maskinen.
Du lurer sannsynligvis på: «En virtuell maskin? Men er ikke det veldig vanskelig, og bremser det også programmene? " I kontrast er en enkel virtuell maskin veldig enkel og relativt rask. jeg har valgt Rust som et språk for den virtuelle maskinen. Men hva er det? Rust?
Rust installeres i Linux På en enkel måte. Det er imidlertid ingen offisiell pakke. Brukere av Ubuntu kan legge til disse to PPA: ppa: hansjorg / rust y ppa: cmrx64 / last, brukere av Arch kan bruke AUR (last-git er pakken som installerer alt). Resten kan bruke:
curl -s https://static.rust-lang.org/rustup.sh | sudo sh
Hvordan fungerer en virtuell maskin?
Hvis du vet hvordan montørverdenen fungerer, er det nøyaktig det samme, med stakken eller stakken. Hvis ikke, forklarer jeg det for deg. La oss forestille oss følgende kode:
skriv ut 2 + 3
Datamaskinen forstår ikke hva 2 + 3 betyr, og vet heller ikke hvilken rekkefølge de skal følge. Datamaskiner fungerer med batterier eller stabler der data akkumuleres og trekkes ut kontinuerlig. Den koden i den virtuelle maskinen vår skal se slik ut:
PUSH 2 PUSH 3 LEGG TIL UTSKRIFT
I utgangspunktet vil vi sette de 2 på bunken på toppen, de 3 også. ADD ville trekke (dvs. fjerne den fra bunken og få verdien) de to siste elementene på bunken og legge resultatet til toppen av bunken. PRINT tar det siste elementet på bunken og bruker det til å vise det for oss. La oss nå gjøre det Rust.
Vi må først definere et språk for Bytekode, kunne vi bruke en eksisterende som den i Java eller CLR av. NET / Mono, men vi skal lage en mer grunnleggende.
https://gist.github.com/a01de8904fd39a442c20
Vi bruker heksadesimal notasjon for hver instruksjon. På høy har vi satt # [avledet (FromPrimitive)], er en særegenhet ved Rust og det vil hjelpe oss senere å kunne sammenligne opptellingen med byte direkte.
Nå må vi lage en funksjon som utfører hver av disse instruksjonene. For dette må vi lese en byte og sammenligne den med instruksjonene vi har i oppregningen. Hvis du finner noen som eksisterer, må du utføre handlingen din.
https://gist.github.com/8950ce212a2de2f397f9
Vi gjør det for å lese hver byte hver for seg og for å utføre dem:
https://gist.github.com/12e24a1f0dd65e4cd65d
Som du kan se, skiller vi ut om vi fikk PUSH-kommandoen (vår INTEGER-kommando) før, neste byte blir helt tatt til stabelen. Der bruker vi to funksjoner som jeg ikke har lært deg, self.pop () y self.push (), som åpenbart har ansvaret for å håndtere stabelen.
https://gist.github.com/54147f853a8a2b8c01d9
De er ikke veldig komplekse, men pop-funksjonen har feildeteksjonsmekanismer. Faktisk i Rust, hvis vi fjerner disse mekanismene, vil det gi oss en kompileringsfeil. Nå må vi bare kalle inn et program Perin (vår virtuelle maskin) og utføre en bytekode.
https://gist.github.com/99b1ab461318b3a644d0
Den bytekoden kan leses fra en fil, men her har jeg for enkelhets skyld lagret den i en variabel. Hvis vi utfører det, vil det gi oss det forventede resultatet:
Perin v0.1 Perin VM utfører FlopFlip bytecode Starter PerinVM-forekomst PerinVM v0.1.0 Heltalsverdi 5
All kode er tilgjengelig på GitHub under Apache lisens 2.0: https://github.com/AdrianArroyoCalle/perin. For å kompilere må de ha Cargo installert og satt:
charge build && ./target/main
I neste kapittel vil vi se mer om programmeringsspråket vårt.
Interessant nysgjerrighet, selv om det ikke er veldig nyttig i virkeligheten, skader det ikke å vite.
Det er flott at du annonserer Rust, det er et språk som lover mye, ikke bare er det sikrere enn c ++, men (for nå) klarere i syntaksen.
Når det gjelder foto, vil jeg ikke vurdere java evolusjon XD.
Og fra fortran brukte jeg den aldri, men jeg har ikke hørt mye bra om det ...
Jeg gjør det, og det er spesielt nyttig innen engineering, selv om Python vinner terreng.
Fortran er kanskje det andre store språket sammen med C. Selv i dag vil virkelig kritiske spørsmål være det ene eller det andre.
Og det ville være diskutabelt at Fortran er som en 'evolusjon' av C, når det kanskje burde være omvendt, ettersom C er nyere, mer moderne og med flere muligheter; selv om den ene ikke skiller seg fra den andre i det minste.
Selv om de endelige posisjonene alle kan diskuteres fra et eller annet synspunkt.
+1 til Java
La oss se om jeg liker dette, jeg vil gi noe til programmering, men grunnleggende for å se om jeg forstår mer.
Hva er det virkelige formålet med å lage et nytt programmeringsspråk? Personlig ser det ut til at det er et knep å skjule kildekoden.
Venn, hva skjedde med fortsettelsen av "ditt eget operativsystem"? Ikke la den være der, fortsett.
Egentlig er du en mester, og bare disse to sangene har fengslet oppmerksomheten min, men jeg vil ikke at de skal være halvveis.
Jeg vet at mange av oss tenker det samme, og vi venter på fortsettelsen og konklusjonen av disse veldig interessante emnene.
Veldig interessant, tusen takk. 🙂
Jeg anser ikke java som et programmeringsspråk, snarere som en kommandotolk, siden det ikke kan kompileres
[Et programmeringsspråk er et formelt språk designet for å uttrykke prosesser som kan utføres av maskiner som datamaskiner.]
Av denne grunn er Java et programmeringsspråk. Selv Bash-språket (linux-skallspråk) er et programmeringsspråk i seg selv.
Det er to typer språk:
- Kompilert
- Tolket
- Blandet (virtuelle maskiner, de opprinnelige bibliotekene blir samlet og funksjonskoden tolkes)
Tolkerne er veldig nyttige når det gjelder multiplatform og ikke har en katastrofal ytelse for det. Java, VB.NET, C ++ .NET, F #, C # er alle blandede språk. Bash-språket, bat, PHP, Javascript og mange flere er tolket språk.
Hvis du ikke anser Java som et språk fordi det tolkes (som det ikke er), bør du ikke vurdere mange andre språk som brukes til å lage programmer. Videre, etter denne regelen på tre, bør du ikke vurdere at det ikke er noe programmeringsspråk bortsett fra selve maskinspråket.
Og hvorfor ikke? Selv maskinspråk kan ikke betraktes som et språk, siden det egentlig bare er et sett med kommandoer "tolket" av prosessoren.
For effektivt, ALLE språk er ikke annet enn et sett med kommandoer som tolkes av en prosessor.
Du liker kanskje et språk mer eller mindre (Java, i dette tilfellet), virker mer eller mindre nyttig og kraftig, men å si at det ikke er et programmeringsspråk fordi det ikke er kompilert ... det strider mot alle definisjoner av programmeringsspråk.
Hope Jeg håper jeg ikke virket for frekk
ikke stille, du ødela bare livene våre
hahahahaha, perdoooon. det var ikke min intensjon xD
java er et programmeringsspråk. fordi du kan utvikle et program og når du kompilerer, lager du en .jar som tolkes av JVM. I følge din pythonlogikk tolkes den heller ikke, men den kompileres til forskjellige kjørbare filer ...
Veldig god informasjon
god informasjon, men jeg er i tvil om at det vil være mulig å lage et nytt programmeringsspråk fra bunnen av uten å måtte stole på andre analogier eller programvare. Jeg snakker på samme måte som andre språk ble laget som java eller HTML.
Jeg vil sette stor pris på din hjelp til dette spørsmålet.