Opret dit eget programmeringssprog (I)

Udviklingen af ā€‹ā€‹programmeringssprog

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 Det er et programmeringssprog, der er fokuseret pĆ„ eksekveringssikkerhed, sĆ„ brug af det vil vƦre praktisk umuligt for nogen at lukke den virtuelle maskine. Det er et kompileret sprog i udvikling skabt af Mozilla. Servo, erstatningen for Gecko, udvikler sig i ham. Du kan stadig Ʀndre din syntaks, men den kode, jeg vil bruge, bevares indtil den fĆørste stabile udgivelse.

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.


17 kommentarer, lad dine

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ɓngel GatĆ³n
  2. FormƄlet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrƦnse, gendanne og slette dine oplysninger.

  1.   roader sagde han

    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.

    1.    roader sagde han

      Og fra fortran brugte jeg det aldrig, men jeg har ikke hĆørt meget godt om det ...

      1.    forfƦrdelig sagde han

        Det gĆør jeg, og det er isƦr nyttigt inden for teknik, selvom Python vinder terrƦn.

      2.    John sagde han

        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.

    2.    Francisco sagde han

      +1 til Java

  2.   portĆør sagde han

    Lad os se, om jeg kan lide dette, jeg giver noget til programmering, men grundlƦggende for at se, om jeg forstƄr mere.

  3.   brugernulinux sagde han

    Hvad er det egentlige formƄl med at skabe et nyt programmeringssprog? Det forekommer mig personligt, at det er et trick at skjule kildekoden.

  4.   Yeilly sagde han

    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.

  5.   Cristian David sagde han

    Meget interessant, mange tak. šŸ™‚

  6.   Franco sagde han

    Jeg betragter ikke java som et programmeringssprog, snarere som en kommandotolk, da det ikke kan kompileres

    1.    Mario sagde han

      [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.

    2.    Mario sagde han

      Hope Jeg hĆ„ber, jeg ikke virkede for uhĆøflig

      1.    Maria Antoinette af Manuela Cardenas sagde han

        ingen stille, du Ćødelagde kun vores liv

      2.    Mario sagde han

        hahahahaha, perdoooon. det var ikke min hensigt xD

    3.    carlos sagde han

      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 ...

  7.   Elijah Mongelos sagde han

    Meget god information

  8.   Carlos Arturo sagde han

    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.