Я хотел создать структуру данных связанного списка, которая была реализована в C. Идея заключалась в том, что можно было бы создать связанный список
ll:new() -> listId.
ListId, приведенный выше, представляет «указатель» некоторого типа, который будет возвращен в код C, который будет функционировать как некоторый тип дескриптора в списке. Я надеялся, что мне не придется передавать сам список взад и вперед, поскольку я представлял, что списки могут стать очень, очень большими. После создания связанного списка пользователи будут взаимодействовать с ним очевидными способами:
ll:add(ListId, Elt)
ll:add_after(ListId, Pos, Elt)
Я предполагал, что сделаю это с помощью возможностей Эрланга NIF. Теперь, чтобы это работало, сторона C должна вести список по нескольким вызовам add, add_after и т. Д.
В прямом C у меня была бы основная функция, с которой взаимодействует пользователь, которая поддержала бы программу, таким образом сохраняя связанный список, сохраняемый в течение жизни взаимодействия пользователя с программой. Насколько я понимаю, NIFs использует код на C без основной функции. То есть каждый вызов NIF - это одно и то же предложение.
Может кто-нибудь дать мне несколько советов о том, как (если это уместно) можно использовать NIF для взаимодействия с кодом C, которому необходимо сохранять состояние при нескольких вызовах? Я надеюсь, что это было ясно!