SORU
20 EYLÜL 2011, Salı


Haskell'In katılık noktaları nelerdir?

Biz Haskell varsayılan olarak tembel (ya da bilmeli). Hiçbir şey bakılmalıdır kadar değerlendirilir. Ne zaman bir şey değerlendirilmeli? Haskell sıkı olması gereken noktalar var. "Katılık puan", ancak bu belirli bir dönem düşündüğüm gibi. bu kadar yaygın değil bu diyorum Bana göre:

Haskell azalma (veya değerlendirme)sadecekatılık noktalarda oluşur.

Şimdi soru şu:ne,kesinlikleHaskell olan katılık puan?Sezgilerim diyor ki main, seq / bang desenleri, desen eşleştirme, ve herhangi IO gerçekleştirilecek) main temel katılık puan, ama gerçekten bilmiyorum nedenini biliyorum.

Eğer deniyor değilse (ayrıca, "katılık puan", nearadılar mı?)

İyi bir cevap WHNF hakkında bazı tartışmalar yer alacak sanırım. Ben de lambda calculus üzerinde dokunmadım düşünün.


Edit: bu soru hakkında ek düşünceler.

Bu soru üzerine yansıyan ettiğim gibi, daha net titizliğin bir noktanın tanımı için bir şey eklemek olacağını düşünüyorum. Katılık noktaları farklı olabilirkapsamlarıve değişenderinlik(veya katılık). Düşen geri için benim tanımım "azaltma Haskell oluşur en katılık puan", bizi eklemek için bu tanım bu fıkra: "bir katılık noktası sadece tetiklendiğinde çevresi bağlamında değerlendirilir ya da azalır."

Demek istediğim, bu tür cevaplar başlamak için çalışalım. main katılık noktasıdır. Özel içeriği birincil katılık noktası olarak belirlenmiş: program. Zaman programı (main'nın bağlam) değerlendirilir, ana katılık noktası etkinleştirilir. Ana derinliği maksimum: tam olarak bakılmalıdır. Ana genellikle de main olan katılık noktaları olan IO eylemleri oluşur.

Şimdi deneyin: seq ve desen şartları uyan tartışmak. Ne kadar sıkı? işlevi uygulama nüansları açıklar: Nasıl olmaz? Ne deepseq? let case tablolar? 11**? Debug.Trace? Üst düzey tanımlar? Sıkı veri türleri? Patlama desen? Vb. Kaç kişi bu öğelerin sadece seq veya desen eşleştirme açısından değerlendirilebilir mi?

CEVAP
20 EYLÜL 2011, Salı


Bu kağıt anlayarak başlamak için iyi bir yer: A Natural Semantics for Lazy Evalution () Launchbury. Bu ifadeler küçük bir dil DZD Çekirdek benzer değerlendirilir. Sonra da kalan soru Çekirdek tam Haskell göster nasıl olduğunu, ve çevirinin en Haskell rapor kendisi tarafından verilir. DZD bu süreci diyoruz "desugaring" kaldırdığı için, şeker cümle.

O değil bütün hikayeyi, çünkü DZD içeren bir bütün Sal optimizasyon arasında desugaring ve kod üretimi, ve birçok bu dönüşümler olacak yeniden düzenlemek Çekirdek çok şeyler değerlendirdi farklı saatlerde (katılık analizi özel neden olacak şeyler için değerlendirir öncesi). Gerçekten anlamak içinsenin program değerlendirilecek, Çekirdek DZD tarafından üretilen bakmak gerekir.

Belki bu cevap biraz soyut gibi görünüyor (özellikle patlama desen veya seq bahsetmedim) ama bir şey istemiştinizkesinve bu yapabileceğimiz en iyi şey hakkında.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • expertvillage

    expertvillag

    5 NİSAN 2006
  • PCDIY

    PCDIY

    16 AĞUSTOS 2013
  • Tomas N

    Tomas N

    14 Kasım 2010