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