【问题标题】:Elixir: what is the binary printed in the repl after module definition?Elixir:模块定义后repl中打印的二进制文件是什么?
【发布时间】:2014-05-17 13:44:19
【问题描述】:

我在repl中写了一个简单的模块:

iex(26)> defmodule Adder do
...(26)> def add(a \\ 0, b \\ 0) do
...(26)> a+b
...(26)> end
...(26)> end
{:module, Adder,
 <<70, 79, 82, 49, 0, 0, 4, 224, 66, 69, 65, 77, 65, 116, 111, 109, 0, 0, 0, 106, 0, 0, 0, 12, 12, 69, 108, 105, 120, 105, 114, 46, 65, 100, 100, 101, 114, 8, 95, 95, 105, 110, 102, 111, 95, 95, 4, 100, 111, 99, ...>>,
 {:add, 2}}

模块定义后打印出来的二进制是什么?

【问题讨论】:

    标签: binary-data read-eval-print-loop elixir


    【解决方案1】:

    这是作为原始二进制文件输出的 BEAM 字节码。当通过 mix 编译时,编译器使用它来将编译后的模块保存到 Elixir.Adder.beam 文件中。在 iex 中定义的模块永远不会持久化到磁盘,但您可以将其视为您的模块已在内存中成功编译的确认。

    【讨论】:

    • 我明白了。如何获取用于分发目的的二进制文件,这样人们就可以在不安装 Erlang 和 Elixir 的情况下执行二进制文件?
    • 您需要研究生成版本。看看github.com/bitwalker/exrm,这是使用 Elixir 构建版本的最简单方法。它不能与单独的模块一起使用,而是与项目一起使用,并将 Erlang 运行时与它捆绑在一起,但总体而言,这个包非常小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多