Ответ 1
-
Изучение стандартной документации
Как только вы узнаете, как организована документация OTP, становится намного проще найти то, что вы ищете (вам, как правило, нужно узнать, какие приложения предоставляют модули или типы модулей).
Также просто просмотр документации для приложений часто весьма полезен - я нашел много действительно полезного кода таким образом -
sys
,dbg
,toolbar
и т.д. -
Разница между оболочкой erlang и модулем erlang
Shell erlang - немного другой диалект для модуля erlang. Вы не можете определять функции модуля (только забавы), вам нужно загрузить определения записи для работы с записями (
rr/1
) и так далее. Обучение написанию кода erlang с точки зрения анонимных функций несколько сложно, но важно для работы с производственными системами с удаленной оболочкой.Изучение взаимодействия между оболочкой и процессами {start, spawn} _link ed - при запуске какого-либо кода оболочки, который выходит из строя (вызывает исключение), процесс оболочки завершается и будет передавать сигналы выхода на все, с чем вы связаны. Это, в свою очередь, отключит этот новый gen_server, над которым вы работаете. ( "Почему мой серверный процесс продолжает исчезать?" )
-
Разница между выражениями erlang и защитными выражениями
Защитные выражения (когда предложения) не являются выражениями 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
) - я не могу подсчитать, сколько раз я сталкивался с ошибками функции undefined, которые, как оказалось, я забыл добавить каталог ebin в путь поиска кода. -
Создание кода erlang
Разработка полезной комбинации emake (
make:all/0
иerl -make
), и gnu make занял довольно много времени (примерно три года:).Мои текущие любимые make файлы можно увидеть на http://github.com/archaelus/esmtp/tree/master
-
Распределение Эрланга
Получение node имен, dns, cookies и всего остального, чтобы иметь возможность
net_adm:ping/1
другого node. Это требует практики. -
Удаленные оболочки IO intricacies
Вспоминая о прохождении
group_leader()
вio:format
, вызовы выполняются на удаленном node, так что вывод появляется в вашей оболочке, а не таинственно исчезает (я думаю, что браузер отчетов SASLrb
все еще имеет проблемы с отправкой некоторых его вывода на неправильный node при использовании в удаленном соединении с оболочкой)