X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=ontwerpbesluiten.txt;h=71e02c27a1df2ca6c1ff117941ced300cf126142;hb=978dc486bf8c83cf9cad0925e3128574639656e0;hp=4c245aa2e9b450e781518ce2fe4d60274f97fce6;hpb=abc26b416e14657ae919aaf9e7940847fc0b5bf9;p=cc1516.git diff --git a/ontwerpbesluiten.txt b/ontwerpbesluiten.txt index 4c245aa..71e02c2 100644 --- a/ontwerpbesluiten.txt +++ b/ontwerpbesluiten.txt @@ -4,4 +4,40 @@ Waarom? Mooiere puurdere lambda-calculus. Is chill straks met hogere orde functies (denken we) Staat mooie shizzle zoals in Haskell toe (f :: a -> a, g :: a -> a, f = g) Simpeler om te parsen -Con: wellicht kut met code generatie, wie weet. \ No newline at end of file +Con: wellicht kut met code generatie, wie weet. + +--- +Functies en variabelen delen 1 namespace. +Dat is met het oog op hogere orde functies, dan kan een parameter voor een functie een andere +functie zijn, of een variabele en als die 2 aparte namespaces hebben is dat moeilijk onduidelijk / +praktisch onmogelijke met type inteference + + +--- +Functies kunnen voor correct typechecken alleen functies gebruiken die DAARNA +gedefinieerd zijn + +— + +Globaal gedefinieerde dingen worden als constanten beschouwd. Enkel in functies gedefinieerde vars zijn mutable. Twee redenen: 1 we behouden onze programmeurs voor het gebruik van globale state, want dat is de wortel van het kwaad. Daarnaast past het goed bij dat _alles_ op top level een functie is. Als je zegt i = next x; en x wijzigt tussendoor en je checkt dan weer i dan wordt i opnieuw geevalueerd en dat levert dan dus een andere waarde op, en dat wil je niet. + + +— mbt code generation +—- +Globals zijn bestaan niet, ondingen. Lokale variabelen komen gewoon op de stack +te staan in volgorde van declaratie. + +Int, Char, Bool worden gewoon normaal opgeslagen met hun waarde +Tuple wordt opgeslagen dmv twee pointers naar de heap +List wordt opgeslagen dmv een pointer, als die 0 is dan is het het einde. Als + het een plek op de heap is dan wijst die plek naar de waarde, de volgende + plek wijst dan naar de tail. +Incomplete functies sla je op dmv heap pointer, plek van de pointer is het + functieadres, plekken erna zijn de argumenten. Dit is poor-mans higher + order functions. Als we het pro willen doen is dat niet in de scope van het + project.(closure, lambda's nodig etc) + +Functies callen gebeurt door eerst de oude frame pointer op de stack te duwen, +dan omgekeert de argumenten van de functie. Bij afbraak herstel je gewoon de +stack pointer naar de waarde onder het laatste argument. +