SORU
18 Mayıs 2011, ÇARŞAMBA


DZD uygulanması ile ilgili iyi bir tanıtım metni?

Haskell (ve özellikle Project Euler problem çözme, yetersiz çözümler CPU veya bellek ihtiyacı stres eğilimi) programlama çoğu zaman, program bu şekilde davranır neden kafam karıştı. Profilleri, biraz katılık tanıtmak için çalışıyorum bak seçti başka bir veri yapısı, ... ama genelde iyi bir sezgi eksikliği nedeniyle karanlıkta el yordamıyla.

Lisp, Prolog ve zorunlu diller genellikle nasıl uygulandığını biliyorum da, tembel bir dil uygulama hakkında hiçbir fikrim yok. Biraz ben de merak ediyorum.

Dolayısıyla yürütme modeli için program kaynaktan tüm zinciri hakkında daha fazla bilmek istiyorum.

Merak ediyorum:

  • tipik iyileştirmeleri uygulanan nedir?

  • ne idam kararı olduğu zaman, birden fazla aday için değerlendirme (süre olduğunu biliyorum tahrik dan gerekli çıkışları, orada hala büyük performans farklılıkları arasında ilk değerlendirme A ve B, veya değerlendirme B ilk tespit eden sen değil hiç)

  • thunk nasıl gösterilir?

  • nasıl ve kullanılan yığın yığın.

  • CAF nedir? (profil oluşturma etkin nokta var bazen gösterir, ama hiçbir fikrim yok)

CEVAP
18 Mayıs 2011, ÇARŞAMBA


DZD sistemin mimarisi ve yaklaşım hakkında teknik bilgilerin çoğunluğu kendi wiki. Anahtar parçaları, ve insanlar hakkında bilmediğiniz bazı ilgili belgeler için link vereceğim.

Tipik iyileştirmeleri uygulanan nedir?

Bu anahtar kağıt: A transformation-based optimiser for Haskell, SL Peyton Jones ve Haskell gibi zaman ve bellek kullanımını artırmak için temel bir dil türü koruma dönüşümler (refactorings) uygulama modeli DZD kullandığını açıklayan, 1998, Santos. Bu süreç denir "". sadeleştirme

Haskell derleyicisi yapılan tipik şeyler vardır:

  • Satır içi uygulaması;
  • Beta azaltma;
  • Ölü kod eleme;
  • Koşulların dönüşümü:-dava dava, dava elimiation.
  • Kutulama;
  • İnşa ürünü iade;
  • Tam tembellik dönüşüm;
  • Uzmanlık alanları;
  • Eta genişleme;
  • Lambda kaldırma;
  • Katılık analizi.

Ve bazen

  • Dönüşüm; . statik değişken
  • /Foldr izle, füzyon oluşturmak;
  • Alt ifade eliminasyonu ortak;
  • Kurucu ihtisas.

Yukarıda belirtilen kağıt bu en iyileştirmelerin çoğu anlamaya başlamak için en önemli yerdir. Daha basit olanlar bazı önceki kitapta verilirImplementing Functional LanguagesSimon Peyton Jones ve David Lester.

Değerlendirme için birden fazla aday olduğunda yürütme sırası nedir

Uni-işlemci üzerinde olduğunuzu varsayarsak, o zaman cevap "derleyici seçer biraz düzen statik sezgisel, ve program talep desen dayalı". Eğer sparks üzerinden spekülatif değerlendirme kullanıyorsanız, o zaman "bazı belirli olmayan, emir desen".

Örneğin ghc-core aracı ile genel olarak, infaz emri ne olduğunu görmek için, özünde bak. introduction to Core bir optimizasyon üzerinde RWH bölümde.

Thunk nasıl gösterilir?

Thunk yığın ayrılan bir kod işaretçisi ile veri olarak gösterilir.

Heap object

the layout of heap objectsbkz. Özellikle, how thunks are represented bkz.

Nasıl ve kullanılan yığın yığın.

the design of the Spineless Tagless G-machine, özel olarak belirlediği gibi, bu kağıt yayımlandığından beri pek çok değişiklik ile. Genel olarak, yürütme modeli:

  • (kutulu) nesneleri genel yığında ayrılır;
  • thread object has a stack yığın aynı düzen ile çerçeve oluşan her nesne;
  • bir işlev çağrısı yaparken, işlev yığını ve sıçrama değerleri üzerine itin;
  • eğer bu kod örneğin bir kurucu ayırmaya ihtiyacı varsa, bu veri yığını yerleştirilir.

Derin bir yığın model, "Push/Enter versus Eval/Apply" bkz anlamak için.

CAF nedir?

"". Sürekli Uygulamalı Formu E. g. bir üst düzey programınızı sürekli program yürütme süresi için tahsis edilir. Statik olarak ayrılmış oldukları, treated specially by the garbage collector olmalılar.


Kaynaklar ve daha fazla okuma:

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FND Films

    FND Films

    2 Mayıs 2006
  • jat4011

    jat4011

    16 EKİM 2010
  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008