Изучение Эрланг? скорость головок, общие, небольшие проблемы

Я просто хочу знать все мелкие проблемы, которые возникли между вами и вашим окончательным решением, когда вы были новыми для Erlang.

Например, вот первые скорости, которые у меня были:

  • Используйте control_process (Socket, Pid), если вы создаете несколько потоков. Правый пакет в нужную нить.
  • Вы собираетесь начать разговор с другим сервером? Не забудьте net_adm: ping ('car @bsd-server'). в оболочке. Иначе связь не пройдет.
  • Таймер: sleep (10), если вы ничего не хотите делать. Всегда полезно при отладке.

Ответ 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, так что вывод появляется в вашей оболочке, а не таинственно исчезает (я думаю, что браузер отчетов SASL rb все еще имеет проблемы с отправкой некоторых его вывода на неправильный node при использовании в удаленном соединении с оболочкой)

Ответ 2

Интегрируя его в msvc 6, я мог бы использовать редактор и видеть результаты в окне вывода.

Я создал инструмент с

команда - путь к erlc

аргументы - + debug_info $(FileName) $(FileExt)

Начальная директория - $(fileDir)

Проверено Использовать окно вывода.

Ответ 3

  • Отладка сложна. Все, что я знаю, это вставлять вызовы в "error_logger: info_msg" в моем коде.
  • Документы были пятнистыми - они правильные, но очень очень короткие.
  • Это моя собственная ошибка, но: я начал кодирование, прежде чем понял eunit, поэтому мой код сложнее проверить, чем это должно быть.

Ответ 4

controlling_process()

Используйте control_process (Socket, Pid), если вы создаете несколько потоков. Правый пакет в нужную нить.

Ответ 5

net_adm: пинг()

Вы собираетесь начать разговор с другим сервером? Не забудьте net_adm: ping ('car @bsd-server'). в оболочке. Иначе связь не пройдет.

Ответ 6

Таймер: сон()

Пауза для X ms.

Ответ 7

То, что заняло у меня больше всего времени, чтобы разобраться, было всего лишь идеей структурирования моего кода полностью вокруг вызовов функций и передачи сообщений. Остальная часть либо просто выпала оттуда (нерест, удаленные узлы), либо ощущалась как обычный материал, который вам нужно изучить на любом новом языке (синтаксис, stdlib).