Они используются для сборки релизов (с * .rel для генерации скриптов загрузки). Я рекомендую просто начать с файла * .app и обратного вызова поведения приложения. Что касается начала с OTP. Это приятное место в разработке:
-module(foo).
-export([start/0]).
start() ->
[application:start(A) || A <- [sasl, inets, x, y, etc]].
чтобы запустить все приложения, от которых вы зависите, с помощью простого
$ erl -s foo
- Если ваш проект будет использоваться в качестве службы или платформы для других проектов, еще одно преимущество заключается в том, что эти приложения Erlang могут, в свою очередь, зависеть от вашего приложения или включать его. Приложение Erlang - это модуль, в котором можно предоставлять сервисы и даже библиотеки (stdlib - это библиотека, никаких «движущихся частей», только библиотечные модули).
- Будучи приложением Erlang, вы получаете простой способ передачи параметров конфигурации в ваше приложение. Когда вы передаете
-mnesia dir '"/some/path"'
в erl, приложение mnesia обращается к нему как application:get_env(mnesia, dir)
. Если вы определяете приложение с именем foo
, вы можете передать -foo key 'some-Erlang-literal'
в erl. Файл * .app может содержать значения по умолчанию в разделе env
, файл * .rel переопределяет их, а командная строка переопределяет это.
- В файле * .app есть разделы, в которых вы перечисляете модули и зарегистрированные процессы, представленные вашим приложением. Это используется при сборке релизов, чтобы проверить, нет ли коллизий между приложениями.
Некоторые дополнительные функции приложений Erlang, которые я не очень хорошо знаю:
- Начальные фазы. Используется для приложений, имеющих сложные начальные потребности, такие как некоторое время «частичного запуска».
- Распределенные приложения. Используется для определения места запуска приложения в кластере.
- поглощения. Используется для освобождения компьютера из распределенного приложения, например, если оно нуждается в обслуживании или обновлении.
Со временем вы начнете хотеть запускать свой набор приложений более структурированным образом, и тогда весь релиз / загрузочный скрипт станет более понятным. Или наоборот, вы будете думать, что это излишне для ваших конкретных потребностей. Просто начните с простого * .app и модуля с обратными вызовами поведения приложения. Ты не оглянешься назад.