We have multiple choices:
- Allow user to manage memory manually (like C/C++)
- Let runtime manage memory automatically (e.g. garbage collection (GC) or automatic reference counting (ARC))
- Let compiler optimise memory usage via linear type or linear logic (like Rust).