Elm Compiler ทำงานตลอดไปคอมพิวเตอร์เริ่มร้อน


100

ฉันไม่แน่ใจว่าอะไรเป็นสาเหตุของปัญหานี้ แต่ในโปรเจ็กต์ฉันกำลังสร้างคอมไพเลอร์ใช้เวลาหลายชั่วโมงในการคอมไพล์โมดูล ขนาดรวมของ codebase ของฉันคือ 352KB แต่ไม่มีโมดูลใดที่มีขนาดใหญ่เกิน 10KB ฉันใช้พอร์ต Native แต่มันเป็นเรื่องเล็กน้อยมาก ฉันแค่ดึงDate.now()มันมา

มีอะไรที่รู้จักกันดีที่จะทำให้คอมไพเลอร์ elm ต้องใช้เวลาตลอดไปในการรวบรวม? ฉันไม่มีการอ้างอิงมากนัก แต่ฉันใช้ Html เป็นจำนวนมาก ฉันจะขอบคุณคำแนะนำใด ๆ เกี่ยวกับสิ่งที่จะทำให้เกิดสิ่งนี้

แก้ไข

ดังนั้นปรากฎว่านิพจน์กรณีใหญ่จะทำให้เครื่องมือเพิ่มประสิทธิภาพใช้เวลานานโดยเท่ากับ 0.16 นี่คือการอภิปราย on Elm-พูดคุยนำขึ้นปัญหาและสรุปสาระสำคัญของการจับคู่กรณีที่น่ารังเกียจ

ฉันเดาว่าต้องละเอียดและเก็บแครอทไว้ที่นั่นทำไมคอมไพเลอร์ของ elm ถึงใช้เส้นทางนี้สำหรับการจับคู่กรณี เกิดอะไรขึ้นที่นี่? เหตุใดคอมไพเลอร์จึงใช้เวลานานกว่าหนึ่งชั่วโมงในการปรับแต่งรูปแบบที่ตรงกันกว่า 60+ รูปแบบในคำสั่ง case


4
ฉันอยากรู้. คอมไพลเลอร์ Elm มีการเพิ่มประสิทธิภาพแบบใดโดยใช้เวลาหลายชั่วโมงในการรวบรวมนิพจน์เคส สำนวนกรณีของคุณดูไม่ใหญ่เกินไป (อย่างน้อยก็ไม่ใหญ่พอสำหรับคอมพิวเตอร์) นั่นหมายความว่าคอมไพเลอร์ Elm มีอัลกอริทึมการเพิ่มประสิทธิภาพที่แย่มากจริงๆจริงๆจริงๆจริงๆจริงๆจริงๆจริงๆ ตัวอย่างเช่นลองนึกดูว่าจะต้องใช้เวลานานแค่ไหนในการรวบรวมนิพจน์เคสกับโปเกมอนทั้งหมด 721 ตัว
Aadit M Shah

5
ฉันเดาว่าคำตอบอยู่ที่นี่บางทีคุณควรลองเพิ่มhaskellแท็กและดูว่าคนที่ haskell สามารถเปิดเผยบางสิ่งกับเราได้หรือไม่
halfzebra

5
ฉันคิดว่าคุณควรถามคำถามใหม่ในสถานที่ที่ดีกว่าในการแก้ไขเรื่องของเคสและตอบคำถามของคุณเองโดยเพียงแค่อธิบายว่าเรื่องของเคสนั้นช้า ด้วยเหตุใดโค้ดที่เกี่ยวข้องจึงอยู่ที่นี่: github.com/elm-lang/elm-compiler/blob/master/src/Optimize เอกสารของ Scott & Ramsey ที่อ้างถึงอธิบายว่าการฮิวริสติกแบบ "small branching factor" นั้นช้าอย่างน่าหายนะ ในโค้ดด้านบนที่ฮิวริสติกถูกใช้เป็นตัวตัดสายเมื่อมีค่าเริ่มต้นเล็กน้อย ดังนั้นฉันเดิมพันในตัวอย่างที่ไม่ดีของคุณความสัมพันธ์เริ่มต้นเล็ก ๆ น้อย ๆ มากและเราเจอกรณีที่น่ากลัว ใช้เวลาของฉัน: Elm ไม่ควรใช้ SBF เป็นปัจจัยหยุดเต็มรูปแบบ
sclv

24
คุณช่วยตอบคำถามนี้ด้วยตัวเองได้ไหมเพื่อที่จะไม่ปรากฏในรายการที่ยังไม่ได้ตอบ
Julian Leviston

6
มันเคยคอมไพล์เสร็จจริงหรือ?
สมควร 7

คำตอบ:


3

นิพจน์กรณีใหญ่จะทำให้เครื่องมือเพิ่มประสิทธิภาพใช้เวลานานโดยเท่ากับ 0.16 นี่คือการอภิปราย on Elm-พูดคุยนำขึ้นปัญหาและสรุปสาระสำคัญของการจับคู่กรณีที่น่ารังเกียจ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.