¿Cuál es la diferencia entre procesos / mensajes en Erlang y objetos / mensajes en Smalltalk?

12

Estoy tratando de entender la diferencia entre objetos / mensajes en Smalltalk y procesos / mensajes en Erlang . Yo leí el siguiente post sobre el tema .

Hasta donde entiendo, en Smalltalk, todo es un objeto , y todo tiene la misma abstracción "objeto / mensaje", incluso el número 1es un objeto que solo se puede alcanzar con el paso del mensaje. ¿Hay 1un proceso en Erlang / Elixir? ¿Es todo en Erlang una respuesta al paradigma del mensaje / programa? ¿Puedes enviar un mensaje a un número en Erlang?

Muchas gracias.

Completamente funcional
fuente
Un número entero 1 no es un proceso, por lo que no puede enviarle un mensaje. Puede ajustar el estado de un número entero dentro de un proceso recurrente y enviar mensajes de ese proceso, por ejemplo, una instrucción para aumentar o disminuir su valor. Pero, de nuevo, ya no sería de valor 1. Desplácese hasta el ejemplo de Elixir aquí dantswain.herokuapp.com/blog/2015/01/06/…
GavinBrelstaff
¡Gracias por una respuesta!
Totalmente funcional el

Respuestas:

18

Los procesos en Erlang y los objetos en Smalltalk son de hecho la misma cosa.

A primera vista, esto no es terriblemente sorprendente: Erlang es un lenguaje de modelo de actor . El modelo de actor fue inventado por Carl Hewitt, quien basó el modelo de evaluación basado en mensajes en el modelo de evaluación basado en mensajes de Smalltalk. (Realmente, los actores y los objetos son lo mismo; solo difieren en algunos detalles). Alan Kay, a su vez, fue influenciado por el PLANIFICADOR de Carl Hewitt, cuando diseñó Smalltalk.

Por lo tanto, existe una estrecha relación entre los actores y los objetos, y por lo tanto, no debería sorprendernos que los procesos de Erlang y los objetos de Smalltalk sean tan similares.

Excepto por una cosa: ¡los diseñadores de Erlang no sabían sobre el modelo de actor ! Solo se enteraron más tarde, particularmente cuando Joe Armstrong escribió su Tesis doctoral bajo Seif Haridi (coautor del libro definitivo sobre Paradigmas de programación) a fines de la década de 1990.

Joe Armstrong escribió un artículo en el que abogó firmemente contra OO ( Why OO Sucks ), pero luego cambió de opinión cuando se dio cuenta de que Erlang en realidad está muy orientado a objetos. De hecho, incluso llegó a afirmar que Erlang es el único lenguaje orientado a objetos en esta entrevista con Joe Armstrong y Ralph Johnson .

Este es un caso interesante de lo que los biólogos evolutivos llamarían evolución convergente , es decir, dos especies no relacionadas que evolucionan para ser similares en respuesta a presiones externas similares.

Sin embargo, todavía hay muchas relaciones entre Erlang y Smalltalk:

Erlang comenzó como una extensión de concurrencia de Prolog (e incluso cuando Erlang se convirtió en su propio idioma, las primeras implementaciones se escribieron en Prolog) y hasta el día de hoy todavía está muy arraigado en Prolog. Prolog está fuertemente influenciado por el PLANIFICADOR de Carl Hewitt.

Smalltalk también estuvo fuertemente influenciado por lo que luego se convertiría en ARPANet (e incluso más tarde en Internet); Erlang fue diseñado para sistemas en red.

Sin embargo, una de las diferencias importantes entre Erlang y Smalltalk es que no todo es un Proceso. 1Es un número, no un proceso. No puedes enviar un mensaje a un número.

Hay múltiples "capas" de Erlang:

  • Erlang funcional : un lenguaje funcional de tipo dinámico, en su mayoría típico, con algunas "rarezas" heredadas de Prolog, por ejemplo, unificación.
  • Erlang concurrente : Erlang funcional + Procesos y mensajes.
  • Erlang distribuido : Erlang concurrente + procesos remotos.
  • Erlang tolerante a fallas : Erlang distribuido + ciertos patrones de diseño codificados en las bibliotecas OTP, por ejemplo, árboles de supervisión y gen_server.

Un sistema tolerante a fallas escrito en Erlang / OTP generalmente se verá como algo que podríamos reconocer como "orientado a objetos". Pero el interior de esos objetos a menudo se implementará en un estilo más funcional que orientado a objetos.

Curiosamente, la "presión evolutiva" a la que Erlang estaba sometido, en otras palabras, el problema que los diseñadores de Erlang intentaban resolver (confiabilidad, replicación, redundancia, ...) es la misma presión que condujo a la evolución de las células. Alan Kay estudió microbiología y modeló explícitamente OO en células biológicas. Este es otro paralelo entre Erlang y Smalltalk.

Escribí un poco sobre esto en otra respuesta mía .

Jörg W Mittag
fuente
Gracias, eso es útil!
Totalmente funcional el