2013-05-02 30 views
11

GHC bir şeyleri derlemek için uzun zaman alıyorsa, ne yaptıklarını öğrenmenin bir yolu var mı? Öncelikle, derleyiciyi gerçekten çökerttiğimi (yani, bir şekilde bir şekilde sonsuz döngüye soktuğumu) veya gerçekten ilerleme kaydedip ilerlemediğini, ancak çok yavaş mı olduğunu bilmek güzel olurdu.GHC etkinliğini izleme

İkincisi, GHC derleme sürecinin hangi bölümünün sorun olduğunu bilmek güzel olurdu. Ayrıştırma mı yoksa desugar mı yoksa tip kontrolü mi, Çekirdek optimizasyonu mu, yoksa kod üretimi mi, yoksa ...?

Neler olduğunu izlemenin bir yolu var mı? (GHC uzun zaman alıyorsa, muhtemelen bir sürü iş yapıyor, bu yüzden çok fazla çıkış için sorarsanız o büyük olacak demektir akılda Rulman!)

GHC zaten söyler hangi modülleri Derleme (yeniden) yapmaya çalışıyor. Benim durumumda, problem tek bir müstakil modül. GHC'nin nereye takıldığını bilmek istiyorum.

+1

Sen ghc bir profilli versiyonunu oluşturmak ve daha sonra görmek için standart profil araçlarını kullanabilirsiniz gerçeği sonrası ne kadardır. – Davorak

+5

Bir ayrıntı belirterek konuşkanlık olmasını isteyebilirsiniz '-v4' size neler olup bittiğini ** söyler - evet, çıktı büyük olur, ancak sadece izlemek istiyorsanız, bırakın Terminal, genellikle sadece son 1000 veya satırları hatırlar. –

+1

Tecrübemde, sonsuz bir döngüye girecek GHC tanınabilir çünkü üretken bir şey yavaş yavaş genel olarak çok fazla bellek tüketirdi ... –

cevap

4

Daniel Fischer'ın yorumu üzerine, GHC'yi farklı ayrıntı seçenekleriyle çalıştırmayı denedim.

  • : Biraz daha fazla çıktı üretildi, ancak ana derleme adımı sırasında hiçbir şey yapılmadı.
  • -v2: GHC'nin şu anda hangi adımı gerçekleştirdiğini (ayrıştırıcı, desugar, tip denetimi, basitleştirici vb.) Söyler. Bu aslında gerçekten istediğim şey.
  • -v3: Basitleştiricinin konsola ne yaptığını gerçekten dökmesi için ortaya çıktı - 8MB'lık kaynak kodunu derlerken kötü bir fikir!

Başlamak için -v2 yer olduğu anlaşılıyor.

(Bu soruyu istendiğinde programın özel durumda, GHC tür denetleme aşamasında sonsuza harcama görünüyor.)

+0

Eğer yazım denetimi ise, sonsuz bir döngüde sıkışmış olabilir. kararsız örnekler. H-M çıkarımı bir * korkunç * en kötü durum zaman karmaşıklığına sahip olduğundan, sonuç çıkarımı da bir sorun olabilir. Düşünebildiğim tek makul sebepler bunlar. Bu sorunu çözdünüz mü? –

+0

@ C.A.McCann Sadece bir _huge_ kaynak dosyasını derlemeye çalışıyordum. Özellikle alışılmadık bir şey içermiyor, sadece çok büyük. Problemi çok daha küçük yaparak çözdüm. – MathematicalOrchid