将 C 库公开给 Elixir/Erlang 还是在 Erlang/Elixir 中实施更可取?
Is it preferable to expose a C library to Elixir/Erlang, or to implement in Erlang/Elixir?
我的背景在 Perl/Python/node 和一些 Ruby。我以前没有使用过 BEAM VM 语言。
在 Perl/Python/Node/Ruby 中,如果我想处理 'lower level' 任务 - 密集计算、需要访问线程,或者更常见的是,包装 C 库 - 我会用 C 编写一些东西。 Elixir/Erlang 显然以 Erlang 进程的形式具有很好的并行性和非常低的延迟,消除了大部分需求。
那么如果我有一个 C 库,是制作一个 Elixir/Erlang 包装器还是重新实现功能更好?
一个非常具体的例子:Elixir/Erlang 的 TLS 使用 OpenSSL,还是用 BEAM 语言实现的?
在 Erlang 中实现事物的通常方法是先在 Erlang 中实现它,然后再对其进行测量。如果它表现不佳,请先在 Erlang 中寻求改进。如果它还不够好,用 C 重写热点部分。如果数据传输会杀死它,你可以使用 ports as a safer way or NIFs。背后的基本原理是 Erlang(或 Elixir)为编写简单、安全的代码提供了一个很好的环境。它提供了出色的异常处理和可靠性支持。您可以将 Erlang 视为一种领域特定语言,用于编写服务器服务和容器,用于处理并发任务并将负载分配给 CPU,并以另一种语言的高性能小代码块执行。与 Erlang/Elixir 相比,您必须用其他语言实现的代码越少越好。
如果您认为二进制协议处理是低级的,一定要尝试在 Erlang 中实现它,因为 Erlang 中的位操作语法非常棒。
是的,TLS 主要是用 Erlang 编写的(密钥处理、IO 等),性能关键部分是用 C 编写的(散列和加密算法)。
一个非常好的建议是:始终衡量,不要期望。您甚至可以看到在纯 Erlang 中比在 C++ 中执行得更好的重要解决方案。参见 Comparing Cpp And Erlang For Motorola Telecoms Software。
我的背景在 Perl/Python/node 和一些 Ruby。我以前没有使用过 BEAM VM 语言。
在 Perl/Python/Node/Ruby 中,如果我想处理 'lower level' 任务 - 密集计算、需要访问线程,或者更常见的是,包装 C 库 - 我会用 C 编写一些东西。 Elixir/Erlang 显然以 Erlang 进程的形式具有很好的并行性和非常低的延迟,消除了大部分需求。
那么如果我有一个 C 库,是制作一个 Elixir/Erlang 包装器还是重新实现功能更好?
一个非常具体的例子:Elixir/Erlang 的 TLS 使用 OpenSSL,还是用 BEAM 语言实现的?
在 Erlang 中实现事物的通常方法是先在 Erlang 中实现它,然后再对其进行测量。如果它表现不佳,请先在 Erlang 中寻求改进。如果它还不够好,用 C 重写热点部分。如果数据传输会杀死它,你可以使用 ports as a safer way or NIFs。背后的基本原理是 Erlang(或 Elixir)为编写简单、安全的代码提供了一个很好的环境。它提供了出色的异常处理和可靠性支持。您可以将 Erlang 视为一种领域特定语言,用于编写服务器服务和容器,用于处理并发任务并将负载分配给 CPU,并以另一种语言的高性能小代码块执行。与 Erlang/Elixir 相比,您必须用其他语言实现的代码越少越好。
如果您认为二进制协议处理是低级的,一定要尝试在 Erlang 中实现它,因为 Erlang 中的位操作语法非常棒。
是的,TLS 主要是用 Erlang 编写的(密钥处理、IO 等),性能关键部分是用 C 编写的(散列和加密算法)。
一个非常好的建议是:始终衡量,不要期望。您甚至可以看到在纯 Erlang 中比在 C++ 中执行得更好的重要解决方案。参见 Comparing Cpp And Erlang For Motorola Telecoms Software。