Учимся просматривать стандартную документацию
Как только вы узнаете, как организована документация по OTP, вам будет намного легче найти то, что вы ищете (вам, как правило, нужно узнать, какие приложения предоставляют какие модули или типы модулей).
Также простой просмотр документации для приложений часто весьма полезен - я обнаружил множество действительно полезного кода таким образом - sys
, dbg
, toolbar
и т. Д.
Разница между оболочкой erlang и модулем erlang
Shell erlang - это немного другой диалект, чем модуль erlang. Вы не можете определить функции модуля (только приколы), вам нужно загрузить определения записей для работы с записями (rr/1
) и так далее. Научиться писать erlang-код в терминах анонимных функций довольно сложно, но важно для работы в производственных системах с удаленной оболочкой.
Изучение взаимодействия между оболочкой и процессами {start, spawn} _link ed - когда вы запускаете некоторый код оболочки, который аварийно завершает работу (вызывает исключение), процесс оболочки завершается и передает сигналы выхода на все, с чем вы связаны. Это, в свою очередь, отключит тот новый gen_server, над которым вы работаете. ( «Почему мой серверный процесс продолжает исчезать?» )
Разница между выражениями erlang и защитными выражениями
Защитные выражения (когда выражения) не являются выражениями Эрланга. Они могут выглядеть похожими, но они совершенно разные. Защитники не могут вызывать произвольные функции erlang, только функции защиты (length/1
, тесты типов, element/2
и некоторые другие, указанные в документации OTP). Охранники преуспевают или терпят неудачу и не имеют побочных эффектов. С другой стороны, выражения Erlang могут делать то, что им нравится.
Загрузка кода
Определение того, когда и как работают обновления кода, - заклинание заставить gen_server обновиться до последней версии модуля обратного вызова (code:load(Mod), sys:suspend(Pid), sys:change_code(Pid, Mod, undefined, undefined), sys:resume(Pid).
).
Путь к серверу кода (code:get_path/0
) - я не могу сосчитать, сколько раз я сталкивался с неопределенными ошибками функций, которые, как оказалось, были забыты мной при добавлении каталога ebin в путь поиска кода.
Код здания erlang
Разработка полезной комбинации emake (make:all/0
и erl -make
) и gnu make заняла довольно много времени (около трех лет:).
Мои текущие любимые make-файлы можно увидеть на http://github.com/archaelus/esmtp/tree/master
Распределение Эрланга
Получение имен узлов, днс, куки и всего остального в порядке, чтобы иметь возможность net_adm:ping/1
другого узла. Это требует практики.
Сложности ввода-вывода удаленной оболочки
Не забывая передавать group_leader()
на io:format
вызовы, выполняемые на удаленном узле, так что вывод появляется в вашей оболочке, а не таинственно исчезает ( Я думаю, что в браузере отчетов SASL rb
все еще есть проблема с отправкой часть его вывода на неправильный узел при использовании через соединение с удаленной оболочкой )