Bu soruyu sormak için doğru terminolojiyi bilmiyorum, bu yüzden bunu birçok kelimeyle anlatacağım, yanımda taşıyacağım.
Arka plan , sadece aynı sayfadayız: Programlar genellikle önbellek içerir - bir zaman / bellek dengesi. Yaygın bir programcının hatası, yukarı akış kaynaklarından / emsallerinden birini değiştirdikten sonra önbelleğe alınan bir değeri güncellemeyi unutmaktır. Ancak veri akışı veya FRP programlama paradigması bu tür hatalardan etkilenmez. Birkaç saf fonksiyonumuz varsa ve bunları yönlendirilmiş bir bağımlılık grafiğinde birbirine bağlarsak, düğümlerin çıkış değerleri önbelleğe alınabilir ve fonksiyonun herhangi bir girişi değişene kadar yeniden kullanılabilir. Bu sistem mimarisi, Veri Akışı Tabanlı Ortamlarda Önbellekleme belgesinde anlatılmaktadır ve zorunlu bir dilde, ezberlemeye az çok benzemektedir.
Sorun : Bir işleve girişlerden biri değiştiğinde, işlevi yine bir bütün olarak yürütmemiz, önbelleğe alınmış çıktısını atmamız ve sıfırdan yeniden hesaplamamız gerekir. Birçok durumda, bu benim için israf gibi görünüyor. "Ne olursa olsun ilk 5" listesini üreten basit bir örneği ele alalım. Girdi verileri, her ne olursa olsun sıralanmamış bir listedir. Sıralı listenin çıktısını veren bir işleve girdi olarak iletilir. Hangi sırayla sadece ilk 5 öğe alan bir fonksiyon girilir. Sözde kodda:
input = [5, 20, 7, 2, 4, 9, 6, 13, 1, 45]
intermediate = sort(input)
final_output = substring(intermediate, 0, 5)
Sıralama işlevinin karmaşıklığı O (N log N) 'dir. Ancak bu akışın, girdinin bir seferde sadece biraz değiştiği bir uygulamada, 1 öğe ekleyerek kullanıldığını düşünün. Her seferinde sıfırdan yeniden sıralamak yerine, aslında yeni öğeyi doğru konuma ekleyerek önbelleğe alınmış eski sıralanmış listeyi güncelleyen bir işlev kullanmak aslında O (N) daha hızlı olacaktır. Bu sadece bir örnektir - birçok "sıfırdan" işlev böyle bir "artımlı güncelleme" benzerlerine sahiptir. Ayrıca, yeni eklenen öğe, 5. konumdan sonra olduğu için final_output'ta bile görünmeyebilir.
Sezgim, bu tür "artımlı güncelleme" işlevlerinin bir şekilde mevcut "sıfırdan" işlevlerle yan yana bir veri akışı sistemine eklenmesinin mümkün olabileceğini gösteriyor. Tabii ki, her şeyi sıfırdan yeniden hesaplamak her zaman artımlı güncellemeler yapmakla aynı sonucu vermelidir. Sistem bu özelliğine sahip olması gerekir , eğer tek tek ilkel FromScratch-eklemeli çiftlerinin her biri, her zaman aynı sonucu verir, daha sonra onlardan yapılan büyük birleşik fonksiyonlar da otomatik olarak aynı sonucu verecektir.
Soru : Hem FromScratch işlevlerini hem de Artan meslektaşlarını destekleyebilen, verimlilik için işbirliği yapan ve büyük akışlar halinde oluşturulmuş bir sistem / mimari / paradigma / meta-algoritmaya sahip olmak mümkün müdür? Değilse, neden? Birisi bu paradigmayı daha önce araştırıp yayınladıysa, buna ne denir ve nasıl çalıştığının kısa bir özetini alabilir miyim?