gpt4 book ai didi

erlang - 我可以在不停止运行应用程序的情况下重新加载单个更改的 Erlang 模块吗?

转载 作者:行者123 更新时间:2023-12-03 23:26:16 24 4
gpt4 key购买 nike

我有 Erlang 应用程序,它需要很长时间才能启动,甚至更长时间才能完全重新编译。我做了一些我想尽快测试的小改动。我想在不停止应用程序的情况下编译和加载我的更改。如何从启动应用程序后到达的 Erlang 控制台执行此操作?我的源代码位于./src目录和梁文件编译为./ebin目录,我想对更改的文件执行相同的操作。
我的应用程序开始于

erl -pa ebin deps/*/ebin

最佳答案

你可以这样做:

  • 加载新版本的模块,例如c(module_name)
  • 对新模块中的函数进行完全限定的调用。 “完全合格”是指:
     module_name:function_name()
    该模块仅在进行完全限定的函数调用的过程中更新。

  • 这是一个例子:
    a.erl:
    -module(a).
    -compile(export_all).

    start() ->
    %% Long startup time:
    timer:sleep(1000),

    spawn(fun() -> loop() end).

    loop() ->
    receive
    {a, Msg} ->
    show1(Msg),
    loop();
    {b, Msg} ->
    show2(Msg),
    loop();
    update_code -> a:loop()
    end.

    show1(Arg) ->
    %%io:format("Hello ~w!~n", [Arg]). %original code
    io:format("XXX ~w!~n", [Arg]). %new code

    show2(Arg) ->
    %%io:format("Goodbye ~w!~n", [Arg]). %original code
    io:format("YYY ~w!~n", [Arg]). %new code
    在外壳中:
    1> c(a).           
    a.erl:2: Warning: export_all flag enabled - all functions will be exported
    {ok,a}

    2> Pid = a:start().
    <0.72.0>

    3> a:show1(jane). %%Executed by shell process.
    Hello jane!
    ok

    4> Pid ! {a, jane}. %% show1/1 executed in spawned process.
    Hello jane!
    {a,jane}

    5> c(a).
    a.erl:2: Warning: export_all flag enabled - all functions will be exported
    {ok,a}

    6> a:show1(jane). %%Module updated in shell process.
    XXX jane!
    ok

    7> Pid ! {a, jane}.
    Hello jane! <---- STILL EXECUTING OLD MODULE
    {a,jane}

    8> Pid ! update_code. %% Make fully qualified function call in spawned process.
    update_code

    9> Pid ! {a, jane}. %% The whole module has been replaced by new code.
    XXX jane!
    {a,jane}

    10> Pid ! {b, jane}.
    YYY jane!
    {b,jane}

    11>

    关于erlang - 我可以在不停止运行应用程序的情况下重新加载单个更改的 Erlang 模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65889683/

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