我的背景是Perl/Python/node和一点点Ruby。我以前没有使用过BEAM VM语言。
在Perl/Python/Node/Ruby中,如果我想处理"低级"任务——密集的计算,需要访问线程,或者更常见的,包装一个C库——我会用C写一些东西。Elixir/Erlang显然以Erlang进程的形式具有很强的并行性和非常低的延迟,消除了很多这种需要。
所以如果我有一个C库,是最好做一个Elixir/Erlang包装器还是只是重新实现功能?
一个非常具体的例子:Elixir/Erlang的TLS使用OpenSSL,还是在BEAM语言中实现?在Erlang中实现事物的通常方法是先在Erlang中实现它,然后度量它。如果它不能很好地执行,请首先在Erlang中寻找改进。如果它仍然不够好,用c重写热点部分。如果数据传输会杀死它,您可以使用端口作为更安全的方式或nif。其背后的原理是Erlang(或者Elixir)为编写简单、安全的代码提供了一个很好的环境。它提供了出色的异常处理和可靠性支持。您可以将Erlang视为编写服务器服务和容器的特定领域语言,用于处理并发任务和将负载分配给cpu,并以另一种语言的高性能小块代码执行。比起Erlang/Elixir,用其他语言实现的代码越少越好。
如果你认为二进制协议处理是低级的,一定要尝试在Erlang中实现它,因为Erlang中的位操作语法非常惊人。
是的,TLS主要是用Erlang编写的(密钥处理,IO,…),性能关键部分用C编写(哈希和加密算法)。
一个很好的建议是:总是衡量,不要期望。您甚至可以看到一个重要的解决方案,它在纯Erlang中实现的性能比在c++中实现的要好。参见摩托罗拉电信软件Cpp和Erlang的比较