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.


Indholdet af artiklen overholder vores principper for redaktionel etik. Klik på for at rapportere en fejl her.

17 kommentarer, lad dine

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort.

*

*

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