В документации сказано, что
make_ref() -> ref()
Возвращает почти уникальную ссылку.
Возвращенная ссылка повторится примерно через 2 82вызовов; поэтому он достаточно уникален для практических целей.
Но мои глаза говорят мне, что между перезапусками ВМ я мог бы легко получить ту же самую ссылку:
[~] erl
Erlang R14B04 (erts-5.8.5)
1> make_ref().
#Ref<0.0.0.33>
2> make_ref().
#Ref<0.0.0.37>
^C
[~] erl
Erlang R14B04 (erts-5.8.5)
1> make_ref().
#Ref<0.0.0.33>
Итак, насколько уникальны ссылки Erlang? Подходят ли они для использования в качестве генератора уникальных «тегов», когда теги сохраняются в mq или db и могут генерироваться разными сеансами виртуальной машины.
Я знаю, что для этого можно использовать UUID. Также хорошо известно, что pids() являются повторяемыми, повторно используемыми и ни в коем случае не уникальными, если они сериализованы, а затем загружены из постоянного хранилища.
Вопрос в том, что такое refs() — больше похоже на UUID или больше на pids()? Являются ли refs() уникальными между узлами? Между перезапусками? Есть ли какая-либо официальная информация по этой теме?