One of the most interesting design challenges in a programming language interpreter or VM is what kind of memory management API to offer to native extensions.
This issue is more or less invisible unless you’re writing a native extension. When you are simply writing a program in Ruby, Python, Lua, etc., you don’t usually care how the memory management is implemented.