



Är direkt pekaråtkomst möjlig eller inte? Vilka är datatyperna för ditt språk? Är det ett statiskt eller dynamiskt språk? Vad är din minnesmodell? Använder du en sopsamlare eller manuell minneshantering? (Om du använder en sophämtare, kom ihåg att du måste skriva en eller anpassa en befintlig till ditt programmeringsspråk.) Hur ska du hantera samtidighet? Använder du en enkel gängnings-/låsningsmodell eller något mer komplext som Linda eller skådespelaremodellen? (Eftersom datorer idag har flera processorer.) Finns det enkla funktioner inbyggda i språket eller är allt från ett bibliotek? Vad är paradigmet eller vilka är paradigmen för ditt programmeringsspråk? Funktionell? Objektorienterad? Prototyp (som JavaScript)? Aspektorienterad? Mall-orienterad? Eller något helt nytt? Hur kommunicerar ditt språk med befintliga bibliotek och språk (främst C)? Denna punkt är viktig om du utvecklar ett domänspecifikt språk. I slutändan kommer några av dessa frågor att besvaras i det andra steget och du måste svara på nästa steg.










Utveckla ett programmeringsspråk
Många människor har problem eller frustrationer med de programmeringsspråk de använder varje dag. Vissa gillar saker som hanteras mer abstrakt, medan andra hatar att implementera funktioner som borde vara "standard". Oavsett om du är en IT-proffs eller bara en hobbyist, önskar du många gånger att du kunde skapa ett nytt programmeringsspråk.
Steg

1. Bekanta dig med tekniken. Du kan inte utveckla ett programmeringsspråk om du inte vet hur man använder en dator.

2. Bekanta dig med terminologin. Kompilatorförfattare använder ofta obekant terminologi. Läs mer om kompilatorer innan du fortsätter. Se till att du vet allt du behöver veta.

3. Bestäm vilket problem ditt språk behöver lösa. Är problemet att språket ska hantera domänspecifikt, eller ska språket vara lämpligt för alla typer av applikationer?

4. Tänk på semantiken i ditt språk och dess begrepp.

5. Tänk på specifika uppgifter som någon skulle vilja kunna utföra med ditt språk. Till exempel: låta en robot följa en viss bana, eller utveckla relativt portabla skrivbordsprogram eller webbapplikationer.

6. Experimentera med syntaxidéer (språkets text) för exemplen ovan.
Se till att hålla ditt språk inom den kontextoberoende språkkategorin, eller något inom den. Din parsergenerator och du kommer att vara tacksamma för det i slutändan.

7. Skriv en formell grammatik för syntaxen.

8. Bestäm om du vill tolka eller sammanställa språket. Det betyder att med ett tolkat program kommer användaren att redigera ett program i en editor och sedan köra det direkt från tolken; om programmet kompileras kommer användaren att skriva programmet i en editor, kompilera det, spara den resulterande körbara filen någonstans och sedan köra den.

9. Skriv front-end scanner och parser eller hitta ett verktyg som kan hjälpa dig med detta.
Tänk också på hur du kommer att varna kompilator-/tolkanvändare om programfel och syntaxfel.

10. Använd parserdata för att skriva objektkoden, eller för en preliminär representation. Låt parsern skapa AST och skapa din objektkod från AST med hjälp av `tre adresskod` eller dess större bror SSA, skapa sedan en symboltabell för att definiera dina funktioner, globala variabler, etc.
Beroende på ditt språk kanske du också vill skapa virtuella pekartabeller eller datatabeller för dina klasser (för att stödja reflektion eller RTTI).

11. Skriv executorn eller kodgeneratorn som sätter ihop allt.

12. Skriv många testprogram för att testa ditt språk.
Framför allt, skriv program som utmanar den formella grammatiken i ditt språk för att se till att din kompilator accepterar allt som faller inom din definition och avvisar allt som faller utanför den.

13. Tänk på hur användaren kommer att felsöka sina egna program.

14. Om ditt språk använder ett standardbibliotek måste du skriva det. Tillsammans med en sophämtare eller andra runtime-funktioner, om du behöver dem.
Speciellt om du skriver en kompilator behöver du koden som kör operativsystemet för att köra användarkoden (t.ex.: tilldelar alla globala variabler).

15. Publicera ditt språk, tillsammans med dess specifikation och några exempel på vad du kan göra med det.
Glöm inte dokumentationen för att integrera med befintliga bibliotek, språk och hur man använder runtime-funktionerna och/eller standardbiblioteket.
Tips
- Börja designa ditt språk utan att skriva någon kod, tills du är nöjd och har svarat på alla (eller de flesta) frågor eller problem som är förknippade med din design, eftersom det är lättare att ändra designen tidigt, sedan i ett senare skede.
- Känn din målplattform (OS och bibliotek) för din kompilator/tolk, eftersom du kommer att använda och manipulera dem.
Varningar
- Fråga dig själv om du verkligen behöver ett nytt språk, och vad ditt språk har nytt som andra språk inte gör (det kan vara en kombination av funktioner eller en enda funktion).
- Du kommer att behöva lägga tid på språkdesign eftersom du inte kommer att ha möjlighet att ändra ditt språk efter att du skrivit kompilatorn och kommit förbi designstadiet.
- Att skriva ett programmeringsspråk är svårt om du inte vet vad du gör. Det krävs också mycket övning.
- Försök inte blanda funktioner för olika språk, till exempel ett språk som en kombination av språk X, Y och Z. Historien säger oss att språk som gjorts på detta sätt aldrig lyckas, annars skulle alla programmera i PL/1 istället för något baserat på C.
Förnödenheter
- Tålamod.
- Kunskaper om språkfunktioner och språkdesign (läs eventuellt Programming Language Design Concepts av David A. watt).
- Kunskap om kompilatorteori (eftersom du kommer att skriva en kompilator/tolk för ditt språk och din implementering kommer att vara referensimplementeringen).
- Användbara användningsområden för ditt språk (vet att några av de vanligaste språken, som C eller Lisp, skapades för att göra något specifikt, som att skapa Unix eller göra symboliska beräkningar).
"Utveckla ett programmeringsspråk"
Оцените, пожалуйста статью