Utvikle et programmeringsspråk

Mange har problemer eller frustrasjoner med programmeringsspråkene de bruker hver dag. Noen vil at ting skal håndteres mer abstrakt, mens andre hater implementeringen av funksjoner som bør være "standard". Enten du er en IT-profesjonell eller bare en hobbyist, ønsker du mange ganger at du kunne lage et nytt programmeringsspråk.

Trinn

Bilde med tittelen Lag et programmeringsspråk Trinn 1
1. Bli kjent med teknologien. Du kan ikke utvikle et programmeringsspråk hvis du ikke vet hvordan du bruker en datamaskin.
Bilde med tittelen Lag et programmeringsspråk Trinn 2
2. Gjør deg kjent med terminologien. Kompilatorforfattere bruker ofte ukjent terminologi. Les mer om kompilatorer før du fortsetter. Sørg for at du vet alt du trenger å vite.
Bilde med tittelen Lag et programmeringsspråk Trinn 3
3. Bestem hvilket problem språket ditt må løse. Er problemet at språket skal takle domenespesifikt, eller bør språket være egnet for alle typer applikasjoner?
Bilde med tittelen Lag et programmeringsspråk Trinn 4
4. Tenk på semantikken til språket ditt og dets konsepter.
  • Er direkte pekertilgang mulig eller ikke?
  • Hva er datatypene for språket ditt?
  • Er det et statisk eller dynamisk språk?
  • Hva er din minnemodell? Bruker du en søppeloppsamler eller manuell minnebehandling? (Hvis du bruker en søppeloppsamler, husk at du må skrive en eller tilpasse en eksisterende til ditt programmeringsspråk.)
  • Hvordan skal du håndtere samtidighet? Bruker du en enkel tråd-/låsemodell eller noe mer komplekst som Linda eller `skuespillermodellen`? (Fordi datamaskiner i dag har flere prosessorer.)
  • Er det enkle funksjoner innebygd i språket eller er alt fra et bibliotek?
  • Hva er paradigmet eller hva er paradigmene til programmeringsspråket ditt? Funksjonell? Objekt orientert? Prototype (som JavaScript)? Aspektorientert? Mal-orientert? Eller noe helt nytt?
  • Hvordan kommuniserer språket ditt med eksisterende biblioteker og språk (hovedsakelig C)? Dette punktet er viktig hvis du utvikler et domenespesifikt språk.
  • Til slutt vil noen av disse spørsmålene bli besvart i det andre trinnet, og du må svare på neste trinn.
    Bilde med tittelen Lag et programmeringsspråk Trinn 5
  • 5. Tenk på spesifikke oppgaver noen ønsker å kunne utføre med ditt språk. For eksempel: å la en robot følge en bestemt bane, eller utvikle relativt bærbare skrivebordsprogrammer eller nettapplikasjoner.
    Bilde med tittelen Lag et programmeringsspråk Trinn 6
    6. Eksperimenter med syntaksideer (teksten til språket) for eksemplene ovenfor.
    Sørg for å holde språket ditt innenfor den kontekstuavhengige språkkategorien, eller noe innenfor den. Din parsergenerator og du vil være takknemlig for den til slutt.
    Bilde med tittelen Lag et programmeringsspråk Trinn 7
    7. Skriv en formell grammatikk for syntaksen.
    Bilde med tittelen Lag et programmeringsspråk Trinn 8
    8. Bestem om du vil tolke eller kompilere språket. Dette betyr at med et tolket program vil brukeren redigere et program i en editor, og deretter kjøre det direkte fra tolken; skal programmet kompileres, vil brukeren skrive programmet i en editor, kompilere det, lagre den resulterende kjørbare filen et sted og deretter kjøre den.
    Bilde med tittelen Lag et programmeringsspråk Trinn 9
    9. Skriv front-end skanneren og parseren eller finn et verktøy som kan hjelpe deg med dette.
    Tenk også på hvordan du vil advare kompilator-/tolkebrukere om programfeil og syntaksfeil.
    Bilde med tittelen Lag et programmeringsspråk Trinn 10
    10. Bruk parserdataene til å skrive objektkoden, eller for en foreløpig representasjon. La parseren lage AST og lage objektkoden din fra AST ved å bruke `tre adressekode` eller dens større bror SSA, og lag deretter en symboltabell for å definere funksjonene dine, globale variabler osv.
    Avhengig av språket ditt, vil du kanskje også lage virtuelle pekertabeller eller datatabeller for klassene dine (for å støtte refleksjon eller RTTI).
    Bilde med tittelen Lag et programmeringsspråk Trinn 11
    11. Skriv eksekveren eller kodegeneratoren som setter alt sammen.
    Bilde med tittelen Lag et programmeringsspråk Trinn 12
    12. Skriv mange testprogrammer for å teste språket ditt.
    Fremfor alt, skriv programmer som utfordrer den formelle grammatikken til språket ditt for å sikre at kompilatoren din aksepterer alt som faller innenfor definisjonen din, og avviser alt som faller utenfor den.
    Bilde med tittelen Lag et programmeringsspråk Trinn 13
    1. 3. Vurder hvordan brukeren vil feilsøke sine egne programmer.
    Bilde med tittelen Lag et programmeringsspråk Trinn 14
    14. Hvis språket ditt bruker et standardbibliotek, må du skrive det. Sammen med en søppeloppsamler eller andre kjøretidsfunksjoner, hvis du trenger dem.
    Spesielt hvis du skriver en kompilator, trenger du koden som kjører operativsystemet for å kjøre brukerkoden (f.eks.: tilordne alle globale variabler).
    Bilde med tittelen Lag et programmeringsspråk Trinn 15
    15. Publiser språket ditt, sammen med spesifikasjonene og noen eksempler på hva du kan gjøre med det.
    Ikke glem dokumentasjonen for integrering med eksisterende biblioteker, språk og hvordan du bruker kjøretidsfunksjonene og/eller standardbiblioteket.

    Tips

    • Begynn å designe språket ditt uten å skrive noen kode, før du er fornøyd og har svart på alle (eller de fleste) spørsmålene eller problemene knyttet til designet ditt, da det er lettere å endre designet tidlig, deretter på et senere tidspunkt.
    • Kjenn målplattformen din (OS og biblioteker) for kompilatoren/tolken din, ettersom du vil bruke og manipulere dem.

    Advarsler

    • Spør deg selv om du virkelig trenger et nytt språk, og hva språket ditt har nytt som andre språk ikke gjør (det kan være en kombinasjon av funksjoner eller en enkelt funksjon).
    • Du må bruke tid på språkdesign siden du ikke vil ha muligheten til å endre språket ditt etter at du har skrevet kompilatoren og kommet deg forbi designstadiet.
    • Å skrive et programmeringsspråk er vanskelig hvis du ikke vet hva du gjør. Det krever også mye øvelse.
    • Ikke prøv å blande funksjoner til forskjellige språk, for eksempel et språk som en kombinasjon av språk X, Y og Z. Historien forteller oss at språk laget på denne måten aldri lykkes, ellers ville alle programmert i PL/1 i stedet for noe basert på C.

    Nødvendigheter

    • Tålmodighet.
    • Kunnskap om språkfunksjoner og språkdesign (evt. les Programming Language Design Concepts av David A. watt).
    • Kunnskap om kompilatorteori (fordi du skal skrive en kompilator/tolk for språket ditt og implementeringen din vil være referanseimplementeringen).
    • Nyttig bruk for språket ditt (vit at noen av de mest brukte språkene, som C eller Lisp, ble laget for å gjøre noe spesifikt, for eksempel å lage Unix eller gjøre symbolske beregninger).

    Оцените, пожалуйста статью