Bir Gelecek ile Bir Söz arasındaki fark nedir?


73

Bir Gelecek ile bir söz arasındaki fark nedir? (Akka ve Gpar’larda.)

Bana çağrıldığında çağrının geleceğin değerini hem blok olarak hem de geri getirerek aynı gözüküyorlar ve bir söz geleceğin sonucunu elde etmek.


4
"Gelecek üretici tüketicileri vaat ediyor". (Ama programlama için, takas son iki Vadeli (sıfır veya daha fazla) bir değerin tüketimine benzer olduğunu ve birlikte Promise (çünkü sadece ilki) başarılı olmak için güçlü bir değeri üreten benzer.)
rwong

: Martin Odersky Erik Meijer, Roland Kuhn tarafından Coursera gelecekteki / vaatleri "Reaktif Programlama İlkeleri" konusunda müthiş ders class.coursera.org/reactive-001/lecture , Hafta 3
GKislin

@ rwong: "Gelecek üretici tüketicileri vaat ediyor" - ha? Bu, gelecekler ve vaatler arasındaki farkı bize hatırlatmak için bir hatırlatıcı görevi gören anlamlı bir cümle midir? Beynim tamamen ayrıştırmayı başaramadı. Ayrıca bunun yanlış olduğunu ve kelimelerin değişmesini gerektirdiğini söylüyorsunuz, ancak bazı nedenlerden dolayı, bunu yazmadan önce henüz yapmadınız. Ve nihayet tırnak içinde, ancak googling yorumunuzdan başka bir sonuç getirmiyor. Mega-şaşkın.
bacar

Yanıtlar:


54

Akka / Scala hakkında konuşacağım, çünkü Gpar’lara ya da Akka / Java’ya aşina değilim.

Standart dağıtımda Akka'nın ilgili bölümünü içeren Scala 2.10'da, Futureesasen henüz hesaplanamayan bir değere salt okunur bir referanstır. A Promise, aynı şekilde yazabilmeniz dışında hemen hemen aynı . Başka bir deyişle, hem Futures hem de s'den okuyabilirsiniz Promise, ancak yalnızca Promises'ye yazabilirsiniz . Üzerindeki yöntemi çağırarak Futurebir ile ilişki kurabilirsiniz , ancak diğer yönde dönüşüm mümkün değildir (çünkü saçma sapan olurdu).Promisefuture



19

Wikipedia göre , aynı kavramdır:

Bilgisayar bilimlerinde gelecek, vaat ve gecikme bazı eşzamanlı programlama dillerinde senkronizasyon için kullanılan yapıları ifade eder. Başlangıçta bilinmeyen bir sonuç için vekil olarak hareket eden bir nesneyi, genellikle değerinin hesaplanması henüz tamamlanmadığı için tanımlarlar.

Bazı kütüphaneler onları bir şekilde aramayı seçebilir, bazıları da başka birini aramayı seçebilir. Ve her seferinde farklı tatlarda uygulanabilirler. Bazı kütüphaneler, farklı lezzetleri ayırt etmek için bu eş anlamlıları kullanmayı seçebilir. Bunun kötü bir seçim olduğunu iddia edersem (çünkü açıkça insanları şaşırtıyor), bu bağlantı Scala'da bu ortak uygulamanın olduğunu öne sürüyor.

@ Ptharien'ın Alevinin önerdiği gibi, Scala'da Futuresalt okunur bir işlemdir, oysa Promisesize temsil ettiği işlem için bir sonuç (veya başarısızlık) sağlama yeteneği verir.

A Promisebu nedenle en iyi sonucu yayma işlemini yürütme Futureişleminden sorumlu kod tarafından kullanılırken, a sonuçta bunu bekleyecek olan müşteri koduna maruz kalmak için kullanılır. Fakat yine de, bu ayrımın Scala'ya özgü olduğunu ve yabancıları şaşırtabileceğini lütfen unutmayın.


Bu JS Promises ve Python Futures için de geçerlidir.
Nick Sweeting,

6

Buraya biraz ekleyeceğim çünkü geç Java'dan beri bol bol Java ile çalışıyorum ancak Scala / Akka gelişiminde de bir geçmişe sahibim. Bu cevap çoğunlukla söylenenleri çoğaltacaktır ancak bugün JVM'de popüler kullanımdaki uygulamaların bolluğuna işaret edecektir.

İlk olarak, orijinal poster, get ve engellemeyi kullanarak söz eder - lütfen bunu asla testlerin dışında yapmayın.

Mevcut rolümde FP ve Eşzamanlılık kavramlarını öğrettiğimde, öğrenciye öncelikle anlamsal olarak vaat ettiklerini ve geleceklerinin eş anlamlı olduğunu söylüyorum, çünkü bir sözün veya gelecekteki bir apinin tüketicisi olarak, geliştiricinin var olduğunu veya IF'nin var olduğunu anlamalarına gerek yok anlamsal farklar - yalnızca IO'yu engellemeden taşıma yöntemleri.

Bir geleceğin tamamlanamayacağını ve bir söz verebileceğini söylemek (örneğin, scala / akka / play apis'e göre) çok basittir:

Bazı Vadeli İşlemler tamamlanabilir Java8 artık standart kütüphaneye bir CompletableFuture ürününü tanıtıyor.

Bazı Sözler Tamamlanamıyor Benzer şekilde, Oyun söz API'sinde bir Söz yerine getirilemez, ancak bir RedeemablePromise oyun oynayabilir, böylece daha farklı bir anlamsallık ortaya çıkarabilir - Typesafe şemsiyesi altında olsa bile. Ayrıca, Play Promise API, her iki yönde de ölçeklendirme işlemlerini dönüştürebilir - (F.Promise.wrap (future) veya promise.wrapped ()).

Typesafe teknolojisi ile Java8 üzerinde çalışırken, sık sık gelecekler / vaatler arasında gidip gelirsiniz, çünkü bir API tercih edilir (Play Promise API, Java8 lambdas ile daha iyi görünür). Akka + Play + Java8’de, Aktörler’den gelecek işlemleri alıp bunları vaatlere çevirir, geri çağrılar oluşturur ve kontrol cihazından geri gönderirsiniz.

Yani, insanlara öğrettiğimde söylediğim gibi, Sözler ve Gelecekler az çok eş anlamlıdır.

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.