gpt4 book ai didi

erlang - 是否可以在不编译的情况下运行erlang?

转载 作者:行者123 更新时间:2023-12-02 05:51:00 25 4
gpt4 key购买 nike

是否有任何适用于 Erlang 的 VM 允许您即时编译而不是之前编译?

有可能从 shell 编译,谢谢 Martin。

Now, from the Erlang shell (or some other module!):


1> compile:file("mymod.erl").
{ok,mymod}
2> mymod:myfun().
Hello Joe

这样做有什么好处或坏处吗?
你还能热交换代码吗?
它是处理代码的常规用例吗?
那么编译器到底给你带来了什么好处呢?

最佳答案

在 Erlang shell 中,您可以使用 c("path/to/module.erl") 即时编译模块。 .您也可以通过 compile 访问此功能。模块,特别是 compile:file/{1,2}职能。

例如,假设我们有一个文件 mymod.erl :

-module(mymod).
-export([myfun/0]).

myfun() -> io:format("Hello Joe~n").

现在,从 Erlang shell(或其他模块!):
1> compile:file("mymod.erl").
{ok,mymod}
2> mymod:myfun().
Hello Joe

参见 compile 上的 Erldocs模块了解更多信息。

你可以在运行时使用 Erlang 编译器做很多事情。例如,您可以为模块动态生成代码(使用 erl_syntax !)然后编译它,甚至不用使用 compile:forms/{1,2} 将其写入文件。 .

(插入关于伟大权力和重大责任的标准演讲。)

Will you still be able to hot swap code?



是的。

Is it the regular use-case to handle code?



不会。通常 Erlang 代码会提前编译成 BEAM 字节码。取决于 Erlang 是否在 embedded or interactive 中启动模式下,模块要么在启动时加载,要么在引用时动态加载。如果您正在构建 release ,你基本上必须提前编译。

What benefits does the compiler give you in the end then?



好吧,一方面,我们可以构建紧凑的版本,而无需编译器等不必要的组件。当然,我们还获得了提前编译的所有传统好处,尤其是不必一直浪费时间进行编译。

综上所述,除非您完全理解其中的含义并且有充分的理由不提前编译您的代码,否则请遵循标准做法。

关于erlang - 是否可以在不编译的情况下运行erlang?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15968614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com