Quelle est la différence entre les processus / messages dans Erlang et les objets / messages dans Smalltalk?

12

J'essaie de comprendre la différence entre les objets / messages dans Smalltalk et les processus / messages dans Erlang . J'ai lu le post suivant sur le sujet .

Pour autant que je sache, dans Smalltalk, tout est un objet , et tout a la même abstraction "objet / message" - même le nombre 1est un objet qui ne peut être atteint qu'avec le passage du message. Un 1processus est-il en Erlang / Elixir? Tout à Erlang est-il une réponse au paradigme message / programme? Pouvez-vous envoyer un message à un numéro à Erlang?

Merci beaucoup.

Parfaitement fonctionnel
la source
Un entier 1 n'est pas un processus - vous ne pouvez donc pas lui envoyer de message. Vous pouvez envelopper l'état d'un entier dans un processus récurrent et envoyer des messages à ce processus - par exemple une instruction pour incrémenter ou décrémenter sa valeur. Mais là encore, cela n'aurait plus de valeur 1. Faites défiler jusqu'à l'exemple Elixir ici dantswain.herokuapp.com/blog/2015/01/06/…
GavinBrelstaff
merci pour une réponse!
Entièrement fonctionnel

Réponses:

18

Les processus dans Erlang et les objets dans Smalltalk sont en effet la même chose.

À première vue, cela n'est pas très surprenant: Erlang est un langage de modèle d'acteur . Le modèle d'acteur a été inventé par Carl Hewitt, qui a basé le modèle d'évaluation piloté par message sur le modèle d'évaluation piloté par message de Smalltalk. (Vraiment, les acteurs et les objets sont la même chose; ils ne diffèrent que par certains détails.) Alan Kay, à son tour, a été influencé par PLANNER de Carl Hewitt, lorsqu'il a conçu Smalltalk.

Il existe donc une relation étroite entre les acteurs et les objets, et il ne devrait donc pas être surprenant que les processus d'Erlang et les objets de Smalltalk soient si similaires.

Sauf pour une chose: les concepteurs d'Erlang ne connaissaient pas le modèle d'acteur !!! Ils ne l'ont appris que plus tard, en particulier lorsque Joe Armstrong a écrit sa thèse de doctorat sous Seif Haridi (co-auteur du livre définitif sur les paradigmes de programmation) à la fin des années 1990.

Joe Armstrong a écrit un article dans lequel il plaidait fortement contre OO ( Why OO Sucks ), mais il a ensuite changé d'avis lorsqu'il s'est rendu compte qu'Erlang était en fait très orienté objet. En fait, il est même allé jusqu'à affirmer qu'Erlang est le seul langage orienté objet dans cette interview avec Joe Armstrong et Ralph Johnson .

Il s'agit d'un cas intéressant de ce que les biologistes évolutionnistes appellent l' évolution convergente , c'est-à-dire que deux espèces non apparentées évoluent pour être similaires en réponse à des pressions externes similaires.

Il existe encore beaucoup de relations entre Erlang et Smalltalk, cependant:

Erlang a commencé comme une extension simultanée de Prolog (et même quand Erlang est devenu son propre langage séparé, les premières implémentations ont été écrites en Prolog) et est toujours à ce jour fortement enracinée dans Prolog. Prolog est fortement influencé par le PLANIFICATEUR de Carl Hewitt.

Smalltalk a également été fortement influencé par ce qui allait devenir plus tard l'ARPANet (et plus tard encore Internet); Erlang a été conçu pour les systèmes en réseau.

Cependant, l'une des différences importantes entre Erlang et Smalltalk est que tout n'est pas un processus. 1est un nombre, pas un processus. Vous ne pouvez pas envoyer de message à un numéro.

Il existe plusieurs "couches" d'Erlang:

  • Erlang fonctionnel : un langage fonctionnel typiquement typiquement dynamique avec quelques "bizarreries" héritées de Prolog, par exemple l'unification.
  • Erlang simultané : Erlang fonctionnel + processus et messages.
  • Erlang distribué : Erlang simultané + processus distants.
  • Erlang tolérant aux pannes : Erlang distribué + certains modèles de conception codifiés dans les bibliothèques OTP, par exemple les arborescences de superviseur et gen_server.

Un système tolérant aux pannes écrit en Erlang / OTP ressemblera généralement à quelque chose que nous pourrions reconnaître comme "orienté objet". Mais l'intérieur de ces objets sera souvent implémenté dans un style plus fonctionnel qu'orienté objet.

Fait intéressant, la "pression évolutive" qu'Erlang subissait, en d'autres termes, le problème que les concepteurs d'Erlang essayaient de résoudre (fiabilité, réplication, redondance, ...) est la même pression qui a conduit à l'évolution des cellules. Alan Kay a étudié la microbiologie et a explicitement modélisé l'OO sur des cellules biologiques. C'est un autre parallèle entre Erlang et Smalltalk.

J'ai écrit un peu à ce sujet dans une autre de mes réponses .

Jörg W Mittag
la source
Merci, c'est utile!
Entièrement fonctionnel