Seberapa berbeda perbedaan antara push-pull dan FRP?

265

Saya ingin belajar FRP di Haskell, tetapi agak sulit untuk memutuskan perpustakaan untuk digunakan. Banyak yang tampaknya merupakan upaya mati, beberapa tampaknya telah dibangkitkan (seperti aktivitas terbaru di Yampa).

Dari apa yang saya baca, tampaknya ada dua "jenis" FRP: push-pull FRP (seperti di Reactive-pisang) di satu sisi dan FRP (seperti di Yampa) yang di-panahkan di sisi lain. Tampaknya dulu ada juga "FRP klasik" pada masa Fran dan FrTime, tetapi saya belum melihat adanya kegiatan baru-baru ini.

  • Apakah kedua (atau tiga) pendekatan FRP ini benar-benar berbeda secara fundamental?

  • Apakah salah satunya teori yang ketinggalan jaman sedangkan yang lain akan menjadi "barang masa depan"?

  • Atau apakah mereka harus berkembang secara paralel, menangani tujuan yang berbeda?

  • Apakah saya menamai perpustakaan yang paling menonjol dari setiap kategori, atau ada pilihan lain untuk dipertimbangkan (Sodium, Netwire, dkk)?


Saya akhirnya menyaksikan ceramah dari Evan Czaplicki yang direkomendasikan dalam komentar oleh J. Abrahamson. Ini sangat menarik dan membantu mengklarifikasi segalanya untuk saya. Saya sangat merekomendasikan ini kepada siapa pun yang menganggap pertanyaan ini menarik.

Guillaume Ponce
sumber
5
Anda mungkin tertarik pada pendapat ertes (penulis netwire): stackoverflow.com/a/13344292/414413
Cirdec
14
Sangat cepat: reactive-bananapasti berbasis tarik bukan push-pull. reactiveadalah push-pull. Yampadan netwirepanah. Ada FRP yang memungkinkan "nilai akumulasi" tetapi tidak mengizinkan "beralih", FRP yang memungkinkan "beralih" tetapi tidak "nilai akumulasi". Keduanya FRP "sederhana". FRP Arrowized memungkinkan perpindahan dan akumulasi serta menggunakan panah untuk mengontrol bahaya menggabungkan fitur-fitur tersebut. FRP monadik menyukai reactive-banana,, sodiumdan elereamenggunakan mekanisme hati-hati lainnya untuk memastikan bahwa beralih dan mengakumulasi tidak terlalu banyak berinteraksi.
J. Abrahamson
12
FR FR ter Arrowized juga memiliki fitur yang rapi bahwa sinyal selalu dinyatakan dalam konteks input mereka yang memungkinkan Anda mengubah output secara kovarian dan input secara contravariantly agar lebih baik mensimulasikan FRP interaktif. Lihat Antarmuka Pengguna yang Benar-Benar Fungsional oleh Courtney dan Elliott untuk contoh hebat fitur itu.
J. Abrahamson
9
Anda mungkin juga tertarik dengan pembicaraan "Mengontrol Waktu dan Ruang" oleh penulis Elm Evan Czaplicki. Menurut pendapat saya dia berhasil memberikan gambaran tingkat tinggi yang baik atas ruang desain FRP dan kompromi yang terlibat.
DanielM
3
Saya pikir Anda akan mendapatkan jawaban Anda di sini .. stackoverflow.com/questions/10000074/
Rushabh Shah

Jawaban:

18

Saya melakukan perjalanan ke Haskell.org untuk menyelidiki pertanyaan Anda. Apa yang saya temukan adalah dua makalah penting yang harus Anda baca untuk melanjutkan penelitian Anda, dan saya sedang membangun jawaban saya untuk pertanyaan Anda dari makalah ilmiah ini.

Push-Pull FRP oleh Conal Elliott

Generalisasi Monads ke Arrows oleh John Hughes


  1. Ya, tapi juga tidak. Menurut Elliot, push adalah evaluasi FRP yang didorong oleh data dan penarikan berkaitan dengan apa yang disebut evaluasi yang didorong oleh "permintaan". Penulis merekomendasikan tarik karena push cenderung idle di antara input data Inilah intinya: push-pull menggabungkan dan menyeimbangkan perilaku ini untuk tujuan utama meminimalkan kebutuhan untuk menghitung ulang nilai-nilai. Itu mudah; mengoperasikan FRP dengan push-pull mempercepat kemampuan untuk bereaksi. Panah adalah teknik berbeda untuk menggunakan tipe abstrak untuk menautkan nilai dan mengevaluasinya secara bersamaan. Semua konsep ini pada dasarnya berbeda. Tapi jangan mengambil kata-kata saya untuk itu:

    Sifat antarmuka Arrow bermasalah untuk tujuan evaluasi ulang minimal. Input peristiwa dan perilaku digabungkan menjadi satu input, yang kemudian berubah setiap kali komponen berubah, (Elliott).

    Dengan demikian, Arrow bertentangan dengan tujuan push-pull. Itu tidak berarti Anda tidak dapat menggunakan semua ini sekaligus, hanya saja itu akan rumit, dan ada beberapa hal yang tidak dapat Anda hitung tanpa tipe panah abstrak.

  2. Saya belum menemukan pendapat ilmiah tentang pendekatan mana yang merupakan "jalan masa depan". Hanya perhatikan bahwa panah dapat menangani simultan dengan sangat baik. Jika Anda bisa menerapkan panah dan menggunakan push-pull untuk meminimalkan perhitungan, itu akan menjadi cara masa depan.

  3. Ya, mereka membahas tujuan yang terpisah. Seperti yang saya katakan, mereka dapat diformulasikan bersama tetapi sulit untuk diterapkan dan bahkan jika itu berhasil, itu mungkin akan meniadakan manfaat kecepatan reaktif dari push-pull.

  4. Itu subjektif, tetapi Reactive dan Yampa tampaknya menjadi perpustakaan bahasa yang paling sering dikutip untuk FRP. Saya akan mengatakan Reactive oleh Conal Elliott memiliki akar yang dalam, dan Yampa juga didirikan. Proyek-proyek lain seperti Netwire muncul sebagai pengganti, tetapi bisa sementara waktu sebelum mereka mengganti raksasa.


Semoga ini membantu! Seperti saya katakan membaca artikel yang saya tunjukkan akan memberi Anda rasa yang lebih baik tentang jarak semantik antara panah, mendorong dan menarik.

Kevin Caravaggio
sumber