Aşağıdaki Erlang kodunu göz önünde bulundurun:Haskell'in TChan'in Erlang'ın mesaj sıraları gibi mesajları ertelemesi nasıl mümkün olabilir?
-module(testit).
-export([testit/0]).
testit() ->
Pid = spawn(fun testit_proc/0),
Pid ! final,
Pid ! one,
Pid ! two,
io:format("Root finished~n").
testit_proc() ->
receive
one -> io:format("One~n");
two -> io:format("Two~n")
end,
receive
one -> io:format("One~n");
two -> io:format("Two~n")
end,
receive
one -> io:format("One~n");
two -> io:format("Two~n");
final -> io:format("Final~n")
end,
io:format("Spawn finished~n").
Çıktı: final
Root finished
One
Two
Final
Spawn finished
final
mesajının işlenmesi, bu mesajla uyuşmayan önceki alım kalıpları sayesinde son alma bloğuna kadar esasen ertelenir. .
Bunu Haskell'in TChan ile nasıl yapıyorsunuz?
Anlaşıldı. Bu semantikler temel "Chan" veya "TChan" paketlerinde mevcut değildir - bir erteleme sırasını kendiniz uygulamak zorundasınız. –