--- theme: dracula paginate: true _paginate: false footer: Topics in Compilers and Concurrency · Julius Fischer · 10.06.2026 _footer: "" style: | h1 { position: absolute; top: 60px; left: 75px; right: 75px; } --- # Destination Calculus: ## A Linear 𝜆-Calculus for Purely Functional Memory Writes ### Topics in Compiler and Concurrency #### Julius Fischer ###### 10. Juni 2026 --- # What are Destinations? - Destination Passing Style - Imperative - Function takes destination instead of returning structure --- # Example in C ``` int* vec_add(int v1[], int v2[], int size) { int* res = malloc(size * sizeof(int)); for (int i = 0; i < size; i++) { res[i] = v1[i] + v2[i]; } return res; } ``` - Add an 'out parameter' ``` void dps_vec_add(int res[], int v1[], int v2[], int size) { for (int i = 0; i < size; i++) { res[i] = v1[i] + v2[i]; } } ``` --- # Motivation for DPS - Typical functional map implementation ``` map f (x:xs) = (f x : map f xs1) > (f x : map f xs) > (map f x1 : (f x2 : map f xs2)) > ... ``` - Not tail recursive - Performance issue - Inefficient stack growth ``` map f (x:xs) dest = map f xs (push dest (f x)) > map f xs1 (push dest (f x1)) > map f xs2 (push dest (f x2)) ``` --- # DPS in functional languages - Just add pointers to mutable data? - $Int \mapsto Int \mapsto Int \mapsto \textcolor{red}{T}$ - $\textcolor{red}{T *}\mapsto Int \mapsto Int \mapsto Int \mapsto Void$ --- # Destination Calculus - It's --- # Referenes