Bagaimana Futures dijelaskan dalam teori kategori?

Jawaban:

25

Seperti yang terjadi, saya sedang menulis makalah tentang ini sekarang. IMO, cara yang baik untuk berpikir tentang masa depan atau janji adalah dalam hal korespondensi Curry-Howard untuk logika temporal .

Pada dasarnya, ide di balik masa depan adalah bahwa itu adalah struktur data yang mewakili perhitungan yang sedang berlangsung, dan di atasnya Anda dapat melakukan sinkronisasi. Dalam hal logika temporal, ini adalah operator akhirnya . Ini memiliki struktur monadik: r e t u r n : A A b i n d : ( A B ) AB di mana r e t u r nA

return:AAbind:(AB)AB
returnmenumbuhkan operasi sebuah proses yang segera mengembalikan argumen, dan menciptakan proses baru yang menunggu untuk sebuah 's nilai, berlaku f dengan nilai itu, dan kemudian menunggu untuk B -nilai sebelum kembali. The Promises / Sebuah proposal untuk CommonJS panggilan operasi mengikat monadik , dan Scala 2.10 hanya memberikan antarmuka monadik standar .bindafBthen

Dual kepada operator akhirnya adalah selalu Operator Sebuah logika temporal, yang mengatakan bahwa pada setiap instan, Anda mendapatkan A . Ketika Anda beralih dari semantik Kripke dari logika temporal (di mana Anda hanya memodelkan provabilitas) ke semantik kategori dari λ- kalkulus (di mana Anda memodelkan istilah / bukti lambda juga), ternyata sebenarnya ada beberapa cara untuk melakukan ini.AAAλ

AAAA

Yang paling alami (IMO) yang harus dilakukan adalah mengambil , yang memungkinkan Anda untuk mendapatkan (berpotensi berbeda) di setiap saat. Kemudian, Anda dapat melihat gaya comonadic dari pemrograman reaktif fungsional (FRP) (pertama kali diusulkan oleh Tarmo Uustalu dan Varmo Vene ) sebagai gaya pemrograman ganda ke monadik dengan masa depan.AAStreamAA

Namun, comonadic -calculus seperti yang mereka sarankan, terlepas dari keanggunannya, menyebabkan hilangnya ekspresi yang serius dibandingkan dengan pemrograman secara eksplisit dengan stream, karena kategori coalgebra gratis yang mereka gunakan ternyata memiliki terlalu sedikit elemen global untuk menunjukkan banyak program menarik , terutama poin tetap.λ

Nick Benton dan saya berpendapat untuk pemrograman secara eksplisit dengan aliran dalam makalah kami Ultrametric Semantics of Reactive Programs . Selanjutnya, Alan Jeffrey menyarankan menggunakan LTL sebagai sistem tipe dalam makalahnya LTL tipe FRP , sebuah pengamatan yang juga dibuat oleh Wolfgang Jeltsch dalam makalahnya Menuju Semantik Kategorikal Umum untuk Logika Temporal Linear-Time dan Pemrograman Reaktif Fungsional .

Perbedaan antara pandangan yang saya dan Nick ambil, dan pandangan yang diambil oleh Alan dan Wolfgang paling baik dipahami (IMO) dengan membandingkan konstruksi yang diberikan dalam Birkedal et al. Langkah pertama dalam teori domain terlindungi sintetis: langkah-pengindeksan dalam topos pohon dengan kertas Alan. Topos pohon (presheaves atas bilangan alami yang diurutkan berdasarkan ukuran) sangat mirip dengan kategori ruang ultrametrik yang digunakan Nick dan saya, tetapi jauh lebih mudah untuk membandingkannya dengan kategori Alan (presheave atas kategori waktu yang terpisah), karena keduanya presheaf kategori.

Jika Anda tertarik pada futures khusus untuk concurrency, maka mungkin lebih baik untuk melihat CTL daripada LTL. AFAIK, itu wilayah yang saat ini belum dijelajahi!

EDIT: inilah tautan ke konsep . Makalah ini sebagian besar tentang penerapan FRP yang diketik, jadi bahasanya sinkron. Tetapi sebagian besar diskusi tentang masa depan / peristiwa di bagian 3.3 pada dasarnya harus berlaku untuk bahasa yang benar-benar konkuren juga.

Neel Krishnaswami
sumber
1
Saya ingin mendapatkan salinannya ketika Anda selesai.
Dave Clarke
1
Tampaknya ini kehilangan karakteristik penting dari futures: sekali nilai diperoleh, itu tidak bisa berubah. Saya akan mencoba untuk mengekspresikannya dengan mengambil sebagai aksioma, tapi ini bukan yang kita inginkan jika berarti aliran ... Dan saya juga ingin salinan kertas ketika selesai: )AA
Alexey Romanov
Saya baru-baru ini membaca bahwa jenis Scala Try[T]dan Future[T]ganda, tetapi saya belum mengerti apa artinya ini / dalam arti apa.
Giorgio