[erlang-questions] Could NIFs keep pointers to Erlang terms without copying them?

Jean Rougé rouge.j@REDACTED
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
responsibility to:

   - 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
current VM?

Thanks a lot,

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20170207/aa57bbe2/attachment.htm>

More information about the erlang-questions mailing list