Является ли концепция отложенного / обещанного в JavaScript новой или это традиционная часть функционального программирования?

Мне действительно нравится идея паттерна или парадигмы отложенного / обещания jQuery, но иногда у меня возникают проблемы с тем, чтобы обернуть мой стареющий мозг вокруг более тонких точек или конкретных деталей реализации.

На самом деле недавно я обнаружил, что шаблон / парадигма отложенного / обещания, по-видимому, предшествует jQuery и также присутствует по крайней мере в следующих библиотеках / средах JavaScript:

Я, вероятно, пропустил некоторые, включил материал, который действительно является частью одного из других, и сделал другие ошибки в этом списке... Пожалуйста, отредактируйте его, чтобы исправить или оставить комментарии.

Была ли концепция "отложенного / обещанного" изобретена "Q"? Был ли он изобретен какой-то другой библиотекой JavaScript или фреймворком? Или это полностью предшествует JavaScript?

Если вся идея традиционно была частью функционального программирования, где она была впервые сделана и где я могу прочитать о концепции в целом, а не об этих различных реализациях JavaScript?

Или функциональное программирование совершенно не относится к делу? Связана ли эта концепция с параллельным программированием больше, чем с функциональным программированием?

2 ответа

Решение

Согласно Википедии: термин обещание был предложен в 1976 году Дэниелом П. Фридманом и Дэвидом Уайзом, и Питер Хиббард назвал его возможным. Несколько похожая концепция будущего была представлена ​​в 1977 году в статье Генри Бейкера и Карла Хьюитта.

Смотрите: История фьючерсов и обещаний в Википедии:

Конструкции будущего и / или обещания были впервые реализованы на языках программирования, таких как MultiLisp и Act 1. Использование логических переменных для связи в параллельных языках логического программирования было очень похоже на будущее. Они начались с Prolog с Freeze и IC Prolog и стали настоящим примитивом параллелизма с реляционным языком, параллельным прологом, клаузулой с охраняемым рогом (GHC), Parlog, Vulcan, Janus, Mozart/Oz, Flow Java и Alice ML. I-var с одним присваиванием из языков программирования потоков данных, созданный в Id и включенный в Reppy's Concurrent ML, очень похож на логическую переменную параллельного типа.

Техника конвейерной обработки обещаний (использование фьючерсов для преодоления латентности) была изобретена Барбарой Лисков и Любой Шрирой в 1988 году [12] и независимо Марком Миллером, Дином Трибблом и Робом Джеллингхаусом в контексте проекта Xanadu около 1989 года.[13]

Термин "обещание" был придуман Лисковым и Шрирой, хотя они ссылались на механизм конвейеризации по имени call-stream, который сейчас используется редко. [...]

Я думаю, что в JavaScript концепция отложенного / обещания впервые появилась в Dojo (вдохновленной Python's Twisted), а затем в jQuery.

Примечательным моментом является работа группы CommonJS, которая приложила немало усилий, чтобы "стандартизировать" обещания для JavaScript, см. Предложения A, B и D, на этой основе эволюционировала Q Криса Ковала (я полагаю, наиболее популярная в настоящее время реализация).

Deferred (я - автор) - более поздняя реализация, изначально она была вдохновлена Q, ее цель - сделать обещания более естественными в JavaScript, а также сделать переход от стиля обратного вызова Node.js простым.

Но да, как писал @rsp, обещания - намного более старая концепция, чем сам JavaScript:)

Другие вопросы по тегам