curry gotcha
[cc1516.git] / ontwerpbesluiten.txt
index 225ac74..3711dc8 100644 (file)
@@ -15,4 +15,29 @@ praktisch onmogelijke met type inteference
 
 ---
 Functies kunnen voor correct typechecken alleen functies gebruiken die DAARNA 
-gedefinieerd zijn
\ No newline at end of file
+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, plek erna is aantal gegeven argumenten, 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.
+