Odpovídáte na názor ke článku Programovací jazyk pro dnešní den: Erlang.
[3]:<pre>-module(starter).
-export([stop/0, start/0, restart/0, bootup/1]).
%% called after recompilation
restart() -> test:run().
stop() ->
case is_pid(whereis(starter)) of
true ->
starter ! stop,
stopped;
_Else ->
already_stopped
end.
start() ->
case stop() of
stopped -> io:format("Starter stopped.~n");
already_stopped -> true
end,
io:format("Starting starter~n"),
Pid = spawn_link(?MODULE, bootup,["."]),
register(starter, Pid).
bootup(Dir) ->
put(dir, Dir),
put(delay, 2000),
put(modifs, none),
loop().
loop() ->
receive
stop ->
exit(normal);
recompiled ->
?MODULE:restart()
after get(delay) ->
% io:format("watching dir ~p...~n",[get(dir)]),
Files = filelib:wildcard("*.erl",get(dir)),
Modifs = lists:map(fun(File) -> {File, filelib:last_modified(File)} end,Files),
% io:format("---~p~n",[Modifs]),
case put(modifs, Modifs) == Modifs of
true -> true;
false -> recompile(Files)
end
end,
loop().
recompile(Files) ->
Recompile = fun(File) ->
Result = compile:file(File),
% Result = code:load(File),
io:format("Compiled: ~p~n",[Result]),
case Result of
{ok, Module} when Module /= starter -> code:purge(Module), code:delete(Module);
_ -> ok
end
end,
lists:foreach(Recompile, Files),
io:format("---Recompiled~n"),
starter ! recompiled.</pre>
Vše je řečeno na www.fuxoft.cz
Přečteno 93 714×
Přečteno 85 433×
Přečteno 42 964×
Přečteno 42 426×
Přečteno 38 175×