พิมพ์ระบบเพื่อประสิทธิภาพ


11

ระบบประเภท (คงที่) มีอยู่ซึ่งพยายามทำให้เป็นลักษณะเฉพาะของประสิทธิภาพของโปรแกรมหรือไม่ ฉันไม่สามารถหาดูเหมือนจะพบความพยายามดังกล่าว

เนื่องจากระบบพิมพ์เป็น (หนึ่งใน) เครื่องมือที่ทรงพลังที่สุดในคลังแสงของโปรแกรมเมอร์เพื่อสร้างคำแถลงเกี่ยวกับโปรแกรมและเนื่องจากมีหลาย ๆ กรณีที่ประสิทธิภาพมีความสำคัญอย่างยิ่งจึงไม่น่าจะเป็นไปได้ที่จะจินตนาการถึงความพยายาม สร้างระบบแบบที่พยายามทำอย่างน้อยบางคำสั่งเกี่ยวกับลักษณะการจัดเก็บและรันไทม์ของโปรแกรม


1
ระบบประเภทของคุณจะพูดเกี่ยวกับประสิทธิภาพของif condition then expensive_operation else cheap_operationอะไร
svick

ฉันรู้ว่ามีการพัฒนาในการใช้การตีความเชิงนามธรรมเพื่ออนุมานความซับซ้อนของรหัสที่เลวร้ายที่สุดโดยอัตโนมัติ (และการเลิกจ้าง) คุณอาจสนใจมัน ...
บาคุริว

ไม่เกี่ยวข้องทั้งหมด แต่ยังคง: kernelnewbies.org/FAQ/LikelyUnossibleใน Linux kernel / gcc คอมไพเลอร์มีแนวโน้มที่ / มาโครไม่น่าที่จะเพิ่มประสิทธิภาพเส้นทางที่แน่นอน เช่นif (likely(operation_went_fine)) { // Do something } else if (unlikely(error_occured)) { // Do something else }
AmazingDreams

คำหลักที่ผันผวนและลงทะเบียนใน C เป็นสิ่งสำคัญ
mattnz

คำตอบ:


6

คุณสามารถจินตนาการระบบที่ซับซ้อนพอที่จะเกี่ยวข้องกับWCETหรือความซับซ้อนของโปรแกรม จากนั้นปัญหาคือการทำให้ตัววิเคราะห์ชนิดเสียง (หรือตัวตรวจสอบ) - เช่นกฎการพิมพ์ - เพื่อให้เป็นไปได้และใช้มันอย่างมีประสิทธิภาพเพียงพอที่จะทำให้มีประโยชน์พอสมควร

ระบบพิมพ์ส่วนใหญ่นั้นง่ายพอที่จะคำนวณได้อย่างรวดเร็วในทางปฏิบัติ (อย่างน้อยก็สำหรับชุดโปรแกรมที่เหมาะสมซึ่งนักพัฒนามนุษย์สามารถเขียนด้วยตนเอง)

ภาษาโปรแกรมเชิงวิชาการบางภาษา (เช่นAGDA ) มีระบบพิมพ์ที่ซับซ้อนมากซึ่งเป็นทัวริงสมบูรณ์ดังนั้นคอมไพเลอร์ของพวกเขาอาจใช้เวลานานมาก (อาจไม่มีที่สิ้นสุด)

(ถ้าฉันเข้าใจได้ดีปริญญาเอกของJérémie Salvucci กำลังดำเนินการอยู่ที่ LIP6 ในปารีสนั้นค่อนข้างเกี่ยวข้องกับคำถามของคุณฉันส่งอีเมลถึงเขาเกี่ยวกับเรื่องนี้คุณอาจมองหาภูมิภาคและประเภท ... )

จะเป็นอย่างไรตระหนักถึงทฤษฎีบทไรซ์แอนด์ลังเลปัญหา ระบบประเภทอาจไม่ได้เป็น bullet เงินที่คุณอาจต้องการให้เป็น (ดูที่ไม่มีกระสุน bullet เงินเก่า)


4
WCET คือ "เวลาดำเนินการกรณีที่เลวร้ายที่สุด" ในบริบทนี้ (ในกรณีที่คนอื่นที่ไม่ใช่ฉันสงสัย)
Klaas van Schelven

9
ภาษาที่พิมพ์อย่างไม่แน่นอนเช่น Agda, Coq, Epigram, Guru, Isabelle ฯลฯ "แก้ปัญหา" ปัญหาการหยุดชะงักทฤษฎีบทข้าวและเพื่อน ๆ โดยไม่ถูกทำให้สมบูรณ์ ไม่ว่าจะโดยการสร้าง (เช่นมันเป็นไปไม่ได้ที่จะเขียนวนรอบวนซ้ำ / ไม่สิ้นสุดการเรียกซ้ำ) โดยกำหนดให้โปรแกรมทั้งหมดจะต้องเขียนในลักษณะที่ผู้ตรวจสอบการยกเลิกสามารถพิสูจน์การเลิกจ้างหรือโดยให้โปรแกรมเมอร์ส่ง หลักฐานการยกเลิกเครื่องที่ตรวจสอบได้
Jörg W Mittag

3

ดูเหมือนเป็นไปได้อย่างชัดเจนในการสร้างระบบประเภทซึ่งจัดประเภทลักษณะประสิทธิภาพของประเภท(เช่น "เร็ว / ช้าสำหรับการเข้าถึงแบบอนุกรม" เร็ว / ช้าสำหรับการเข้าถึงแบบสุ่ม "," ประสิทธิภาพของหน่วยความจำ / ไม่มีประสิทธิภาพ ") คุณลักษณะเหล่านั้นอาจเป็นประเภทนามธรรมที่วางไว้ในลำดับชั้นในลักษณะที่ประเภทคอนกรีตที่สืบทอดมาจากพวกเขา อย่างไรก็ตามประสิทธิภาพของโปรแกรมใด ๆ ที่ใช้ประเภทเหล่านั้นจะขึ้นอยู่กับวิธีการใช้งาน / เข้าถึงจริง ๆ สำหรับระบบประเภทเพื่อสร้างคำสั่งเกี่ยวกับโปรแกรมเองการใช้ (การเข้าถึง) ประเภทเหล่านั้นจะมีตัวเองเป็นตัวแทนประเภท สิ่งนี้จะหมายถึงการบังคับให้ใช้โครงสร้างการควบคุมในตัว (เช่นสำหรับ / ในขณะที่ลูป) และใช้ประเภทที่นำมาใช้แทนดังนั้นลำดับชั้นอาจมีประเภทการเข้าถึงอนุกรมแบบนามธรรมและรายการลำดับอนุกรมการเข้าถึงแบบลำดับต้นไม้แบบอนุกรม - ประเภทการเข้าถึงและอื่น ๆประสิทธิภาพการใช้งานอย่างน้อยก็อาจมีการแสดงบางส่วนโดยการรวมกันและการประยุกต์ใช้ประเภทเหล่านี้กับแต่ละอื่น ๆ

ในภาษาที่ใช้งานได้เช่น Haskell - ซึ่งแทบจะไม่มีโครงสร้างการควบคุมอยู่เลย - มันดูเป็นจริงสำหรับฉันและใช้งานได้จริง ใน Java แต่ระบบดังกล่าวดูเหมือนว่าทำได้มากน้อย (ไม่เช่นนั้นมากจากการดำเนินการทั้งจากการบังคับใช้ / ความน่าเชื่อถือของผล)

Haskell ช่วยให้เราสามารถระบุจำนวนของโปรแกรมที่แน่นอนและให้วิธีการ จำกัด กิจกรรมเฉพาะภายในกล่องปิดผนึก เนื่องจากการขนานกัน / เกิดขึ้นพร้อมกันใน Haskell ถูกนำมาใช้ผ่านระบบประเภทมันอาจจะเป็นที่ถกเถียงกันอยู่ว่ามันเป็นส่วนหนึ่งของวิธีที่มีอยู่แล้ว (กับสิ่งที่คุณต้องการ) ในทางตรงกันข้ามภาษาที่จำเป็น (แม้แต่ภาษาที่พิมพ์แบบสแตติกเช่น Java) มีตัวเข้ารหัสหลายวิธีที่จะล้มล้างความพยายามใด ๆ

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