Fonksiyonel Reaktif Programlama ve Aktör modeli birbirleriyle nasıl ilişkilidir?


30

FRP, saf işlevler aracılığıyla olayları ve davranışları akışla ilgilidir. Aktör modeli - en azından Akka'da uygulandığı gibi - aktör olarak adlandırılan potansiyel olarak saf olmayan nesneler yoluyla değişmez mesajların (ayrı olaylar olarak kabul edilebilir) aktarılmasıyla ilgilidir.

Böylece yüzeyde ilişkili görünüyorlar.

Nasıl ilişki kurdukları hakkında başka ne söyleyebiliriz? Ayrıca, farklı uygulama alanları için hangisinin daha uygun olabileceği konusunda ne söylenebilir?

Yanıtlar:


26

Ne aktörler ne de FRP akışla ilgili değil. Aktörler, bir çıkış akışının harici konfigürasyonunu bile desteklemiyor.

FRP, FRP davranışlarının deterministik bir şekilde oluşturulmasına olanak sağlayan doğrusal bir zaman çizelgesindeki modelleme sinyalleri ve olayları ile karakterizedir. Aktörler, belirleyici olmayan bir sırayla mesajların işlenmesiyle güçlü bir şekilde karakterize edilir ve herhangi bir bileşimsel özelliğe sahip değildir (yani iki oyuncunun bir düzenlemesini daha büyük bir aktör olarak değerlendiremezsiniz).

Benzerlikler arıyorsanız, hem oyuncular hem de FRP'nin lambda matematiği ile yakın bir ilişkisi vardır. Her ikisi de insan girdisine cevap veren sistemleri modelleyebilir. Her ikisi de iç (yerel) durumun modellenmesini destekler.

FRP, entegraller veya biriktiriciler aracılığıyla yerel durumu destekler (zamanla katlanır); Yerel durum için bu yaygın destek, hem FRP hem de Aktörleri canlı programlama (veya program kodunun çalışma zamanının yükseltilmesi) için yetersiz kılar; önemli halini kaybetmek çok kolaylaşıyor.

Uygulama alanları ile ilgili olarak:

Aktörler modeli, çalışma zamanında aktörleri kurmak veya sürdürmek isteyebileceğimiz açık sistemler için çok uygundur. Aktörler modeli aynı zamanda dağınık sistemlere de çok uygundur, çünkü belirleyici olmayan mesajların sıralanması uygun bir uygulamayı kolaylaştırır. (Aktörlerin dağıtık sistemlere daha fazla uygun olmamalarının nedeni, bir mesajın 'bir kez ve bir kez' gelmesinin kesinti karşısında oldukça zor olması ve aktörlerin de acı veren dağıtılmış GC gerektirme eğiliminde olmalarıdır.)

FRP zamanla çalışan kapalı sistemler için çok uygundur - örneğin robotik kontrolörler, müzik programlama, hesaplamalı oyuncaklar. Determinizm ve kompozisyon özellikleri, FRP'yi en azından FRP'nin bir çözümü doğrudan modelleyebileceği durumlarda, aktörlerle çalışmaktan daha uygun hale getirir. FRP'yi efektlerle entegre etmek (zarif bir şekilde, safsızlığa sahip modeli kırmadan) zor olduğu kanıtlanmıştır. Kaynaklara etkin, benzersiz veya doğrusal bir şekilde girilmiş erişim - solucan delikleri ile etkili FRP çalışmaları yapılmıştır.

FRP ve Aktörler arasında bir yerde yatan başka modeller de var.

John Paul Morrison tarafından geliştirilen Akış Tabanlı Programlama (FBP), mesaj akışını gerçekten destekliyor.

Zaman Çözgü protokolleri (ya da Hafif Zaman Çözgü (LTW) üzerine yapılan en yeni çalışma), iletilerin aktarılmasında daha kontrollü ve kompozisyonsal bir fikir vermek için aktörler benzeri mesajları mantıklı bir zaman çizelgesine yerleştirir. Zaman atlama, genellikle bilimsel hesaplama gibi büyük paralel ve dağıtık sistemler için kullanılır. Orijinal zaman tüneli etkileşimli simülasyonlar için uygun değildi (insan girdilerine cevap) ve LTW sadece marjinal olarak uygundur.

Açık ve dağıtık sistemlerde sinyallerin duyarlı, kompozisyonel, FRP benzeri manipülasyonu ve işlenmesini sağlayan ve yerel durumu ortadan kaldıran Reaktif Talep Programlama (RDP) geliştiriyorum. RDP, yan etkilerin zaman içinde sinyallerle kaynak durumu üzerindeki değişmez, belirsiz etkilerle sınırlandırılmasıyla elde edilir. RDP, kaynak ve devlet modellerinin yeniden düşünülmesini gerektirir.


FRP'den memnun olmadığım bir şey, bir olayın üzerindeki bir işlevi eşlemenin sınırlı bir zaman almasıdır, ancak FRP sonuçta ortaya çıkan olayın orijinal olayla aynı anda gerçekleştiğini düşünecektir. Bu, FRP'nin iç zaman kavramının duvar zamanıyla adım adım ilerlemesine neden olabilir ve özellikle olayların duvar zamanıyla ilgili yanlış sıralanmasına neden olabilir. Ayrıca, B olayının A olayından sonra olabileceği kurgusunu da sevmiyorum, ancak A olayı ile dahili olarak kaydedilmiş olan aynı zamanda.
Robin Green

1
@RobinGreen Olayların 'anlık' ilerlemesini veya dönüşümünü modelleme yeteneği oldukça faydalıdır. Geliştiriciler, yukarı veya aşağı akışı geciktirerek modelleme gecikmesini telafi etmekte özgürdür. Bağımlı veya doğrusal tiplerde, atemporal sistemlerde modellemesi zor olan FRP sistemleri için zaman güvenliği (gerçek zamanlı özellikler; gecikme kaynağı olarak kaynak tahsisi) geliştirilebilir.
dmbarbour

@RobinGreen - "B olayının A olayından sonra meydana gelebileceği kurgusu, ancak aynı zamanda kaydedilmiş olay" ile ilgili olarak, anlık veya aşkın zamanda meydana gelen olaylar kavramı (lim (x-> 0 +) (T + x)) “olay” soyutlamasının evrensel yanlışlarından biri. Olay akışlarını çoğaltma, bölme ve birleştirme işlemlerinin sıralaması keyfi, tutarsız, geçici bilgileri kolayca kaybeder. (bkz. Neden Olaylar Değil )
dmbarbour

RDP projenizi Awelon projesine dönüştürüyor musunuz?
CMCDragonkai

1
Awelon projesi RDP modelini / paradigmasını yoğun şekilde kullanacaktır. RDP'yi OOP'ye benzer bir şekilde düşünün. Bir programlama modelinin mimarlık ve dil tasarımı üzerinde etkileri vardır, ancak benim 'proje' dediğim bir şey değil.
dmbarbour

7

Pratik açıdan onların nasıl farklı olduklarına dikkat çekmek istiyorum:

1) aktörler diğer aktörlere mesaj gönderir, bu mesaj geçen açıkça ve zorunlu olarak açıklanır .

Örneğin:

send msg to Actor137.

2) FRP'de veri akışı bildirimsel olarak açıklanmıştır :

Örneğin:

Cell134=Cell185+Cell42.

İleti iletme FRP çerçevesi tarafından gerçekleştirilir ve iletilerin bir hücreden (Aktöre benzer, durumu kapsıyor, diğer adıyla Davranış) diğerine nasıl iletileceğini "elle" tanımlamanız gerekmez.

Diğer bir deyişle:

İşlevsel reaktif programlamanın özü, bir beyannamede , bir değerin tamamen dinamik davranışını belirlemektir . Böylece tüm bağımlılıklar Cell134beyan noktasında tanımlanmaktadır.

Bu doğru değil aktör modeli için. Bir aktörün davranışını etkileyen aktörler A, aktörün tanımlandığı kaynak kodunda aynı yerde Atanımlanmaz.

Son zamanlarda , ikisi arasında ilginç bir melez olduğunu fark ettim : Akka akışları, veri akışının bildirimsel olarak tanımlandığı, ancak aktörler kullanılarak gerçekleştirildiği bir yer.

Başka bir fark şudur: FRP senkronize olma eğilimindeyken aktörler zaman zaman uyumsuz olma eğilimindedir (genellikle aksaklık yoktur ).

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.