Hacker News new | ask | show | jobs
by gus_massa 1027 days ago
Sorry if I got the syntax wrong, but in something like

  f = {
     x = (list 1 2 3)
     y = (list x x)
     z = (get x 1)
     <- y
  }
How does the compiler decides if it must free the memory used by x?
3 comments

All lists are passed by value and X isn't the return value, would be my guess
It's an interpreter rather than a compiler, and looking at the code it seems to use ref counting
Ref counting makes a lot of sense with the description of the OP, and if there are no cycles it's good.
It should. Everything is copied and by-value, there are no references/pointers or even closures, cycles are impossible. Think Pascal that has garbage collection for strings and dynamic arrays.