Efter att ha skrivit den första artikeln på hur du skapar ditt eget operativsystemNågon sa till mig om jag kunde göra en artikel om hur man skapar ett programmeringsspråk. Först var jag inte mycket uppmärksam, men nu och på andra sätt har jag lärt mig mycket mer om skapandet av programmeringsspråk. Så låt oss göra ett grundläggande programmeringsspråk, lätt att bädda in i andra program och som fungerar med en virtuell maskin som vi också kommer att designa. Idag måste vi göra den mest grundläggande virtuella maskinen.
Du undrar nog: En virtuell maskin? Men är det inte så svårt och saktar det också ner programmen? " Däremot är en enkel virtuell maskin mycket enkel och relativt snabb. Jag har valt Rust som ett språk för den virtuella maskinen. Men vad är det Rust?
Rust installeras i Linux På ett enkelt sätt. Det finns dock inget officiellt paket. Användare av ubuntu du kan lägga till dessa två PPA: ppa: hansjorg / rost y ppa: cmrx64 / last, användare av Arch kan använda AUR (last-git är paketet som installerar allt). Resten kan använda:
curl -s https://static.rust-lang.org/rustup.sh | sudo sh
Hur fungerar en virtuell maskin?
Om du vet hur montörvärlden fungerar är det exakt detsamma, med stacken eller stacken. Om inte, förklarar jag det för dig. Låt oss föreställa oss följande kod:
skriv ut 2 + 3
Datorn förstår inte vad 2 + 3 betyder och vet inte vilken ordning som ska följas. Datorer arbetar med batterier eller stackar där data samlas och extraheras kontinuerligt. Den koden i vår virtuella maskin ska se ut så här:
PUSH 2 PUSH 3 LÄGG TILL UTSKRIFT
I grund och botten skulle vi lägga de 2 på stacken ovanpå, de 3 också. ADD skulle dra (dvs. ta bort den från stacken och få sitt värde) de två sista objekten på stacken och lägga till resultatet överst i stacken. PRINT skulle ta det sista föremålet i stacken och använda det för att visa det för oss. Låt oss nu göra det i Rust.
Vi måste först definiera ett språk för bytekod, vi kan använda en befintlig som den i java eller CLR av .NET / Mono, men vi ska skapa en mer grundläggande.
https://gist.github.com/a01de8904fd39a442c20
Vi använder hexadecimal notation för varje instruktion. På högt har vi lagt # [härledd (FromPrimitive)], är en egenart av Rust och det kommer att hjälpa oss senare att kunna jämföra uppräkningen med byte direkt.
Nu måste vi göra en funktion som utför var och en av dessa instruktioner. För detta måste vi läsa en byte och jämföra den med de instruktioner som vi har i uppräkningen. Om du hittar några som finns måste du utföra din åtgärd.
https://gist.github.com/8950ce212a2de2f397f9
Vi gör det för att läsa varje byte individuellt och för att utföra dem:
https://gist.github.com/12e24a1f0dd65e4cd65d
Som du kan se, skiljer vi om vi fick PUSH-kommandot (vårt INTEGER-kommando) innan, nästa byte tas helt på stacken. Där använder vi två funktioner som jag inte har lärt dig, self.pop () y self.push (), som uppenbarligen ansvarar för hanteringen av stacken.
https://gist.github.com/54147f853a8a2b8c01d9
De är inte särskilt komplexa, men popfunktionen har feldetekteringsmekanismer. I själva verket i Rust, om vi tar bort dessa mekanismer skulle det ge oss ett kompileringsfel. Nu måste vi helt enkelt ringa in ett program Mycket (vår virtuella maskin) och kör en bytkod.
https://gist.github.com/99b1ab461318b3a644d0
Denna bytecode kan läsas från en fil, men här för enkelhetens skull har jag lagrat den i en variabel. Om vi utför det kommer det att ge oss det förväntade resultatet:
Perin v0.1 Perin VM kör FlopFlip bytecode Startar PerinVM-instans PerinVM v0.1.0 Heltalsvärde 5
All kod finns på GitHub under Apache-licens 2.0: https://github.com/AdrianArroyoCalle/perin. För att kompilera måste de ha Laddning installerat och satt:
charge build && ./target/main
I nästa kapitel kommer vi att se mer om vårt programmeringsspråk.
Intressant nyfikenhet, även om det inte är särskilt användbart i verkligheten, gör det inte ont att veta.
Det är fantastiskt att du annonserar för Rust, det är ett språk som lovar mycket, inte bara är det säkrare än c ++, men (för närvarande) tydligare i sin syntax.
När det gäller foto skulle jag inte överväga java evolution XD.
Och från fortran använde jag det aldrig, men jag har inte hört många bra saker om det ...
Jag gör det, och det är särskilt användbart inom teknik även om Python vinner mark.
Fortran är kanske det andra stora språket tillsammans med C. Än idag i riktigt kritiska frågor kommer att vara den ena eller den andra.
Och det skulle vara diskutabelt att Fortran är som en "utveckling" av C, när det kanske borde vara tvärtom, eftersom C är nyare, modernare och med fler möjligheter; även om den ena inte är åtminstone avskild från den andra.
Även om de slutliga positionerna alla kan diskuteras ur någon synvinkel.
+1 till Java
Låt oss se om jag gillar det här, jag kommer att ge något åt programmering men grundläggande för att se om jag förstår mer.
Vad är det verkliga syftet med att skapa ett nytt programmeringsspråk? Det verkar för mig personligen att det är ett knep att dölja källkoden.
Vän, vad hände med fortsättningen av "ditt eget operativsystem"? Lämna det inte där snälla fortsätt det.
Egentligen är du en mästare och dessa två låtar har fängslat min uppmärksamhet, men jag skulle inte vilja att de skulle sluta halvvägs.
Jag vet att många av oss tycker samma sak och vi väntar på fortsättningen och slutsatserna av dessa mycket intressanta ämnen.
Mycket intressant, tack så mycket. 🙂
Jag anser inte att java är ett programmeringsspråk, utan en kommandotolk, eftersom det inte är sammanställbart
[Ett programmeringsspråk är ett formellt språk som är utformat för att uttrycka processer som kan utföras av maskiner som datorer.]
Av denna anledning är Java ett programmeringsspråk. Även bash-språket (Linux-skalspråk) är ett programmeringsspråk i sig.
Det finns två typer av språk:
- Sammanställt
- Tolkad
- Blandad (virtuella maskiner, de inbyggda biblioteken sammanställs och funktionskoden tolkas)
Tolkar är mycket användbara när det gäller multiplatform och har inte en katastrofal prestanda för det. Java, VB.NET, C ++ .NET, F #, C # är alla blandade språk. Bash-språket, bat, PHP, Javascript och många fler är tolkade språk.
Om du inte ser Java som ett språk eftersom det tolkas (vilket det inte är), bör du inte överväga många andra språk som används för att skapa program. Dessutom bör du enligt den här regeln om tre inte överväga att det finns något programmeringsspråk förutom själva maskinspråket.
Och varför inte? Inte ens maskinspråk kan betraktas som ett språk eftersom det egentligen bara är en uppsättning kommandon som "tolkas" av processorn.
Eftersom effektivt, ALLA språk är inget annat än en uppsättning kommandon som tolkas av en processor.
Du kanske gillar ett språk mer eller mindre (Java, i det här fallet), verkar mer eller mindre användbart och kraftfullt men att säga att det inte är ett programmeringsspråk eftersom det inte är kompilerat ... det strider mot alla definitioner av programmeringsspråk.
😐 Jag hoppas att jag inte verkade för oförskämd
ingen tyst du förstörde bara våra liv
hahahahaha, perdoooon. det var inte min avsikt xD
java är ett programmeringsspråk. Eftersom du kan utveckla en applikation och när du kompilerar skapar du en .jar som tolkas av JVM. Enligt din pythonlogik tolkas den inte heller, men den kompileras till olika körbara filer ...
Mycket bra information
bra information men jag tvivlar på att det kommer att vara möjligt att skapa ett nytt programmeringsspråk från grunden utan att behöva förlita sig på andra analogier eller programvara. Jag talar på samma sätt som andra språk gjordes som java eller HTML.
Jag skulle mycket uppskatta din hjälp med denna fråga.