Описание тега erlang-nif
NIF были введены в Erlang/OTP R13B03 в качестве экспериментальной функции. Это более простой и эффективный способ вызова C-кода, чем использование драйверов портов. NIF наиболее подходят для синхронных функций, которые выполняют некоторые относительно короткие вычисления без побочных эффектов и возвращают результат. Хотя в последних версиях появилась зрелая функция, получившая широкое распространение. Современный NIF API позволяет выполнять широкий спектр задач, включая создание потоков, выполнение операций ввода-вывода и выполнение длительной работы с использованием экспериментальных (R18-19) грязных планировщиков. NIF стали предпочтительным выбором для интеграции внешнего кода в дистрибутив Erlang/OTP (двоичный, карты, ssl).
NIF - это функция, реализованная на C вместо Erlang. NIF выглядят для вызывающих абонентов как любые другие функции. Они принадлежат модулю и вызываются как любые другие функции Erlang. NIF модуля скомпилированы и связаны в динамически загружаемую общую библиотеку (SO в UNIX, DLL в Windows). Библиотека NIF должна быть загружена во время выполнения с помощью кода Erlang модуля.
Поскольку библиотека NIF динамически связана с процессом эмулятора, это самый быстрый способ вызова C-кода из Erlang (наряду с драйверами портов). Вызов NIF не требует переключения контекста. Но это также наименее безопасно, потому что сбой в NIF также приводит к отключению эмулятора.