Предпочтительнее ли предоставить библиотеку C для Elixir / Erlang, или реализовать в Erlang/Elixir? [закрытый]
Мой фон в Perl / Python / node и немного Ruby. Я никогда раньше не использовал языки виртуальных машин BEAM.
В Perl / Python / Node / Ruby, если бы я хотел обрабатывать задачи "более низкого уровня" - интенсивные вычисления, нуждающиеся в доступе к потокам или, более часто, обертывание библиотеки C-я бы написал что-то в C. Elixir/Erlang, очевидно, имеет большой параллелизм в виде процессов Erlang и очень низкую задержку, устраняя большую часть этой потребности.
Так что если бы у меня была библиотека C, это было бы предпочтительнее сделать обертку эликсира / Эрланга или просто переработать функциональность?
Очень конкретный пример: использует ли TLS Elixir / Erlang OpenSSL или он реализован на языке BEAM?
1 ответ:
Обычный способ реализации вещей в Эрланге-это сначала реализовать их в Эрланге,а затем измерить. Если он не работает хорошо, сначала поищите улучшения в Эрланге. Если он все еще недостаточно хорош, перепишите горячие части в C. Вы можете использовать порты как более безопасный способ или NIFs, если передача данных убьет его. Логика заключается в том, что Erlang (или Elixir) обеспечивают отличную среду для написания простого и безопасного кода. Он обеспечивает отличную обработку исключений и поддержку для надежность. Вы можете рассматривать Erlang как доменный язык для написания серверной службы и контейнера для обработки параллельных задач и распределения нагрузки на процессоры и выполнения высокоэффективных небольших фрагментов кода на другом языке. Чем меньше кода Вы должны реализовать на другом языке, чем Erlang / Elixir, тем лучше.
Если вы думаете об обработке двоичного протокола как о низкоуровневом, определенно попробуйте реализовать его в Erlang, потому что синтаксис битовой манипуляции в Erlang-это просто удивительный.
И да, TLS в основном пишется на Erlang (key handling, IO, ...) с критическими частями производительности в C (хэш-и крипто-алгоритмы).
Один из очень хороших советов: всегда измеряйте, не ожидайте. Вы даже можете увидеть нетривиальное решение, которое работает лучше, реализованное в чистом Erlang, чем в C++. См. Сравнение Cpp И Erlang Для Программного Обеспечения Motorola Telecoms .
Comments