Verhalten definieren Rückrufe & Protokolle definieren Methoden ohne Signaturen. Module, die ein Protokoll implementieren, sollten alle diese Methoden definieren. Dies gilt auch für Module, die ein Verhalten verwenden. Was ist der semantische Unterschied?Unterschied zwischen Protokoll und Verhalten in Elixir
Ein Unterschied, den ich mir vorstellen kann, ist, dass ein Protokoll für einen einzigen Typ nur einmal implementiert werden kann, da wir ein Verhalten für ein Modul basierend auf unseren Anforderungen mehrfach implementieren können. Mir ist klar, wann ich was benutzen soll. Gibt es noch einen anderen Unterschied als diesen?
Darüber hinaus starten Verhaltensweisen neue Prozesse, bei denen die Callbacks ausgeführt werden, während die Protokollfunktionen im selben Prozess ausgeführt werden. Dies ist der gleiche Kommentar wie unten, aber es wird oft übersehen. Verhalten verbergen die Nebenläufigkeit und Nachrichtenübergabe, aber sie sind immer noch da und die Clientaufrufe und Rückrufaufrufe werden in verschiedenen Prozessen ausgeführt. – rvirding
@rvirding Ich wusste es nicht und ich kann mich nicht daran erinnern, das in irgendeinem Buch oder Tutorial gesehen zu haben. Gibt es einen Teil der Dokumentation oder einen anderen Artikel darüber, wie Verhaltensweisen neue Prozesse implizit auslösen? –
@KrzysztofWende Es wird implizit in http://erlang.org/doc/design_principles/des_princ.html angegeben. Grundsätzlich ist der Begriff "Verhalten" eng mit OTP-Anwendungen und damit mit Supervision-Bäumen verbunden, bei denen es um die Aufrechterhaltung von Prozessen geht. In Erlang abstrahiert ein Verhalten gängige Muster (Client-Server, State-Machine usw.), so dass Sie 'spawn *' nicht aufrufen müssen und Match-Nachrichten nicht manuell anordnen müssen (was fehleranfällig ist). Das Online-Tutorial von Fred Hebert hat mir dabei geholfen, dies zu verstehen: http://learnyousomeerlang.com/what-is-otp#the-common-process-abstracted –