Push-pull ve oklu FRP ne kadar temelden farklıdır?


264

Haskell'de FRP okumak istiyorum, ancak kullanılacak bir kütüphaneye karar vermek biraz zor. Birçoğu ölü girişimler gibi görünüyor, bazıları diriltilmiş gibi görünüyor (Yampa'daki son faaliyetler gibi).

Okuduğum kadarıyla, FRP'nin iki "türü" var gibi görünüyor: bir tarafta itme-çekme FRP (Reaktif-muzda olduğu gibi) ve diğer tarafta oklu FRP (Yampa'da olduğu gibi). Görünüşe göre Fran ve FrTime zamanında bazı "klasik FRP" de vardı, ancak bunlarda yeni bir etkinlik tespit etmedim.

  • Bu iki (veya üç) temelde farklı FRP yaklaşımı mı?

  • Bunlardan biri modası geçmiş bir teoriyken diğeri "geleceğin maddeleri" mi olacak?

  • Yoksa farklı amaçlara hitap ederek paralel olarak gelişmeleri mi gerekiyor?

  • Her kategorinin en önemli kütüphanesine mi isim verdim yoksa dikkate almam gereken başka seçenekler var mı (Sodium, Netwire, et al)?


Sonunda J. Abrahamson tarafından yapılan yorumlarda tavsiye edilen Evan Czaplicki'nin konuşmasını izledim . Çok ilginç ve benim için işleri açıklığa kavuşturmaya yardımcı oldu. Kesinlikle bu soruyu ilginç bulan herkese tavsiye ederim.


5
Sen ertes '(netwire yazar) görüş ilginizi çekebilir: stackoverflow.com/a/13344292/414413
Cirdec

14
Gerçekten hızlı: reactive-bananakesinlikle çekmeli değil itme çekmeli. reactiveitme-çekme. Yampave netwireok işaretlidir. "Değerleri biriktirmeye" izin veren ancak "anahtarlamaya" izin vermeyen FRP'ler, "anahtarlamaya" izin veren ancak "değerleri biriktirmeye" izin vermeyen FRP'ler vardır. Bunların her ikisi de "basit" FRP'dir. Oklu FRP, anahtarlama ve biriktirmeye izin verir ve bu özellikleri birleştirme tehlikesini kontrol etmek için okları kullanır. Monadic gibi CTP reactive-banana, sodiumve elereadiğer dikkatli mekanizmaları kullandığını geçiş sağlamak ve yapmaması etkileşim çok fazla biriken için.
J. Abrahamson

12
Arrowized FRP ayrıca, etkileşimli FRP'yi daha iyi simüle etmek için sinyallerin her zaman girişleri bağlamında belirtildiği düzgün bir özelliğe sahiptir. Bu özelliğin harika bir örneği için Courtney ve Elliott'un Gerçekten İşlevsel Kullanıcı Arayüzleri konusuna bakın.
J. Abrahamson

9
Ayrıca ilginizi çekebilir Elm yazarı Evan Czaplicki tarafından yazılan "Zaman ve Mekanı Kontrol Etme". Bence FRP tasarım alanı ve söz konusu uzlaşmalar hakkında iyi bir üst düzey genel bakış sunmayı başarıyor.
DanielM

3
Cevabınızı burada alacağınızı düşünüyorum .. stackoverflow.com/questions/10000074/…
Rushabh Shah

Yanıtlar:


17

Sorunuzu araştırmak için Haskell.org'a gittim. Bulduğum şey, araştırmanızı ilerletmek için okumanız gereken iki önemli makale ve bu bilimsel makalelerden sorunuza yanıtımı oluşturuyorum.

Conal Elliott tarafından Push-Pull FRP

Monadları Oklara Genellemek John Hughes


  1. Evet, aynı zamanda hayır. Elliot'a göre, itme veri güdümlü FRP değerlendirmesidir ve çekme "talep" güdümlü değerlendirme olarak adlandırılır. Yazar, push'un veri girişleri arasında boşta kalma eğiliminde olduğundan çekmeyi önerir. İşte önemli nokta: push-pull , bu davranışları, değerleri yeniden hesaplama ihtiyacını en aza indirgemek amacıyla birleştirir ve dengeler . Basit; FRP'nin push-pull ile çalıştırılması tepki verme yeteneğini hızlandırır. Ok , değerleri birbirine bağlamak ve aynı anda değerlendirmek için soyut türleri kullanmak için farklı bir tekniktir. Tüm bu kavramlar temelde farklıdır. Ama benim sözüme güvenme:

    Ok arayüzünün doğası, minimum yeniden değerlendirme hedefi için sorunludur. Giriş olayları ve davranışları, herhangi bir bileşen değiştiğinde değişen tek bir girdi halinde birleştirilir (Elliott).

    Bu nedenle Arrow itme-çekme hedefiyle çelişir. Bu, hepsini aynı anda kullanamayacağınız anlamına gelmez, sadece karmaşık olacağı ve soyut Ok türleri olmadan hesaplayamayacağınız bazı şeyler vardır.

  2. Hangi yaklaşımların "geleceğin yolu" olduğuna dair bilimsel görüşler bulamadım. Sadece okların eşzamanlılığı özellikle iyi işleyebileceğini unutmayın. Okları uygulayabilir ve hesaplamaları en aza indirmek için push-pull kullanabilirsiniz, geleceğin yolu bu olurdu.

  3. Evet, ayrı amaçlara hitap ediyorlar. Dediğim gibi, birlikte formüle edilebilirler, ancak uygulanması zordur ve işe yarıyor olsa bile, muhtemelen itme-çekmenin reaktif hız avantajlarını olumsuz yönde etkileyecektir.

  4. Bu özneldir, ancak Reaktif ve Yampa, FRP için en çok alıntı yapılan dil kütüphaneleri gibi görünmektedir. Conal Elliott'ın Reactive'in derin kökleri olduğunu ve Yampa'nın da kurulduğunu söyleyebilirim. Netwire gibi diğer projeler de yerini aldı, ancak devlerin yerini almaları biraz zaman alabilir.


Bu yardımcı olur umarım! Söylediğim gibi, işaret ettiğim makaleleri ok, itme ve çekme arasındaki anlamsal mesafeyi daha iyi anlayacaksınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.