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 1
est un objet qui ne peut être atteint qu'avec le passage du message. Un 1
processus 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.
Réponses:
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.
1
est un nombre, pas un processus. Vous ne pouvez pas envoyer de message à un numéro.Il existe plusieurs "couches" d'Erlang:
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 .
la source