Hangi bölümleri Real World Haskell şimdi gereksiz veya kötü uygulama olarak kabul edilir?
Bölüm 19Real World Haskellörnekler çok şimdi Control.Exception
değişikliği nedeniyle başarısız.
Bu benim belki de bu kitapta bazı şeyler aslında eskimiş ve artık incelemeye değer değil, 6 yıl oldu sonuçta düşündürüyor. Sadece benim diğer referanstırSen bir Öğren Büyük Bir İyilik İçin Haskellharika bir kitap olsa da, RWH ile karşılaştırıldığında çok daha basit.
Lütfen önce kitabı okuyan herkes hangi bölümü artık uygun olmayan bir tavsiyede bulunabilir mi? Kitap özellikle, örneğin, ikinci yarısında bölümlerde yazılım işlem bellek, eşzamanlı programlama, soket programlama, vb.
CEVAP
RWH ana sorun
Eski.RWH DZD 6.8 kullanıldığı zaman bir versiyonu yazılmıştır. 6.8 3.0 tabanı sürüm kullanılır.x.x. 6.10.1 zaten many changes piyasaya 4.0.0.0, kullanılan. Ve o 6.10 6.8 sadece atlama. DZD geçerli sürüm 7.10. Monadlar değiştirildi. Şu anda bir tartışma var to remove return
from Monad
, Haskell gerçekten senkronize olacak gerçek dünya ile Gerçek Dünya Monad
örneği yok.
Bu söyleniyor, hala genel kurallar için yararlı bir kaynak olduğunu söyledi. Ama birçok kütüphane çıkışından bu yana değişti unutmayın.
Genel açıklamalar
- Yorumları okudum. Genellikle verilen paragraf/bölümü hala alakalı ve/veya çalışıp çalışmadığını bilgiler içerir.
- Kitaplıkları belgeleri kullanmak istediğiniz fonksiyonları/okuyun. Eğer tembel değilsen bile, en azından çeşitlerini bilir.
Bölüm için açıklamalar
Bu sadece RWH okurken fark ettim ki bazı şeyleri hızlı bir bakış. Muhtemelen eksik.
Bölüm 14. Monadlar & Bölüm 15. Monadlar ile programlama
Şifre: Applicative m => Monad m
DZD olarak 7.10, Applicative
Monad
2007 yılında planlı olmayan bir şeyin bir üst sınıftır.
DZD içinde 7.10,
Applicative
kullanıcı kodu bir sürü kırma potansiyelMonad
, bir üst sınıf olacak. Bu geçişi kolaylaştırmak için, DZD şimdi tanımları Uygulamalı-Monad Önerisi (AMP) ile çalıştığında uyarı oluşturur.
7.8.1 release notes bkz.
State
/Writer
/Reader
Bu monadlar
Will the real state monad please stand up? bölümünde, yazarlar iddia ediyor
Monad
bir örneği tanımlamak için(>>=)
return
için uygun bir tür kurucu olarak tanımlar sağlamak zorundayız. BuState
gerçek tanımı götürür bizi.-- file: ch14/State.hs newtype State s a = State runState :: s -> (a, s) }
State
ve şimdi arkadaş aracılığıyla uygulanır çünkü artık doğru
type State s = StateT s Identity
type Writer w = WriterT w Identity
type Reader r = ReaderT r Identity
Monad kendi trafo tarafından tanımlanmışlar.
Chapter 17. Interfacing with C: the FFI
Genel bölüm iyi, ama bir Yuras Shumovich's blog aşağıdaki kodu sonlandırıcı iş parçası üzerinde yorum ya da okuma gibi kötü bir uygulamadır:
pcre_ptr <- c_pcre_compile pattern (combineOptions flags) errptr erroffset nullPtr
if pcre_ptr == nullPtr
then do
err <- peekCString =<< peek errptr
return (Left err)
else do
reg <- newForeignPtr finalizerFree pcre_ptr -- release with free()
return (Right (Regex reg str))
malloc()
free()
, new
delete
, allocate
deallocate
ile birlikte kullanılmalıdır her zaman olduğu gibi, doğru işlevini kullanmanız gerekir.
TL;her zaman sizin için ayrılmış olan aynı ayırıcısı ile bellek boşaltmanız DR.
Eğer yabancı bir işlevi bellek ayırır, ayrıca eşlik eden kaldırma işlevini kullanmanız gerekir.
Chapter 19. Error handling
Hata işleme tamamen 6.10, ama sen bunu zaten fark 6.8 olarak değiştirildi. İyi okuyun documentation.
Chapter 22. Extended Example: Web Client Programming
Örneği biraz kırılmış gibi görünüyor. Ayrıca, diğer HTTP kütüphaneler vardır.
Chapter 25. Profiling and optimization
Genel profil oluşturma teknikleri hala aynı, ve örneğin (aşağıya bakınız) programınızda oluşabilecek sorunlar için büyük bir vaka çalışması. Ama RWH çok kanallı profil, örneğin ThreadScope üzerinden eksik. Ayrıca, tembel IO bütün kitap boyunca ilgili, bildiğim kadarıyla değil.
mean :: [Double] -> Double
mean xs = sum xs / fromIntegral (length xs)
Bölüm 24 & Bölüm 28 (Eşzamanlı ve paralel programlama & STM)
Chapter 24. Concurrent and multicore programming Chapter 28. Software transactional memory hala konuşuluyor olsa da, Simon Marlow kitabı Parallel and Concurrent Programming in Haskell sadece eşzamanlı ve paralel programlama üzerinde duruluyor ve güzel bir son (2013). GPU programlama ve repa tamamen RWH eksik.
Chapter 26. Advanced library design: building a Bloom filter
Diğer bölümlerde olduğu gibi, tasarım Kütüphanesi genel kurallar hala iyi yazılmış ve ilgili. Ancak, bazı değişiklikler nedeniyle (?) ST
sonuç konusunda artık derlenemez.
Bölüm 27. Ağ programlama
Güncel hala çoğunlukla. Sonuçta, ağ programlama bu kadar kolay değişmez. Bununla birlikte, kodu kaldırılmış fonksiyonları bindSocket
bind
close
(tercihen nitelikli ithalat) tarafından değiştirilmesi gereken, sClose
kullanır. Daha özel yüksek düzey bir kütüphane kullanmak isteyebilirsiniz düşük seviyeli, çok unutmayın.
İçerik eksik
Bazı konular RWH hiç söz konusu olmaz. Bu pipes conduit ve ayrıca lenses gibi akışı kitaplıkları içerir.
Çeşitli kaynaklar bu konular için vardır, ama ne oldukları hakkında bir fikir vermek için tanıtımları için bazı bağlantılar. Eğer vektörleri kullanmak istiyorsanız Ayrıca,, vectors
paketini kullanın.
Control.Applicative
RWH Control.Applicative
'39 *s* birkaç noktada, ama hiç Control.Applicative
açıklamıyor. LYAH Typeclassopedia Applicative
bölümler. Applicative
Monad
(bakınız) bir üst sınıf olduğu göz önüne alındığında, kalp ile o dersi öğrenmek için tavsiye edilir.
Ayrıca, birkaç operatörleri Control.Applicative
(ve typeclass kendisi) şimdi bölümü Prelude
, emin olun operatörler değil çatışma ile <$>
, <*>
ve diğerleri.
Lensler
Kütüphaneler izle
- Conduit Overview by Michael Snoyman (
conduit
yazarı) - Pipes tutorial by Gabriel Gonzales (
pipes
,pipes
pakete dahil olan yazar)
Neden görünümünde hazırda açık oturum ...
Neden Java Vector sınıfı eski veya kul...
Neden 'diziler JavaScript kötü uy...
Neden &; ad std quot;" kötü olara...
Neden belgedir.yazma " kabul;kötü ...