¿Erlang es realmente un lenguaje modelo de actor?

18

Estaba leyendo este artículo:

http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol2/pjm2/

Y menciona que:

... en el modelo de actor, incluso un número entero se representa como actor ...

Wikipedia confirma:

El modelo de actor adopta la filosofía de que todo es actor.

Erlang tiene muchos tipos de datos y esos tipos no son actores por lo que puedo decir.

¿No significa que Erlang no es un lenguaje modelo de actor de una manera que algunas personas dicen que, por ejemplo, Java no es un lenguaje funcional solo porque carece de ciertas características de programación funcional?

PD: por extensión, significa que Akka definitivamente no es un modelo de actor porque, además de los tipos de datos que no son actores que provienen del idioma anfitrión, incluso permite que los actores herederos extiendan su comportamiento a través de las instalaciones del lenguaje anfitrión.

Guarida
fuente

Respuestas:

39

Aunque el Modelo de actor es más antiguo que Erlang, los diseñadores de Erlang solo aprendieron sobre el Modelo de actor después de haber diseñado Erlang, por lo que es de esperar algunas diferencias.

Sin embargo, siguieron caminos paralelos de evolución: el modelo de actor fue creado por Carl Hewitt basado en la semántica de mensajes de Smalltalk. Alan Kay, a su vez, había basado el mensaje que transmitía la semántica de Smalltalk en la evaluación de PLANNER dirigida por objetivos, que fue diseñada por ... Carl Hewitt.

PLANNER fue el precursor de Prolog. Originalmente, Erlang no estaba destinado a ser un lenguaje, sino que comenzó como una biblioteca para la programación distribuida tolerante a fallas en Prolog, y más tarde se convirtió en un dialecto de Prolog, antes de que se convirtiera en su propio lenguaje, aún hoy en día muy influenciado por Prolog (Además, el intérprete original de Erlang fue escrito en Prolog).

Por lo tanto, las similitudes entre los procesos en Erlang, los objetos en OO y los actores en el modelo de actor están lejos de ser una coincidencia.

Erlang es un lenguaje con varias capas, cada una de las cuales son superconjuntos de las capas inferiores. La capa más pequeña es Functional Erlang . Este es un lenguaje funcional estándar con algunas adiciones heredadas de Prolog, como la unificación en lugar de enlace / igualdad. Si agregamos procesos y mensajes a eso, obtenemos Erlang concurrente . Agregue procesos remotos y obtendrá Erlang distribuido . Ahora agregue algunas bibliotecas y patrones de diseño de la OTP, y tendrá Erlang tolerante a fallas.

Los procesos son actores. (También son objetos). El interior de los procesos es funcional, no basado en actores. La estructura de un gran sistema Erlang tolerante a fallas construido utilizando las herramientas y patrones de la OTP, a menudo está muy orientado a objetos.

Entonces, depende de la escala que esté viendo.

En un sistema Erlang grande típico, tiene una arquitectura orientada a objetos con actores que pasan mensajes implementados mediante programación funcional. Lo que OTP llama a serverestá estrechamente relacionado con un objeto, serverestán formados por procesos (que son actores), los procesos usan funciones internamente.

En general, no creo que ningún Actor Language puro haya abandonado la investigación. Diablos, ni siquiera sé si el PLASMA de Carl Hewitt, el lenguaje original del actor, incluso se implementó alguna vez.

Jörg W Mittag
fuente
44
Erlang también fue diseñado por personas con un problema que resolver, y cuando estás en esa posición, la pureza conceptual a menudo se sacrifica en el altar de la practicidad.
Blrfl
Curiosamente, el problema que intentaban resolver (confiabilidad, replicación, redundancia, ...) es la misma naturaleza que intentaba resolver cuando evolucionaban las células. Alan Kay estudió microbiología y modeló explícitamente OO en células biológicas. Otro paralelo
Jörg W Mittag
1
PLASMA se implementó en MacLisp. Era un lenguaje de investigación en rápida evolución.
Jerry101
1
Realmente disfruté esta respuesta. Gracias @ JörgWMittag!
Felixyz