¿Cuál es el nombre del paradigma de programación caracterizado por Go?

8

Me intriga la forma en que Go abandona las jerarquías de clase y parece abandonar por completo la noción de clase en el típico sentido orientado a objetos. Además, me sorprende la forma en que se pueden definir las interfaces sin que el tipo que implementa esa interfaz necesite saber.

¿Hay algún término que sea / pueda ser usado para caracterizar este tipo de metodología de programación y paradigma de lenguaje (o quizás aspectos específicos de él)? ¿El paradigma del lenguaje Go es lo suficientemente nuevo y distinto del paradigma clásico de OOP y lo suficientemente importante en la historia de la programación de computadoras para garantizar un nombre único?

Ami
fuente
2
¡Voy a sugerir que se llame "codificación Go-go"! : P
FrustratedWithFormsDesigner
44
El concepto "hacer que un tipo implemente una interfaz sin que el tipo lo sepa" no es nuevo; Haskell ha tenido más o menos lo mismo (solo que lo llaman clases de tipo en lugar de interfaces) desde hace bastante tiempo.
tdammers
77
Pienso en la interfaz de implementación tipo ignorante como una forma de tipear patos, y Rob Pike lo dice explícitamente en esta presentación: golang.org/doc/ExpressivenessOfGo.pdf
Adam Crossland

Respuestas:

10

El mensaje que pasa entre contextos de ejecución livianos, junto con la capacidad de crear y destruir dinámicamente estos contextos, es básicamente el modelo de actor .

Los lenguajes de programación tienden a abordar el problema de la expresión de una de dos maneras: los lenguajes OO tienden a enfocarse en facilitar la implementación de las mismas operaciones utilizando diferentes tipos de datos (por ejemplo, "objeto en el que puedo hacer clic con el mouse" podría ser una barra de desplazamiento, una ventana, un menú, un cuadro de texto, etc. - misma operación, diferentes representaciones de datos), mientras que los lenguajes funcionales tienden a enfocarse en implementar fácilmente nuevas operaciones contra los mismos tipos de datos subyacentes. Al abandonar las jerarquías de clase, Go parece terminar más en el lado "funcional" de esta división.

Como Adam Crossland indicó en su comentario, la "interfaz de implementación de tipo ignorante" puede considerarse una forma de tipear pato, que es muy frecuente en lenguajes dinámicos. (Sin embargo, es más técnicamente correcto considerar esto como un sistema de tipo estructural dentro de Go. Las plantillas C ++ son probablemente la implementación más popular de un sistema de tipo estructural en la actualidad).

Go tiene muchos antecedentes: no creo que ninguna de sus ideas sea original del lenguaje. Pero creo que esa es generalmente la medida incorrecta para un lenguaje que pretende ser práctico. Go parece que combina ideas útiles de varios dominios diferentes de una manera elegante, que (creo) daría como resultado una programación más productiva que C # o Java podría producir. Espero que gane tracción.

Aidan Cully
fuente
1
+1, especialmente para "Go parece que combina ideas útiles de varios dominios diferentes de una manera elegante"
RCE
3

Primitivas de concurrencia.

Communicating Sequential Processes o CSP es un artículo de Charles Antony Richard Hoare, publicado por primera vez en 1985 por Prentice Hall International.

Erlang es un lenguaje funcional y Go está estructurado, se podría decir que Erlang es el predicador de Go.

mrhassell
fuente