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 1
es un objeto que solo se puede alcanzar con el paso del mensaje. ¿Hay 1
un 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.
Respuestas:
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.
1
Es un número, no un proceso. No puedes enviar un mensaje a un número.Hay múltiples "capas" de Erlang:
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 .
fuente