นี่คือไลบรารีหลักที่สร้างแบบจำลองเช็คการยืม ใช้การวิเคราะห์ที่อธิบายไว้ในบล็อกโพสต์นี้และในการพูดคุยครั้งนี้ รายละเอียดอยู่ในหนังสือ Polonius
ชื่อนี้ได้มาจากคำพูดอันโด่งดัง "ทั้งผู้ยืมและผู้ให้ยืมจะต้องเป็น" ซึ่งมาจากตัวละคร Polonius ใน Hamlet ของเช็คสเปียร์
เป้าหมายประการหนึ่งของ repo นี้คือการทดสอบและเปรียบเทียบการใช้งานที่แตกต่างกันของอัลกอริทึมเดียวกัน คุณสามารถรันการวิเคราะห์ได้โดยใช้ cargo run
และคุณสามารถเลือกการวิเคราะห์ด้วย -a
ตัวอย่างเช่น หากต้องการทำงานกับตัวอย่างที่แยกจาก clap คุณอาจทำดังนี้:
> cargo +nightly run --release -- -a DatafrogOpt inputs/clap-rs/app-parser-{{impl}}-add_defaults/
Finished release [optimized] target(s) in 0.05 secs
Running ` target/release/borrow-check ' inputs/clap-rs/app-parser-{{impl}}-add_defaults/ ' `
--------------------------------------------------
Directory: inputs/clap-rs/app-parser-{{impl}}-add_defaults/
Time: 3.856s
คุณยังสามารถลอง -a Naive
เพื่อรับกฎไร้เดียงสา (อ่านได้มากขึ้น ช้าลง) ซึ่งเป็นกฎที่อธิบายไว้ในบล็อกโพสต์ คุณยังสามารถใช้ -a LocationInsensitive
เพื่อใช้การวิเคราะห์ที่ไม่คำนึงถึงตำแหน่งได้ (เร็วกว่า แต่อาจทำให้เกิดข้อผิดพลาดปลอมได้)
ตามค่าเริ่มต้น cargo run
จะพิมพ์เฉพาะเวลาเท่านั้น หากคุณต้องการดูผลลัพธ์ ให้ลอง --show-tuples
(ซึ่งจะแสดงข้อผิดพลาด) และอาจเป็น -v
(เพื่อแสดงการคำนวณระดับกลางเพิ่มเติม) คุณสามารถจัดหา --help
เพื่อรับเอกสารเพิ่มเติม
หากต้องการรันตัวตรวจสอบการยืมบนอินพุต คุณต้องสร้างข้อเท็จจริงอินพุตก่อน เพื่อสิ่งนั้น คุณจะต้องรันrustcด้วยตัวเลือก -Znll-facts
:
> rustc -Znll-facts inputs/issue-47680/issue-47680.rs
หรือสำหรับการสร้างอินพุตข้อเท็จจริงของลังโดยใช้แฟล็ก #![feature(nll)]
:
> cargo rustc -- -Znll-facts
สิ่งนี้จะสร้างไดเร็กทอรี nll-facts
โดยมีหนึ่งไดเร็กทอรีย่อยต่อฟังก์ชัน:
> ls -F nll-facts
{{impl}}-maybe_next/ main/
จากนั้นคุณสามารถรันบนไดเร็กทอรีเหล่านี้ได้