Zachowania definiują wywołania zwrotne. & Protokoły definiują metody bez podpisów. Moduły implementujące protokół powinny dać definicję wszystkich tych metod. To samo dotyczy modułów używających zachowania. Jaka jest różnica semantyczna?Różnica między protokołem a zachowaniem w eliksirach
Jedna różnica polega na tym, że protokół może być zaimplementowany dla pojedynczego typu tylko raz, ponieważ możemy zaimplementować zachowanie dla modułu wiele razy w oparciu o nasze wymagania. Jasne jest, kiedy używać czego. Czy jest jakakolwiek inna różnica poza tym?
Co więcej, zachowania uruchamiają nowe procesy, w których wywołania zwrotne są uruchamiane, podczas gdy funkcje protokołu działają w tym samym procesie. To jest ten sam komentarz co poniżej, ale często jest pomijany. Zachowania ukrywają wszystkie współbieżności i przekazywanie wiadomości, ale wciąż tam są, a wywołania klienta i wywołania zwrotne są uruchamiane w różnych procesach. – rvirding
@rvirding Nie wiedziałem o tym i nie pamiętam tego w żadnej książce lub samouczku. Czy istnieje jakaś część dokumentacji lub inny artykuł na temat tego, w jaki sposób zachowania domyślnie uruchamiają nowe procesy? –
@KrzysztofWende Jest to domyślnie podane w http://erlang.org/doc/design_principles/des_princ.html. Zasadniczo termin 'behaviour' jest głęboko związany z aplikacjami OTP, a więc z drzewami nadzoru, które dotyczą utrzymania procesów. W języku Erlang zachowanie usuwa abstrakcyjne wzorce (klient-serwer, automat stanowy itd.), Dzięki czemu nie trzeba ręcznie wywoływać komunikatów typu "spawn *" i wzorców (co jest podatne na błędy). Internetowy samouczek Freda Heberta bardzo mi pomógł, aby to zrozumieć: http://learnyousomeerlang.com/what-is-otp#the-common-process-abstracted –