ระบบประเภทที่ป้องกันการรั่วไหลของหน่วยความจำที่เกี่ยวข้องกับความขี้เกียจ?


10

บางทีแหล่งที่มาหลักของปัญหาประสิทธิภาพการทำงานใน Haskell คือเมื่อโปรแกรมสร้างความลึกที่ไม่ได้ จำกัด ซึ่งทำให้เกิดการรั่วไหลของหน่วยความจำและการล้นสแต็กที่อาจเกิดขึ้น ตัวอย่างคลาสสิกคือการกำหนดsum = foldr (+) 0ใน Haskell

มีระบบประเภทใดบ้างที่มีการบังคับใช้การขาด thunks ดังกล่าวในโปรแกรมที่ใช้ภาษาสันหลังยาวหรือไม่?

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

คำตอบ:


4

การเรียกเก็บภาษีโดยแคลคูลัสตามมูลค่าการผลักดันทำให้ความแตกต่างระหว่างค่าและ thunks ของพวกเขา สำหรับค่าvประเภทtyการคำนวณมีประเภทthunk v U tyภาษาของลินด์เลย์และแฟรงค์ของแม็คไบรด์ได้รับแรงบันดาลใจจาก CBPV ทำให้ความแตกต่างระหว่างการคำนวณและค่านิยมชัดเจนแม้จะแตกต่างจาก Haskell แต่แฟรงค์ก็เข้มงวด

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