February 2010

Erlang records

(2010-02-23)

В эрланге есть такая синтаксическая форма как записи. Это ни в коем случае не семантическая структура, а просто syntax sugar.


-record(article, {
  id,
  user_id = 0,
  body = <<>>,
  published = false
}).

Хочу немного прояснить как они используются и что это вообще такое для тех, кто ещё только начинает знакомиться с эрлангом.


Читаем дальше

Erlang modules on fly

(2010-02-03)

В erlyvideo есть одно неприятное место: в конфиге можно указать несколько виртуальных хостов и каждому из них будет соответствовать собственный сервер, хранящий ссылки на видеопотоки. Супервизор каждого сервера надо именовать, причём атомом, например для хоста default супервизор будет называться media_provider_sup_default. Генерация такого названия достаточно неприятно выглядит:


Name = binary_to_atom(<<"media_provider_sup_", 
                      (atom_to_binary(Host, latin1))/binary>>, latin1).

Технические проблемы на этом заканчиваются, но мне захотелось попробовать, как сделать автокомпилирующийся
на каждой реконфигурации модуль, в котором все vhost-ы забиты в клозы функций. Такой трюк может понадобиться например если такое преобразование происходит очень часто.
В случае со склейкой строк, на каждом вызове функции будет создаваться два бинари. Если же скомпилировать это в модуль, получится многократно быстрее, потому
что не будет никаких лишних выделений памяти. Сделать это оказалось несложно:


Читаем дальше

Sidebar