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.
sumber
reactive-banana
pasti berbasis tarik bukan push-pull.reactive
adalah push-pull.Yampa
dannetwire
panah. 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 menyukaireactive-banana
,,sodium
danelerea
menggunakan mekanisme hati-hati lainnya untuk memastikan bahwa beralih dan mengakumulasi tidak terlalu banyak berinteraksi.Jawaban:
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
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:
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.
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.
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.
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.
sumber