Erlang - динамический язык. Однако рекомендуется выполнять проверку типов и статический анализ после компиляции .
Инструмент Диализатор используется для проверки ошибок такого рода.
Причина, по которой компилятор не знает об этом во время компиляции, заключается в том, что функции можно искать и динамически загружать по пути кода во время выполнения (а также с удаленного узла). Dialyzer будет проверять код по пути кода во время его запуска.
Возможность загружать код с удаленного узла означает, что базовые «системы» могут быть установлены на устройстве, а затем устройство может загружать себя из сети.
Вы также должны помнить другую характеристику Erlang, что вы можете генерировать вызовы функций на лету , используя такие конструкции, как:
erlang:apply(ModuleName, FunctionName, ArgList)
так что в этом случае просто невозможно узнать, существует ли функция во время компиляции или нет.
И хотя модуль и функция могут существовать сейчас во время компиляции, вы можете выполнять горячую замену модулей и выгружать код, поэтому его может не быть во время выполнения.