Nasıl DZD mümkün olduğunca verimli veri yapıları yazıyorsun?
Bazen çok ihtiyacım var yazmak için bir veri yapısı bulamıyorum üzerinde Hackage, ya da ne buldum değil test veya kalite için yeterince bana güven, ya da sadece bir şey istemiyorum bir bağımlılık. Şu anda Okasaki kitabı okuyorum, ve asimptotik hızlı veri yapıları tasarımı nasıl anlatma konusunda oldukça iyidir.
Ancak, özellikle DZD ile çalışıyorum. Sabit faktörler benim için büyük bir anlaşma vardır. Bellek kullanımı da benim için büyük bir olay. Sorular özellikle DZD hakkında.
Özellikle
- Nasıl düğümleri paylaşımı en üst düzeye çıkarmak için
- Nasıl bellek ayak izi azaltmak için
- Yanlış katılık nedeniyle uzay sızıntıları önlemek için nasıl/tembellik
- Nasıl kod önemli bölümleri için sıkı iç döngüler üretmek için DZD almak için
Web üzerinde çeşitli yerlerde çok aradım, ve bir varbelirsiznasıl çalışmak için fikir, örneğin, maça çıkış, UNPACK
parametreleri kullanarak, ve gibi bakıyor DZD. Ama bunu anladığımdan emin değilim.
Açık favori veri yapıları kütüphanemi, konteynerler, ben bozdum ve Veri baktı.Sıra modül. Seq hızlı yapmak için ne yaptıklarını çok anladığımı söyleyemem.
Gözüme çarpan ilk şey FingerTree a
tanımıdır. Sadece parmak ağaçları ile yabancı olsa olmam sanırım. Gözüme çarpan ikinci şey SPECIALIZE
tüm parametreleri. Burada neler olduğu hakkında hiçbir fikrim yok, ve bu kodu her tarafa saçılmış çok merak ediyorum.
Birçok fonksiyonu da INLINE
pragma sahip. Bunun ne anlama geldiğini tahmin edebiliyorum, ama nasıl bir yargı INLINE
fonksiyonlar için çağrı yapabilirim?
Şeyler hattı ile ilgili çok ilginç ~475, bir bölüm olarak headered olsun''. Uygulamalı İnşaat Onlar tanımlamak bir newtype sarıcı temsil Kimliği monad, yazdıkları kendi kopyasını sıkı devlet monad, ve onlar bir tanımlı işlev adı applicativeTree
olan, görünüşe göre özel Kimlik monad ve bu artışlar paylaşım çıkış fonksiyonu. Burada neler olduğu hakkında hiçbir fikrim yok. Nasıl bir büyüdür paylaşımı artırmak için kullanılıyor?
Neyse, fazla Veri öğrenecek çok şey var emin değilim.Sıra. Orada diğer 'model programları' bilgelik kazanmak için okuyabilirim? Gerçekten ben gerçekten onları daha hızlı gitmek için gereken zaman benim veri yapıları çorbası nasıl bilmek istiyorum. Özellikle bir şey kolay füzyon yapmak, ve iyi füzyon kuralları yazma hakkında gitmek nasıl veri yapıları yazıyor.
CEVAP
Bu büyük bir konu! Çoğu kitap bir bölüm burada yazmaya çalışmayacağım bu yüzden başka bir yerde izah edilmiştir. Bunun yerine:
- Real World Haskell, ch 25, "Performance" - anlatılır, basit ve uzmanlık açma, profil oluşturma, Temel okuma ve bazı iyileştirmeler.
Johan Tibell bu konu hakkında bir sürü yazı
- Computing the size of a data structure
- Memory footprints of common data types
- Faster persistent structures through hashing
- Reasoning about laziness
Ve bazı şeyler işte
- Reading GHC Core
- How GHC does optimization
- Profiling for performance
- Tweaking GC settings
- General improvements
- More on unpacking
- Unboxing and strictness
Ve diğer bazı şeyler:
Nasıl Listesi< ekleyebilir miyim;? S...
Nasıl Python ile bir ağaç uygulayabili...
Veri bağlama Nasıl çalışır?AngularJS :...
Nasıl verimli bir şekilde anahtarları/...
Nasıl tarih sadece SQL Server datetime...