[erlang-questions] Could NIFs keep pointers to Erlang terms without copying them?
Wed Feb 8 00:41:02 CET 2017
If NIFs want to keep an erlang term around, they currently have to copy
them to their own, process-independent environment, using enif_make_copy.
That can be a pretty big performance issue if dabbling with big terms:
imagine for example a NIF storing a complicated data structure, e.g. a
gb_tree; now say we want to keep adding/deleting items from that gb_tree in
our erlang code: we now have to copy the entire thing back and forth.
How hard/conceivable would it be to give NIFs a way to keep a pointer to an
erlang term that they could pass back and forth with the process'
environments without having to copy everything?
I imagine that would mean that it would be the NIF's programmer
- ensure that they never keep a pointer to an erlang term that's no
longer referenced in erlang land (and hence is going to get garbage
- ensure thread-safety
But the erlang VM would still have to somehow let the NIF know when an
erlang term it has a pointer to has been moved somewhere else.
Is that something that could maybe, in theory, be possible to add to the
Thanks a lot,
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the erlang-questions