PDF download Pdf downloaden PDF download Pdf downloaden

Veel mensen hebben problemen of frustraties met de programmeertalen die ze elke dag gebruiken. Sommige willen dat dingen meer abstract worden afgehandeld, terwijl anderen een hekel hebben aan de implementatie van functies die 'standaard' zouden moeten zijn. Of je nu een IT-professional bent of gewoon een hobbyist, vaak zou je wel wensen dat je een nieuwe programmeertaal zou kunnen maken.

  1. Je kunt geen programmeertaal ontwikkelen als je niet weet hoe je een computer moet gebruiken.
  2. Schrijvers van compilers gebruiken vaak onbekende terminologie. Lees meer over compilers voordat je verdergaat. Zorg ervoor dat je alles weet wat je moet weten.
  3. Is het probleem dat de taal gaat aanpakken domein-specifiek, of dient de taal geschikt te zijn voor allerlei toepassingen?
    • Is direct pointer-toegang mogelijk of niet?
    • Wat zijn de gegevenstypen van je taal?
    • Is het een statische of dynamische taal?
    • Wat is je geheugenmodel? Gebruik je een garbage-collector of handmatig geheugenbeheer? (Als je een garbage-collector gebruikt, houd er dan rekening mee dat je er een zult moeten schrijven of een bestaande aan moet passen aan je programmeertaal.)
    • Hoe ga je concurrency afhandelen? Gebruik je een eenvoudig threading/locking-model of iets dat meer complex is, zoals Linda of het 'actor'-model? (Omdat computers tegenwoordige meerdere processoren hebben.)
    • Zijn er eenvoudige functies in de taal ingebouwd of komt alles uit een bibliotheek?
    • Wat is het paradigma of wat zijn de paradigma's van je programmeertaal? Functioneel? Object-georiënteerd? Prototype (zoals JavaScript)? Aspect-georiënteerd? Sjabloon-georiënteerd? Of iets volledig nieuws?
    • Hoe communiceert je taal met bestaande bibliotheken en talen (voornamelijk C)? Dit punt is belangrijk als je een domein-specifieke taal ontwikkelt.
    • Uiteindelijk zullen sommige van deze vragen worden beantwoord in de tweede stap en je je om de volgende stap te beantwoorden.
  4. Bijvoorbeeld: een robot een bepaald traject laten volgen, of het ontwikkelen van relatief portable desktopprogramma's, of webapplicaties.
    • Zorg dat je je taal binnen de context-onafhankelijke taalcategorie houdt, of iets wat daarbinnen valt. Je parser-generator en jij zullen je er uiteindelijk dankbaar voor zijn.
  5. Dit houdt in dat bij een geïnterpreteerd programma de gebruiker een programma zal bewerken in een editor, om dit vervolgens direct vanuit de interpreter te draaien; dient het programma gecompileerd te worden, dan zal de gebruiker het programma schrijven in een editor, het compileren, de resulterende executable ergens opslaan en het daarna draaien.
    • Denk er ook over na hoe je compiler/interpreter gebruikers gaat waarschuwen over fouten in programma's en syntax-fouten.
  6. Laat de parser AST maken en creëer je objectcode vanuit de AST met behulp van 'three address code' of diens grotere broer SSA, en maak vervolgens een symbooltabel voor het definiëren van je functies, globale variabelen, etc.
    • Afhankelijk van je taal wil je wellicht ook virtual pointer-tabellen maken of gegevenstabellen voor je klassen (ter ondersteuning van reflectie of RTTI).
    • Schrijf vooral programma's die de formele grammatica van je taal uitdagen, om er zeker van te zijn dat je compiler alles accepteert wat binnen je definitie valt, en alles afwijst dat erbuiten valt.
  7. Samen met een garbage-collector of andere runtime-functies, als je die nodig hebt.
    • Vooral als je een compiler schrijft, heb je de code nodig die het besturingssysteem uitvoert, om de gebruikerscode te kunnen draaien (bijv.: het toewijzen van alle globale variabelen).
    • Vergeet de documentatie niet voor het integreren met bestaande bibliotheken, talen en hoe de runtime-functies en/of de standaardbibliotheek gebruikt kunnen worden.
    Advertentie

Tips

  • Beginnen met het ontwerpen van je taal zonder het schrijven van code, totdat je tevreden bent en alle (of de meeste) van de vragen of problemen heb beantwoord in verband met je ontwerp, want het is gemakkelijker om het ontwerp in een vroeg stadium te veranderen, dan in een later stadium.
  • Ken je doelplatform (besturingssysteem en bibliotheken) voor je compiler/interpreter, want die ga je gebruiken en manipuleren.
Advertentie

Waarschuwingen

  • Vraag je af of je echt behoefte hebt aan een nieuwe taal, en wat jouw taal dan wel nieuw heeft dat andere talen niet hebben (het kan een combinatie zijn van functies of een enkele functie).
  • Je zult tijd moeten besteden aan taalontwerp, want je hebt niet de mogelijkheid om je taal te wijzigen nadat je de compiler heb geschreven en voorbij de ontwerpfase bent.
  • Het schrijven van een programmeertaal is moeilijk als je niet weet wat je doet. Het vergt ook veel oefening.
  • Probeer geen samenraapsel te maken van functies van verschillende talen, zoals een taal als combinatie van taal X, Y en Z. De geschiedenis leert ons dat talen die op een dergelijke wijze zijn gemaakt nooit een succes worden, want anders zou iedereen wel in PL/1 programmeren in plaats van iets op basis van C.
Advertentie

Benodigdheden

  • Geduld.
  • Kennis van taalfuncties en taalontwerp (Lees eventueel Programming Language Design Concepts van David A. Watt).
  • Kennis over compilertheorie (omdat je een compiler/interpreter voor je taal gaat schrijven en je implementatie de referentie-implementatie zal zijn).
  • Nuttige toepassingen voor je taal (weet dat enkele van de meest gebruikte talen, zoals C of Lisp, werden gemaakt om iets specifieks te doen, zoals het creëren van Unix of het doen van symbolische berekeningen).

Over dit artikel

Deze pagina is 1.664 keer bekeken.

Was dit artikel nuttig?

Advertentie