Let's discuss the following situation: chat server, written in erlang should properly work, being distributed on several computers. At least on of its components must be globally registered: it is resolver, that can tell pid of exact chat room by its name.
Issue on trapexit: A Framework for Clustering Generic Server Instances give us some good information about solution of this problem. I will repeat main points of that article:
Формат файлов mp4, он же QuickTime format в девичестве, он же после доработок ISO Media (ISO/IEC 14496-14) представляет из себя контейнерный формат для упаковки аудио, видео, текста и т.п. Поскольку сам по себе формат является достаточно обобщённым, то хранить в нём можно как всегда что угодно, так что вопрос не в его синтаксической интерпретации (она простая), а в его семантической интерпретации.
В эрланге есть такая синтаксическая форма как записи. Это ни в коем случае не семантическая структура, а просто syntax sugar.
-record(article, {
id,
user_id = 0,
body = <<>>,
published = false
}).
Хочу немного прояснить как они используются и что это вообще такое для тех, кто ещё только начинает знакомиться с эрлангом.
В erlyvideo есть одно неприятное место: в конфиге можно указать несколько виртуальных хостов и каждому из них будет соответствовать собственный сервер, хранящий ссылки на видеопотоки. Супервизор каждого сервера надо именовать, причём атомом, например для хоста default супервизор будет называться media_provider_sup_default. Генерация такого названия достаточно неприятно выглядит:
Name = binary_to_atom(<<"media_provider_sup_",
(atom_to_binary(Host, latin1))/binary>>, latin1).
Технические проблемы на этом заканчиваются, но мне захотелось попробовать, как сделать автокомпилирующийся
на каждой реконфигурации модуль, в котором все vhost-ы забиты в клозы функций. Такой трюк может понадобиться например если такое преобразование происходит очень часто.
В случае со склейкой строк, на каждом вызове функции будет создаваться два бинари. Если же скомпилировать это в модуль, получится многократно быстрее, потому
что не будет никаких лишних выделений памяти. Сделать это оказалось несложно: