Het is niet zo vanzelfsprekend hoor... Voordat je nog maar begint te programmeren aan je compiler of (makkelijker) interpreter, moet je toch heel wat dingen overpeinzen...
1) Ga je een weakly typed (zoals python, javascript) of strong typed (Java, C(++)) programmeertaal maken?
2) Welke types worden vooraf ingebouwd? Kunnen die naar elkaar geconverteerd worden? Wat gebeurt er bij een foute conversie?
3) Kan je wiskundige operaties op een type uitvoeren? Hoe wordt dit genoteerd, welke operators zijn er?
4) Zijn er functies? Hoe worden functies genoteerd? Kunnen die parameters krijgen? Hoe wordt dat weer genoteerd? Kunnen ze geen, één, of meerdere dingen retourneren, notatie? Worden types per kopie of per referentie doorgegeven, of kan de gebruiker kiezen (notatie!) ?
5) Zijn er klassen? Hoe worden deze genoteerd? Is er overerving (+notatie)? Zijn er public/private/protected entries? Hoe worden die beschermd (compiler controleert, name mangling, ...)? Notatie?
6) Is er multiple inheritance? Notatie? Hoe ga je het 'diamantprobleem' aanpakken?
7) Zijn er abstracte klassen? Notatie? Kan je een klasse benaderen door een verwijzing naar zijn subtype? Hoe ga je dit soort aanroepen oplossen? Kan een klasse zijn supertype weten? etc...
8) Zijn operator overloads mogelijk? Notatie? Kan men operators toevoegen? Notatie?
9) Zijn er templates? Ga je jezelf van kant maken? Hoe noteer je dat allemaal?
10) Welke keywords wil je reserveren? Kunnen die keywords afhankelijk van hun context iets anders betekenen, of zelfs geen keyword meer zijn? En hoe noteer je ze? Waar zet je ze?
Als je dat allemaal overpiekert hebt, en je hebt nog steeds zin om je programmeertaal te maken, wordt het tijd om aan een interpreter of een compiler te werken. Voor- en nadelen:
Interpreter:
+ Snel te schrijven
+ Kan eenvoudig cross-platform gemaakt worden
- Traag
- Programma is niet 'native'
Compiler:
+ Programma is native
+ Na één compilatie kan je gewoon de binary draaien aan de gewone snelheid
- Ooh nee, je moet alles naar assemblerinstructies omzetten!
- En assembler is niet cross-platform
Goed, je leest nog steeds, dus nu heb je een compiler of interpreter, een taal, dus we zijn klaar en die boel uploa... wacht, je kan nog niets met de taal. Je wilt ook nog een standaardbibliotheek. Nu kan je meteen testen of je taal goed is, plus, het roept een hoop nieuwe vragen op...
1) Ga je besturingssysteem-specifieke dingen in je stdlib zetten? Hoe ga je dat doen?
2) Ga je stukken uit de C-bibliotheek nodig hebben? Hoe ga je jouw taal met C linken? Is daar een extra stuk grammatica voor nodig?
3) Hoe ga je detecteren op welk OS je zit van uit de taal?
4) etc...
Goed, je hebt een taal, een compiler/interpreter, én een standaardbibliotheek. En als je dit allemaal zelf hebt gedaan, proficiat, en scheer die grijze baard eens af voordat je versie 0.0.1 gaat uploaden :P
- SeySayux