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.