Чи є корисний опис ф'ючерсів чи обіцянок з точки зору теорії категорій? Зокрема, яким може бути категоричний дуал майбутнього?
Чи є корисний опис ф'ючерсів чи обіцянок з точки зору теорії категорій? Зокрема, яким може бути категоричний дуал майбутнього?
Відповіді:
Як це буває, я зараз про це пишу статтю. ІМО, хороший спосіб подумати про ф'ючерси чи обіцянки - з точки зору відповідності Керрі-Говарда часовій логіці .
По суті, ідея, що стоїть за ф'ючерсами, полягає в тому, що це структура даних, що представляє обчислення, які тривають, і за якими можна синхронізувати. З точки зору часової логіки, це в кінцевому підсумку оператор . Це має монадичну структуру: , в якому операція породжує процес , який негайно повертає свій аргумент, і створює новий процес , який чекає ' s, застосовує до цього значення, а потім чекає значення значення перед поверненням. Ther e t u r n : A → ◊ A b i n d : ( A → ◊ B ) → ◊ A → ◊ B r e t u r n b i n d a f B
then
, а Scala 2.10 просто надає їй стандартний монадичний інтерфейс .
Двоїстий до оператора в кінцевому рахунку є завжди оператором часової логіки, яка говорить , що в кожен момент часу , ви отримаєте . Коли ви переходите від семантики тимчасової логіки Крипке (де ви просто моделюєте доказовість ) до категоріальної семантики -calculus (де ви також моделюєте лямбда-терміни / докази), виявляється, що насправді існує багато способів зробити це . ◻ A A λ
Найпростіша річ, яку ви можете зробити, - це взяти на тій підставі, що раз у вас є , ви завжди маєте його. Це працює, але ІМО є на зразок нудним. :)
Найприродніше (IMO), що потрібно зробити, - це взяти , який дозволяє вам отримувати (потенційно інше) в кожен момент. Тоді ви можете побачити комонадний стиль функціонального реактивного програмування (FRP) (вперше запропонований Тармо Усталу та Вармо Вене ) як подвійний монадичному стилю програмування з ф'ючерсами.A
Однак комонадна -калькуляція, як вони припускають, незважаючи на її елегантність, спричиняє серйозну втрату виразності щодо програмування явно потоками, оскільки категорія вільних вуглегебр, яку вони використовують, виявляється занадто мало глобальних елементів для позначення багатьох цікавих програм , особливо нерухомі точки.
Ми з Ніком Бентоном посперечалися явно програмувати потоками в нашій статті Ультраметрична семантика реактивних програм . Згодом Алан Джеффрі запропонував використовувати LTL в якості системи типів у своєму документі LTL типів FRP , спостереження, яке Вольфганг Йелтш також виклав у своїй роботі До загальної категоричної семантики для лінійно-часової логіки часового та функціонального реактивного програмування .
Різниця між поглядом Ніка і Я, і тим, який приймають Алан і Вольфганг, найкраще зрозуміти (ІМО), порівнявши побудову, подану в перших кроках теорії синтезованих доменів Біркедала та ін.: Індексація кроків у топосах дерев з папером Алана. Топос дерев (попередні над природними числами впорядковані за розміром) дуже схожий на категорію ультраметричних просторів, якими я користувався Нік, але набагато простіше порівняти з категорією Алана (попередні випари за дискретну категорію часу), оскільки це обидва попередніх категорій.
Якщо ви зацікавлені у ф'ючерсах саме на конкурентоспроможність, то, можливо, краще б поглянути на CTL, а не на LTL. АФАІК, це зараз недосліджена територія!
EDIT: ось посилання на проект . Стаття в основному стосується реалізації типізованого FRP, тому мова є синхронною. Але більшість обговорень ф'ючерсів / подій у розділі 3.3 в основному повинні стосуватися і справді одночасних мов.
Try[T]
і Future[T]
подвійний, але я не зовсім зрозумів, що це означає / в якому сенсі.