คำถามติดแท็ก compilers

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

2
มีใครใช้ Pottier และ Gauthier ของ polymorphic defunctionalization ในโมดูลคอมไพเลอร์หรือไม่?
Defunctionalizationคือการแปลงโปรแกรมที่แปลงโปรแกรมที่มีลำดับสูงกว่าไปเป็นโปรแกรมที่มีลำดับที่หนึ่ง แนวคิดคือให้โปรแกรมมีแลมบ์ดาบทคัดย่อจำนวน จำกัด เท่านั้นดังนั้นคุณสามารถแทนที่แลมบ์ดาแต่ละอันด้วยรหัสและแอปพลิเคชันฟังก์ชั่นแต่ละอันด้วยการเรียกใช้ขั้นตอนการสมัครที่แยกสาขาในรหัสนั้น บางครั้ง สิ่งนี้ถูกใช้ในคอมไพเลอร์สำหรับภาษาที่ใช้งานได้ แต่การบังคับใช้ของมันถูก จำกัด ด้วยความจริงที่ว่า defunctionalization คือการแปลงทั้งโปรแกรม (คุณต้องรู้จักฟังก์ชันทั้งหมดในโปรแกรม) และโปรแกรมคอมไพเลอร์ทั้งหมดเท่านั้นที่ใช้ มัน. อย่างไรก็ตามPottier และ Gauthierได้กำหนดอัลกอริทึม defunctionalization พิมพ์ polymorphic โดยใช้การพิมพ์ที่ซับซ้อนมากขึ้นที่เกี่ยวข้องกับ GADT ตอนนี้เมื่อได้รับการเข้ารหัสแล้วก็เป็นไปได้ที่จะเพิ่มเคส catch-all ให้เป็นประเภทข้อมูลแลมบ์ดาที่ไม่ใช่แท็ก แต่มีฟังก์ชั่นการสั่งซื้อที่สูงกว่า ซึ่งหมายความว่าเป็นไปได้ที่จะใช้การเข้ารหัสเพื่อทำหน้าที่เป็นโมดุลย์ต่อโมดูล มีใครทำสิ่งนี้และชี้ให้ฉันไปที่คอมไพเลอร์โดยใช้ความคิดนี้หรือไม่? (คอมไพเลอร์ของเล่นนั้นโอเคและในความเป็นจริงก็เป็นที่ต้องการ)

4
มีอะไรใหม่ในเทคนิคการเพิ่มประสิทธิภาพของคอมไพเลอร์ในช่วงไม่กี่ปีที่ผ่านมา?
ฉันสนใจที่จะเพิ่มประสิทธิภาพการไหลของข้อมูลและกราฟการไหลของการควบคุมและโดยเฉพาะอย่างยิ่งการคำนวณที่ซับซ้อนมากขึ้น แต่มันจะน่าสนใจที่จะทราบเกี่ยวกับการประดิษฐ์ล่าสุดในด้านการปรับปรุงประสิทธิภาพช่องมอง

1
คอมไพเลอร์สตาลินเพิ่มประสิทธิภาพอย่างไร้ความปราณี แต่อย่างไร
แถลงการณ์การวิจัยของ JM Siskind : สตาลินเป็นคอมไพเลอร์ปรับให้เหมาะสมสำหรับโครงการที่ดำเนินการวิเคราะห์แบบคงที่ทั้งโปรแกรมและใช้ผลลัพธ์ของการวิเคราะห์เพื่อสร้างรหัสที่มีประสิทธิภาพมาก สตาลินใช้เทคนิคการวิเคราะห์แบบสถิตจำนวนมาก มันดำเนินการในรูปแบบใหม่ของการวิเคราะห์การไหลหลายเท่าที่ใช้การวิเคราะห์กระแสแบบวนซ้ำเพื่อทำการแยกการไหล: การโคลนสำเนาเฉพาะของขั้นตอนและการมอบหมายต่อไซต์ที่โทรไปยังโคลนดังกล่าว มันใช้ผลลัพธ์ของการวิเคราะห์การไหลเพื่อทำการวิเคราะห์อายุการใช้งานการวิเคราะห์การหลบหนีการวิเคราะห์ชี้ไปที่และการวิเคราะห์นามแฝง การวิเคราะห์เหล่านี้สนับสนุนรูปแบบใหม่ของการแปลงแบบปิดน้ำหนักเบาซึ่งกำจัดช่องปิดส่วนใหญ่โดยใช้เทคนิคเช่นโลกาภิวัตน์ที่แปรปรวนและการโลคัลไลซ์การบีบอัดสแตติกเชนและมักจะกำจัดการปิดส่วนใหญ่ออกจากโปรแกรม นอกจากนี้ยังใช้การวิเคราะห์ด้านบนเพื่อรองรับการจัดการพื้นที่เก็บข้อมูลตามทิศทางการไหลโดยที่การรวบรวมขยะแบบรันไทม์จะถูกแทนที่ด้วยการจัดสรรแบบคงที่และการจัดสรรคืนบนพื้นฐานต่อค่านามธรรมและต่อจุดโปรแกรม นอกจากนี้ยังทำการแปลง CPS ที่มีน้ำหนักเบาแบบไหลลื่นโดยใช้ส่วนขยายของเทคนิคที่บุกเบิกโดย Screamer เพื่อสนับสนุนการทำงานต่อเนื่องที่มีประสิทธิภาพอย่างยิ่ง ในที่สุดก็รองรับการเลือกอินไลน์การกำกับการไหลและการเป็นตัวแทนระดับต่ำเพื่อเลือกการนำไปปฏิบัติ (หรือการไม่ใช้) ของแท็กการตรวจสอบแท็กและการจัดส่งแท็กบนพื้นฐานค่าต่อนามธรรมและต่อจุดโปรแกรม สิ่งนี้จะกำจัดแท็กเวลาทำงานส่วนใหญ่การตรวจสอบแท็กการติดแท็กการลอกแท็กการแจกจ่ายแท็กการชกมวยและการเลิกทำกล่องจากโปรแกรม โดยที่การรวบรวมขยะรันไทม์ถูกแทนที่ด้วยการจัดสรรแบบสแตติกและการจัดสรรคืนบนพื้นฐานต่อค่านามธรรมและต่อโปรแกรมจุด นอกจากนี้ยังทำการแปลง CPS ที่มีน้ำหนักเบาแบบไหลลื่นโดยใช้ส่วนขยายของเทคนิคที่บุกเบิกโดย Screamer เพื่อสนับสนุนการทำงานต่อเนื่องที่มีประสิทธิภาพอย่างยิ่ง ในที่สุดก็รองรับการเลือกอินไลน์การกำกับการไหลและการเป็นตัวแทนระดับต่ำเพื่อเลือกการใช้งาน (หรือการไม่ใช้) ของแท็กการตรวจสอบแท็กและการจัดส่งแท็กบนพื้นฐานค่าต่อนามธรรมและต่อจุดโปรแกรม สิ่งนี้จะกำจัดแท็กเวลาทำงานส่วนใหญ่การตรวจสอบแท็กการติดแท็กการลอกแท็กการแจกจ่ายแท็กการชกมวยและการเลิกทำกล่องจากโปรแกรม โดยที่การรวบรวมขยะรันไทม์ถูกแทนที่ด้วยการจัดสรรแบบสแตติกและการจัดสรรคืนบนพื้นฐานต่อค่านามธรรมและต่อโปรแกรมจุด นอกจากนี้ยังทำการแปลง CPS ที่มีน้ำหนักเบาแบบไหลลื่นโดยใช้ส่วนขยายของเทคนิคที่บุกเบิกโดย Screamer เพื่อสนับสนุนการทำงานต่อเนื่องที่มีประสิทธิภาพอย่างยิ่ง ในที่สุดก็รองรับการเลือกอินไลน์การกำกับการไหลและการเป็นตัวแทนระดับต่ำเพื่อเลือกการใช้งาน (หรือการไม่ใช้) ของแท็กการตรวจสอบแท็กและการจัดส่งแท็กบนพื้นฐานค่าต่อนามธรรมและต่อจุดโปรแกรม สิ่งนี้จะกำจัดแท็กเวลาทำงานส่วนใหญ่การตรวจสอบแท็กการติดแท็กการลอกแท็กการแจกจ่ายแท็กการชกมวยและการเลิกทำกล่องจากโปรแกรม ใช้ส่วนขยายของเทคนิคที่เป็นหัวหอกใน Screamer เพื่อสนับสนุนการทำงานต่อเนื่องที่มีประสิทธิภาพอย่างยิ่ง ในที่สุดก็รองรับการเลือกอินไลน์การกำกับการไหลและการเป็นตัวแทนระดับต่ำเพื่อเลือกการใช้งาน (หรือการไม่ใช้) ของแท็กการตรวจสอบแท็กและการจัดส่งแท็กบนพื้นฐานค่าต่อนามธรรมและต่อจุดโปรแกรม สิ่งนี้จะกำจัดแท็กเวลาทำงานส่วนใหญ่การตรวจสอบแท็กการติดแท็กการลอกแท็กการแจกจ่ายแท็กการชกมวยและการเลิกทำกล่องจากโปรแกรม ใช้ส่วนขยายของเทคนิคที่เป็นหัวหอกใน Screamer เพื่อสนับสนุนการทำงานต่อเนื่องที่มีประสิทธิภาพอย่างยิ่ง …
14 compilers 

2
ปัญหาเปิดปัจจุบันในทฤษฎีคอมไพเลอร์คืออะไร
ทฤษฎีคอมไพเลอร์ดูเหมือนว่าจะเป็นวิชาที่ค่อนข้างถูกตรวจสอบ มีปัญหาแบบเปิดหรือการวิจัยปัจจุบันที่เกิดขึ้นในสาขาใดบ้าง

2
คอมไพเลอร์สำหรับประเภทที่ขึ้นต่อกันนั้นหนักกว่าผู้บุกรุกหรือไม่?
ฉันได้เรียนรู้บางอย่างเกี่ยวกับการใช้งานประเภทที่ขึ้นต่อกันเช่นแบบฝึกหัดนี้แต่ส่วนใหญ่ของพวกเขากำลังใช้ล่าม คำถามของฉันคือดูเหมือนว่าการใช้คอมไพเลอร์สำหรับชนิดพึ่งพานั้นยากกว่าคอมไพเลอร์มากเพราะคุณสามารถประเมินอาร์กิวเมนต์ชนิดพึ่งพาได้สำหรับการตรวจสอบชนิด ดังนั้น ความไร้เดียงสาของฉันถูกไหม หากถูกต้องตัวอย่าง / แหล่งข้อมูลเกี่ยวกับการใช้ภาษาที่ตรวจสอบแบบสแตติกสนับสนุนประเภทที่ขึ้นกับอะไรบ้าง

1
การย่อขนาดโปรแกรม
การลดขนาดวงจรเป็นปัญหาเพื่อลดขนาดของวงจรที่กำหนด มีอะไรที่คล้ายกันสำหรับโปรแกรมทั่วไปหรือไม่ โดยเฉพาะคำถามของฉันคือ - มีอัลกอริทึมที่มีอยู่เพื่อย่อ # คำสั่งสำหรับโปรแกรมที่กำหนดหรือไม่ ฉันรู้ว่ามันเป็นปัญหาที่แก้ไม่ตก แต่ฉันไม่ได้มองหาวิธีแก้ปัญหาที่คืนสิ่งที่ดีที่สุด ในขณะที่เราสามารถใช้การแปลงคอมไพเลอร์ก่อนหน้านี้เพื่อทำสิ่งนี้ได้ฉันกำลังมองหาบางอย่างที่ฉันไม่จำเป็นต้องกำหนดชุดของการแปลงและอัลกอริทึมที่แคบมากเพื่อค้นหามันไว้ล่วงหน้า แก้ไข: คำถามอื่น ๆ ที่ฉันมีคือสามารถมีแคลคูลัสที่มีเสียงและสมบูรณ์ที่ช่วยให้เราสามารถสำรวจพื้นที่ทั้งหมดของโปรแกรมที่มีความหมายเชิงความหมายเช่นนั้นหรือเป็นไปไม่ได้

1
วรรณคดีเรื่องการวิเคราะห์นามแฝง
ฉันเขียนวิทยานิพนธ์ปริญญาโทของฉันใน CS และฉันทำงานกับการวิเคราะห์นามแฝง สิ่งที่ฉันสนใจคือการวิเคราะห์ที่ละเอียดอ่อนที่จำเป็นต้องมี ฉันกำลังค้นหาข้อความที่อธิบายพื้นฐานของเรื่องนี้อย่างละเอียด แต่ไม่สามารถระบุสิ่งที่เหมาะสมได้ ฉันรอดชีวิตจากหนังสือตำราจำนวนหนึ่งเกี่ยวกับคอมไพเลอร์และการวิเคราะห์แบบคงที่ แต่ไม่พบสิ่งใดที่นั่น ฉันพบเอกสารจำนวนมากที่ใช้การวิเคราะห์นามแฝง แต่ส่วนใหญ่เน้นไปที่ปัญหาที่ใช้การวิเคราะห์นามแฝงและไม่ได้อธิบายขั้นตอนวิธีการวิเคราะห์นามแฝงโดยละเอียด บางคนมุ่งเน้นที่ C ซึ่งไม่เหมาะสมเนื่องจากความซับซ้อนที่เพิ่มขึ้นของตัวชี้ทั่วไป ข้อความที่ดีที่สุดที่ฉันได้ค้นพบคือCompositional Pointer and Escape Analysis สำหรับโปรแกรม Javaโดย Whaley and Rinard มันเป็นกระดาษที่ยอดเยี่ยมและเป็นจุดเริ่มต้นที่ดี แต่มันไม่ได้กล่าวถึงการวิเคราะห์นามแฝงโดยเฉพาะ ปัญหาดูเหมือนทั่วไปดังนั้นฉันคาดหวังว่าจะมีอัลกอริทึมที่ยอมรับได้เพื่อแก้ปัญหา ไม่มีใครมีตัวชี้ไปยังข้อความในเรื่องนี้หรือไม่?

2
คอมไพเลอร์ที่ผ่านการรับรองและการเพิ่มประสิทธิภาพใน Coq / Agda
ฉันสนใจคอมไพเลอร์ที่ผ่านการตรวจสอบอย่างเป็นทางการในทฤษฎีประเภทมาร์ติน - โลฟเช่น Coq / Agda ในขณะนี้ฉันได้เขียนตัวอย่างของเล่นเล็ก ๆ ฉันสามารถพิสูจน์ได้ว่าการเพิ่มประสิทธิภาพของฉันถูกต้อง ตัวอย่างเช่นสามารถลบส่วนที่มีศูนย์ได้เช่นนิพจน์เช่น "x + 0" มีการปรับให้เหมาะสมที่ยากที่จะดำเนินการกับคอมไพเลอร์ปกติซึ่งจะเป็นตัวอย่างที่ดีหรือไม่? เป็นไปได้หรือไม่ที่จะพิสูจน์คุณสมบัติบางอย่างของโปรแกรมที่อนุญาตการเพิ่มประสิทธิภาพที่ไม่สามารถทำได้ด้วยคอมไพเลอร์ปกติ? (เช่นไม่มีข้อสรุปที่เป็นไปได้กับนักทฤษฎีบท) ฉันจะสนใจในความคิดหรือตัวอย่างและอ้างอิงในหัวข้อ คำถามที่เกี่ยวข้อง: การ พิสูจน์ความถูกต้องของคอมไพเลอร์ แก้ไข: ตามที่ Tsuyoshi ใส่ไว้ในข้อคิดเห็น: ฉันกำลังมองหาเทคนิคการปรับให้เหมาะสมซึ่งยากที่จะนำไปใช้ถ้าคอมไพเลอร์เขียนด้วย (พูด) C แต่ง่ายต่อการนำไปใช้ถ้าคอมไพเลอร์เขียนด้วย (พูด) Coq เมื่อ Agda รวบรวมไปยัง C (ผ่าน Haskell) มันเป็นไปได้ที่จะทำทุกอย่างที่เป็นไปได้ใน Agda เช่นกันใน C อาจเป็นประโยชน์เพียงอย่างเดียวของผู้พิสูจน์ทฤษฎีบทเช่น Coq / Agda คือคอมไพเลอร์และการปรับให้เหมาะสมสามารถตรวจสอบได้ edit2: ตามคำแนะนำของ Vijay DI เขียนสิ่งที่ฉันอ่านมา …

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