2012-08-07 11 views
12

Me gusta mucho la idea del patrón o paradigma diferido/prometedor de jQuery, pero a veces tengo problemas para adaptar mi viejo cerebro a los puntos más finos o detalles específicos de implementación.¿Es el concepto diferido/promesa en JavaScript uno nuevo o es una parte tradicional de la programación funcional?

De hecho recientemente he descubierto que el/promesa de patrón/paradigma diferido parece ser anterior a jQuery y también es por lo menos en estas otras bibliotecas JavaScript/marcos:

probablemente me he perdido algunos, incluido cosas que son realmente parte de uno de los otros, y cometió otros errores en esa lista ... Edítelo para corregirlo o dejar comentarios.

¿El concepto de diferido/promesa fue inventado por "Q"? ¿Se inventó con alguna otra biblioteca o marco de JavaScript? ¿O es anterior a JavaScript por completo?

Si toda la idea ha sido tradicionalmente parte de la programación funcional, ¿dónde se hizo primero y dónde puedo leer sobre el concepto en general en lugar de estas diferentes implementaciones de JavaScript?

¿O está la programación funcional completamente al lado del punto? ¿El concepto está más relacionado con la programación concurrente que con la programación funcional?

+0

** Véase también [¿Cuáles son los futuros?] (Http://stackoverflow.com/questions/80447/what-are -futures) ** – hippietrail

Respuesta

9

According to Wikipedia: El término promesa fue propuesto en 1976 por Daniel P. Friedman y David Wise, y Peter Hibbard lo llamó eventual. Un concepto de futuro algo similar se introdujo en 1977 en un documento de Henry Baker y Carl Hewitt.

Ver: Futures and promises history en la Wikipedia:

El futuro y/o la promesa construcciones se llevaron a cabo por primera vez en lenguajes de programación tales como MultiLisp y la Ley 1. El uso de la lógica variables para la comunicación en la lógica concurrente Los lenguajes de programación fueron bastante similares a los futuros. Comenzaron con Prolog con Freeze e IC Prolog, y se convirtieron en una verdadera primitiva de simultaneidad con Relational Idioma, Prólogo concurrente, Claps de cuerno guardado (GHC), Parlog, Vulcan, Janus, Mozart/Oz, Flow Java y Alice ML. El asignación única I-var de los lenguajes de programación de flujo de datos, originados en Id e incluidos en ML simultáneo de Reppy, es muy similar a la variable lógica concurrente.

La técnica promesa pipelining (usando futuros para superar latencia) fue inventado por Barbara Liskov y Liuba Shrira en 1988, [12] y independientemente por Mark S. Miller, Dean Tribble y Rob Jellinghaus en el contexto de Proyecto Xanadu alrededor de 1989. [13]

El término promesa fue acuñado por Liskov y Shrira, aunque se llamaron al mecanismo de canalización con el nombre de transmisión de llamadas, que es , que ahora se usa con poca frecuencia. [...]

+0

¡Genial! Acabo de encontrar esto de forma independiente después de publicar mi pregunta y tengo alrededor de once páginas de Wikipedia abiertas para leer. (-: – hippietrail

+0

Hmm son lenguajes funcionales "MultiList" y "Act 1" Supongo que este concepto está más relacionado con la concurrencia que con los lenguajes funcionales como originalmente pregunté ... – hippietrail

+1

@hippietrail: es [** MultiLisp ** ] (http://en.wikipedia.org/wiki/MultiLisp) y sí, es un lenguaje de programación funcional (un dialecto de Lisp/Scheme). Act 1 fue un lenguaje de programación experimental para construir [sistemas de actores] (http://en.wikipedia.org/wiki/Actor_model) - ver [este documento] (ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-625.pdf) (pdf) de 1981 por Henry Lieberman – rsp

6

Creo que en concepto de JavaScript diferido/promesa apareció por primera vez en Dojo (inspirado en Twisted de Python) y luego en jQuery.

El momento notable es el trabajo del grupo CommonJS que puso mucho esfuerzo a "estandarizar" promesas para JavaScript, ver A, B y D propuestas, sobre esa base de Kris Kowal Q (supongo que actualmente la aplicación más popular) evolucionó.

Deferred (soy el autor) es una implementación posterior, inicialmente fue inspirado por Q, su objetivo es hacer que las promesas parezcan naturales en JavaScript, y también hacer que la transición desde el estilo de devolución de llamada Node.js sea fácil.

Pero sí como @rsp escribió, son promesas concepto mucho más viejo que sí :) JavaScript

+1

'Deferred' estaba en' MochiKit' antes 'Dojo'. Dojo lo agregó después de Mochikit, luego' jQuery' lo agregó después de Dojo, pero el comportamiento de implementación de jQuery es ligeramente diferente. –

Cuestiones relacionadas