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

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

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

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

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

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

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

Ответ 1

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

См: Фьючерсы и promises история в Википедии:

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

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

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

Ответ 2

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

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

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

Но да, как писал @rsp, promises гораздо старше концепции, чем сам JavaScript:)