是否最好将C库暴露给Elixir / Erlang,或者在Erlang / Elixir中实现?

时间:2015-09-12 16:08:10

标签: erlang elixir beam

我在Perl / Python /节点中的背景和一些Ruby。我之前没有使用过BEAM VM语言。

在Perl / Python / Node / Ruby中,如果我想处理'低级'任务 - 强烈的计算,需要访问线程,或者更常见的是,包装C库 - 我会用C. Elixir /写一些东西Erlang显然在Erlang进程和非常低的延迟方面具有很好的并行性,消除了大部分需求。

所以如果我有一个C库,最好是制作一个Elixir / Erlang包装器还是重新实现这个功能?

一个非常具体的例子:Elixir / Erlang的TLS是否使用OpenSSL,还是以BEAM语言实现?

1 个答案:

答案 0 :(得分:9)

在Erlang中实现事物的通常方法是首先在Erlang中实现它,然后测量它。如果它不能很好地运行,请首先在Erlang中寻找改进。如果它仍然不够好,请在C中重写热部分。如果数据传输会将其删除,则可以使用ports作为更安全的方式或NIFs。其背后的理由是Erlang(或Elixir)为编写简单,安全的代码提供了良好的环境。它提供了出色的异常处理和对可靠性的支持。您可以将Erlang视为用于编写服务器服务和容器的域特定语言,以处理并发任务并将负载分配给CPU,并以另一种语言的高性能小块代码执行。与Erlang / Elixir相比,用其他语言实现的代码越少越好。

如果你认为二进制协议处理是低级别的,那么一定要尝试在Erlang中实现它,因为Erlang中的位操作语法真是太棒了。

是的,TLS主要是用Erlang(密钥处理,IO,...)编写的,其中包含C(散列和加密算法)中的性能关键部分。

一个非常好的建议是:始终衡量,不要期待。你甚至可以看到一个非常重要的解决方案,它在纯Erlang中比在C ++中实现得更好。请参阅Comparing Cpp And Erlang For Motorola Telecoms Software