Odpovídáte na názor ke článku Programovací jazyk pro dnešní den: Erlang.
Tak odladěno a vyzkoušeno. Zajímavé, že mě nenapadlo si takovou věcičku taky udělat. Jen tak pro ty rozumbrady aka Dusek. Jen si zkuste napast něco co si skompiluje novou verzi sebe sama a bez přerušení činnosti pokračuje s novou verzí kódu. V erlangu brnkačka viz následující kód.
Pročištěná verze:
-module(starter).
-export([stop/0, start/0, loop/1]).
-define(dir, ".").
-define(timeout, 2000).
%% called after recompilation
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, loop,[{?dir, ?timeout, none}]),
register(starter, Pid).
loop({Dir, Delay, Modifs}=S) ->
receive
stop ->
ok;
_ -> loop(S)
after Delay ->
% io:format("watching dir ~p...~n",[Dir]),
Files = filelib:wildcard("*.erl",Dir),
NewModifs = lists:map(fun(File) -> {File, filelib:last_modified(File)} end,Files),
% io:format("---~p~n",[Modifs]),
case NewModifs == Modifs of
true -> loop(S);
false -> recompile(Files),
?MODULE:loop({Dir, Delay, NewModifs})
end
end.
recompile(Files) ->
Recompile = fun(File) ->
Result = compile:file(File),
io:format("Compiled: ~p~n",[Result]),
case Result of
{ok, Module} -> code:purge(Module),
code:delete(Module),
code:load_file(Module);
_ -> ok
end
end,
lists:foreach(Recompile, Files),
io:format("---Recompiled~n").
Vše je řečeno na www.fuxoft.cz
Přečteno 93 714×
Přečteno 85 433×
Přečteno 42 960×
Přečteno 42 426×
Přečteno 38 175×