SORU
24 NİSAN 2014, PERŞEMBE


Ne kadar tecrübeli Haskell geliştiriciler *tasarım* zaman tembellik yaklaşım mı?

Sıkı FP deneyimi ton ile ara Haskell bir programcı değilim ve olmayan FP dil. Haskell benim kod çoğu orta büyük veri analiz (..^^6 10 10 9 şeyler), tembellik her zaman gözlemliyor. Ben oldukça iyi bir anlayış thunk, WHNF, desen eşleştirme ve paylaşım, ve ben mümkün için düzeltme sızıntı ile patlama desen ve seq, ama bu profil-ve-dua yaklaşım hissediyor iğrenç ve yanlış.

Ne kadar tecrübeli Haskell programcılar yaklaşım tembellik bilmek istiyorumzaman tasarım. Veri gibi kolay öğeleri demiyorum.Örneğini oluşturur bytestring.Tembel ya da'; daha doğrusu, hakkında ne düşündüğünü bilmek istiyorum zamanı, hafıza problemleri ve zor hata ayıklama neden olan alt düzey tembel makine. foldl

Nasıl thunk, desen eşleştirme ve tasarım sırasında zaman paylaşmayı düşünüyor musun?

Kalıpları ve cümleler sızıntıları önlemek için tasarım nedir?

Nasıl kalıpları ve cümleler bunlar, öğrendin ve iyi bir referans var mı?

Nasıl non-sızıntı olmayan sorunlar erken optimizasyon kaçıyorsun?

(2014-05-15 zaman bütçe için değiştirilmiş):

Ve hafıza problemleri bulma tespiti için önemli bir proje zaman, bütçe musunuz?

Veya, Tasarım becerilerini hafıza sorunları aşmak ve beklenen bellek kullanımını çok erken gelişim döngüsünde olsun?

CEVAP
25 NİSAN 2014, Cuma


"Sızıntı insanlar iyi kavramsal bir model yok. çünkü" olur katılık sorunu çoğu bence İyi kavramsal bir model olmadan Haskellers ve daha sıkı daha iyi olduğu inanışı var yaymak eğilimindedir. Belki de bu sezgi küçük örnekler ve sıkı döngüler ile oynuyor alınan sonuçlar geliyor. Ama yanlıştır. Doğru zamanlarda kesin olarak doğru zamanda tembel olmak en az o kadar önemli.

Veri türleri iki kampı var, genellikle olarak anılacaktır "veri" ve "". codata Her bir desen saygı esastır.

  • Üreten işlemleri "veri" (İnt, örneğini oluşturur bytestring, ...) ortaya yakın bir yerde zorunlu olmalı. Eğer bir akü bir numara eklerseniz, ben eklemeden önce başka bir zorunlu olacak emin olmak için dikkat ediyorum. Tembellik iyi bir anlayış çok önemli, özellikle koşullu doğası (yani katılık önermeler şeklinde değil "X değerlendirilen" değil "ne zamanY değerlendirilir, X").
  • Üreten işlemlerive tüketir< . em ^/"codata" (çoğu zaman, ağaçlar, en özyinelemeli diğer türler) listeleri yapmak gerekir çok aşamalı. Genellikle codata ->codata dönüşüm tüketmek bilgilerin her bit için bazı bilgileri (modül filter atlama gibi) oluşturmak. Codata için önemli bir parça mümkün doğrusal yani; ağaç, her dal kullanmak tam bir kez bir liste kuyruğunu tam olarak bir kez kullanın. Bu GC tüketilir gibi parçaları toplamak sağlar.

İşler veri içeren codata bakım ürünleri özel bir miktar alın. E. g. iterate ( 1) 0 !! 1000 değerlendirme önce boy-1000 thunk üreten sona erecek. Koşullu katılık yeniden sağlamaktır bu davayı engellemek için yol düşünmek gerekirne zamanlistenin eksilerini tüketilen, unsuru olarak oluşur. iterate Bu ihlal, daha iyi bir versiyonu lazım.

iterate' :: (a -> a) -> a -> [a]
iterate' f x = x : (x `seq` iterate' f (f x))

Sana bir şeyler yazmaya başladığınızda olarak, tabii ki daha kötü durumlar meydana geldiğinde söylemek olur. Genel olarak sabit yapmak için verimli veri yapıları / işlevleri bu çalışma aynı zamanda veri ve codata ve önemli akılda tutulması gereken: hangisi (hatta bir polimorfik ayarı nerede değil garantili, bunu yapmalısın aklında ve denemek saygı).

Paylaşım zor, ve çoğunlukla-dava-dava olarak yaklaşıyorum sanırım. Zor çünkü, lokalize, büyük veri yapıları genel olarak kullanıcılar modülü için ortaya çıkarmak için değil tercih tutmaya çalışıyorum. Bu genellikle için combinators açarak yapılabiliroluşturuluyorsoru, ve sonra üreten ve her şeyi tek seferde mi (monadlar üzerinde codensity dönüşümü, bu bir örnektir) tüketen şey.

Tasarım benim amacım veri türlerim kalıpları / codata saygılı olmak her fonksiyonu elde etmektir. Genellikle vurabilirim (biraz ağır olur diye -- bunu gerektirir, bazen de yıllar içinde doğal hale geldi), ve ben nadiren yaptığım zaman sızıntı sorunları var. Ama kolay kurallı kitaplıkları ile tecrübe ve dil kalıpları gerektirir ... bunu iddia etmiyorum. Bu kararlar yalıtım yapılır ve her şey doğru için de aynı anda olması gerekiyor. Kötü ayarlanmış bir alet, bütün konser berbat edebilir "rastgele kökler tarafından optimizasyon" hemen hemen hiç sorunları bu tür için çalışır. bu yüzden (

Apfelmus Space Invariants madde uzay/thunk sezgilerinizi daha da geliştirmek için yararlıdır. Edward Kmett görmek yorumu aşağıda da.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ItZWaffleS420

    ItZWaffleS42

    9 EYLÜL 2011
  • National Geographic

    National Geo

    7 Mayıs 2006
  • NextGenWindows

    NextGenWindo

    8 Kasım 2011