d’exécution coopèrent simultanément à la réalisation d’une ou plusieurs tâches • Un programme ou système est dit concurrent si les périodes d’exécution de différentes tâches peuvent se chevaucher Concurrence Parallélisme
font pas bretter le programme • requêtes web, lectures de fichiers, requêtes à une BD • Les programmes tirent parti des derniers avancements au niveau des processeurs • architecture multi-cœurs, « hyperthreading »
de données partagées est risqué et doit être contrôlé adéquatement • Les différents acteurs doivent synchroniser leur travail • L’aspect concurrent d’un programme est souvent implicite, compliquant la tâche du programmeur
functional language, tailored for large-scale distributed and fault-tolerant control software. » — quelqu’un • « […] Erlang provides language-level features for creating and managing processes with the aim of simplifying concurrent programming. Though all concurrency is explicit in Erlang, processes communicate using message passing instead of shared variables, which removes the need for explicit locks » — quelqu’un d’autre, sur Wikipedia
structure de donnée entre acteurs • Des messages sont plutôt échangés entre acteurs • Les structures de données sont immutables • Le style fonctionnel de programmation de Erlang/ Elixir rend explicites les effets de bord • Il est aussi simple de démarrer un acteur localement que sur un autre continent.
concurrence le rend inadéquat pour du « number crunching », un cas d’application très important du parallélisme … mais convient très bien pour des services web, les télécommunications, la messagerie instantané, etc. …et aussi pour certaine technique d’intelligence artificielle
rend plus approchable • Normalise l’API d’Erlang/OTP • Introduit du « typage canard », à l’aide de protocoles • Expose d’avantage le dynamisme de ERTS • Créé par José Valim (un committer éminent de Rails)