Efter at have skrevet den første artikel om hvordan du opretter dit eget operativsystemNogen fortalte mig, om jeg kunne lave en artikel om hvordan man opretter et programmeringssprog. Først var jeg ikke meget opmærksom, men nu og på andre måder har jeg lært meget mere om oprettelsen af programmeringssprog. Så lad os gøre et grundlæggende programmeringssprog, let indlejret i andre programmer, og som fungerer med en virtuel maskine, som vi også designer. I dag er vi nødt til at lave den mest basale virtuelle maskine.
Du undrer dig sandsynligvis over: En virtuel maskine? Men er det ikke meget vanskeligt, og gør det også programmerne langsommere? " I modsætning hertil er en simpel virtuel maskine meget enkel og relativt hurtig. jeg har valgt Rust som et sprog til den virtuelle maskine. Men hvad er det? Rust?
Rust installeres i Linux På en enkel måde. Der er dog ingen officiel pakke. Brugere af Ubuntu du kan tilføje disse to PPA: ppa: hansjorg / rust y ppa: cmrx64 / fragt, brugere af Arch kan bruge AUR (last-git er pakken, der installerer alt). Resten kan bruge:
curl -s https://static.rust-lang.org/rustup.sh | sudo sh
Hvordan fungerer en virtuel maskine?
Hvis du ved, hvordan verden fungerer i samler, er det nøjagtigt det samme med stakken eller stakken. Hvis ikke, forklarer jeg det for dig. Lad os forestille os følgende kode:
udskriv 2 + 3
Computeren forstår ikke, hvad 2 + 3 betyder, og den ved heller ikke, hvilken rækkefølge den skal følge. Computere arbejder med batterier eller stakke, hvor data akkumuleres og ekstraheres kontinuerligt. Denne kode i vores virtuelle maskine skal se sådan ud:
PUSH 2 PUSH 3 ADD PRINT
Dybest set ville vi lægge 2 på stakken ovenpå, 3 også. ADD ville trække (dvs. fjerne den fra stakken og få dens værdi) de sidste 2 emner på stakken og tilføje resultatet til toppen af stakken. PRINT tager det sidste element på stakken og bruger det til at vise det for os. Lad os nu gøre det Rust.
Vi skal først definere et sprog til bytekode, kunne vi bruge en eksisterende som den i Java eller CLR af .NET / Mono, men vi vil skabe en mere grundlæggende.
https://gist.github.com/a01de8904fd39a442c20
Vi bruger hexadecimal notation til hver instruktion. På højt har vi lagt # [deriverer (FromPrimitive)], er en ejendommelighed af Rust og det hjælper os senere med at være i stand til at sammenligne optællingen med bytes direkte.
Nu skal vi lave en funktion, der udfører hver af disse instruktioner. Til dette skal vi læse en byte og sammenligne den med de instruktioner, vi har i optællingen. Hvis du finder nogen, der findes, skal du udføre din handling.
https://gist.github.com/8950ce212a2de2f397f9
Vi gør det for at læse hver byte individuelt og udføre dem:
https://gist.github.com/12e24a1f0dd65e4cd65d
Som du kan se, skelner vi, hvis vi fik PUSH-kommandoen (vores INTEGER-kommando) før, den næste byte føres helt til stakken. Der bruger vi to funktioner, som jeg ikke har lært dig, self.pop () y self.push (), som naturligvis har ansvaret for håndtering af stakken.
https://gist.github.com/54147f853a8a2b8c01d9
De er ikke særlig komplekse, men pop-funktionen har fejldetekteringsmekanismer. Faktisk i Rust, hvis vi fjerner disse mekanismer, ville det give os en kompileringsfejl. Nu skal vi blot kalde et program perin (vores virtuelle maskine) og udføre en bytecode.
https://gist.github.com/99b1ab461318b3a644d0
Denne bytecode kan læses fra en fil, men her har jeg for enkelheds skyld gemt den i en variabel. Hvis vi udfører det, vil det give os det forventede resultat:
Perin v0.1 Perin VM udfører FlopFlip bytecode Starter PerinVM-forekomst PerinVM v0.1.0 Heltalsværdi 5
Al kode er tilgængelig på GitHub under Apache-licens 2.0: https://github.com/AdrianArroyoCalle/perin. For at kompilere skal de have Last installeret og sat:
charge build && ./target/main
I det næste kapitel vil vi se mere om vores programmeringssprog.
Interessant nysgerrighed, selvom det ikke er særlig nyttigt i virkeligheden, gør det ikke ondt at vide det.
Det er dejligt, at du annoncerer for Rust, det er et sprog, der lover meget, ikke kun er det mere sikkert end c ++, men (for nu) mere klart i sin syntaks.
Hvad angår foto, vil jeg ikke overveje java evolution XD.
Og fra fortran brugte jeg det aldrig, men jeg har ikke hørt meget godt om det ...
Det gør jeg, og det er især nyttigt inden for teknik, selvom Python vinder terræn.
Fortran er måske det andet store sprog sammen med C. Stadig i dag vil virkelig kritiske spørgsmål være det ene eller det andet.
Og det ville være diskutabelt, at Fortran er som en 'udvikling' af C, når det måske skulle være omvendt, da C er nyere, mere moderne og med flere muligheder; skønt den ene ikke er mindst løsrevet fra den anden.
Selvom de endelige holdninger alle kan diskuteres fra et eller andet synspunkt.
+1 til Java
Lad os se, om jeg kan lide dette, jeg giver noget til programmering, men grundlæggende for at se, om jeg forstår mere.
Hvad er det egentlige formål med at skabe et nyt programmeringssprog? Det forekommer mig personligt, at det er et trick at skjule kildekoden.
Ven, hvad skete der med fortsættelsen af "dit eget operativsystem"? Lad det ikke være der, fortsæt det.
Faktisk er du en mester, og bare disse to sange har fængslet min opmærksomhed fuldstændigt, men jeg vil ikke have dem til at blive halvvejs.
Jeg ved, at mange af os tænker det samme, og vi venter på fortsættelsen og konklusionerne af disse meget interessante emner.
Meget interessant, mange tak. 🙂
Jeg betragter ikke java som et programmeringssprog, snarere som en kommandotolk, da det ikke kan kompileres
[Et programmeringssprog er et formelt sprog designet til at udtrykke processer, der kan udføres af maskiner såsom computere.]
Af denne grund er Java et programmeringssprog. Selv Bash-sproget (linux shell-sprog) er et programmeringssprog i sig selv.
Der er to typer sprog:
- Kompileret
- Fortolket
- Blandet (virtuelle maskiner, de oprindelige biblioteker er samlet og funktionskoden fortolkes)
Tolkerne er meget nyttige, når det kommer til multiplatform og har ikke en katastrofal ydeevne for det. Java, VB.NET, C ++ .NET, F #, C # er alle blandede sprog. Bash-sproget, bat, PHP, Javascript og mange flere tolkes sprog.
Hvis du ikke betragter Java som et sprog, fordi det fortolkes (hvilket det ikke er), bør du ikke overveje mange andre sprog, der bruges til at lave programmer. Desuden bør du ved denne regel på tre ikke overveje, at der er noget programmeringssprog undtagen selve maskinsproget.
Og hvorfor ikke? Ikke engang maskinsprog kan betragtes som et sprog, da det egentlig bare er et sæt kommandoer, der "fortolkes" af processoren.
Fordi effektivt er ALLE sprog intet andet end et sæt kommandoer, der fortolkes af en processor.
Du kan måske lide et sprog mere eller mindre (Java, i dette tilfælde), synes mere eller mindre nyttigt og kraftfuldt, men at sige, at det ikke er et programmeringssprog, fordi det ikke er kompileret ... det strider mod alle definitioner af programmeringssprog.
Hope Jeg håber, jeg ikke virkede for uhøflig
ingen stille, du ødelagde kun vores liv
hahahahaha, perdoooon. det var ikke min hensigt xD
java er et programmeringssprog. Fordi du kan udvikle en applikation, og når du kompilerer, laver du en .jar, der fortolkes af JVM. Derefter fortolkes den ifølge din pythonlogik heller ikke, men den kompileres til forskellige eksekverbare filer ...
Meget god information
god information, men jeg er i tvivl om, at det vil være muligt at oprette et nyt programmeringssprog fra bunden uden at skulle stole på andre analogier eller software. Jeg taler på samme måde som andre sprog blev lavet som java eller HTML.
Jeg vil meget sætte pris på din hjælp til dette spørgsmål.