Devlet, ST arasındaki fark, İORef ve MVar | Netgez.com
SORU
4 NÄ°SAN 2011, PAZARTESÄ°


Devlet, ST arasındaki fark, İORef ve MVar

Write Yourself a Scheme in 48 Hours ile çalışıyorum (yaklaşık 85hrs değilim) ve Adding Variables and Assignments ilgili kısmı aldım. Bu bölümde büyük bir kavramsal sıçrama var, ve arasında ziyade direk nihai çözüm için Atlama iyi bir düzenleme ile iki adımda yapılıyor olsaydı. Neyse

Aynı amaca hizmet ediyor gibi farklı sınıfları bir dizi kaybım oldu: , *, **ST0 2*, MVar. İlk üç geçen ilk üç hakkında StackOverflow soru çok tercih cevap gibi görünüyor süre. metinde. Onlar üst üste çağırmaları arasında bir eyaletimiz gibi görünüyor.

Bu her ne kadar birbirinden farklıdır.


Özellikle bu cümleler mantıklı değil:

Bunun yerine, bir özellik adı kullanıyoruzdevlet konularıbizim için toplu devlet yönetme Haskell izin. Bu başka bir programlama dili olarak kesilebilir değişkenleri, işlevleri veya değişkenler elde etmek için kullanarak bize görmesini sağlar.

ve

İORef modülü durumsal değişkenleri kullanmanızı sağlarIO monad içinde.

Tüm bu satırı type ENV = IORef [(String, IORef LispVal)] karmaşık hale getirir - neden ikinci IORef? Eğer type ENV = State [(String, LispVal)] yerine yazacağım sonu ne olacak?

CEVAP
4 NÄ°SAN 2011, PAZARTESÄ°


Devlet Monad : deÄŸiÅŸken model bir devlet

Devlet monad basit bir API ile devlet programları için: tamamen işlevsel bir ortamdır

  • olsun
  • koyun

the mtl package Dokümantasyon.

Devlet monad kontrol tek bir iş parçacığı içinde devlet ihtiyacı olduğunda yaygın olarak kullanılır. Aslında kendi uygulamasında değişken devlet kullanmaz. Bunun yerine, program durum değeri (tüm hesaplamaları için ek bir parametre olduğu devlet yani) tarafından parametrelenmiştir. Devlet yalnızca tek bir iş parçacığı (ve olamaz iş parçacıkları arasında paylaşılan) mutasyona uğramış görünüyor.

ST monad ve STRefs

ST monad IO monad yalnızca benim kuzenim.

Keyfi sağlardevlet kesilebilirmakine gerçek değişken bellek olarak uygulanır. API rank-2 tipi parametre yerel kapsam kaçan değişken durumu bağımlı değerler engeller olarak güvenli ve yan etkisi ücretsiz programlar ile yapılmış.

Böylece mutability yoksa saf programları kontrol sağlar.

Yaygın değişken diziler ve mutasyona uğramış diğer veri yapıları için kullanılan, daha sonra donmuş. Değişken devlet olduğu için de çok etkilidir,"". donanım hızlandırmalı

Birincil API:

  • Control.Monad.ST
  • runST ... hafıza etkisi yeni bir hesaplama.
  • Ve 12**: (yerel) deÄŸiÅŸken hücre iÅŸaretçileri.
  • ST-tabanlı diziler (vektör) da yaygındır.

IO monad daha az tehlikeli kardeş gibi düşün. Ya da sadece ve bellek okuma yazma nerede IO.

Ä°ORef : Ä°O STRefs

Bu IO monad içinde STRefs (yukarda). Konum hakkında STRefs aynı güvenlik garantisi yok.

MVars : kilitler ile Ä°ORefs

Bir kilit güvenli . ekli ile STRefs veya İORefs gibi, ama ^em>eşzamanlıbirden çok iş parçacığı erişim. İORefs ve STRefs atomicModifyIORef (bir karşılaştırma ve takas işlemi atom) kullanırken sadece çok dişli bir ortamda güvende. MVars güvenle kesilebilir devlet paylaştığınız için daha genel bir mekanizmadır.

Genellikle, STRef veya İORef üzerinde Haskell, MVars veya TVars (STM tabanlı değişken hücreleri) kullanın.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Lupe Fiasco

    Lupe Fiasco

    23 ÅžUBAT 2006
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011
  • Samantha Crain

    Samantha Cra

    30 EKÄ°M 2008