2
คอมไพเลอร์ควรรายงานข้อผิดพลาดและคำเตือนอย่างไร
ฉันไม่ได้วางแผนที่จะเขียนคอมไพเลอร์ในอนาคตอันใกล้นี้ ยังฉันค่อนข้างสนใจกับเทคโนโลยีคอมไพเลอร์และสิ่งนี้จะทำให้ดีขึ้นได้อย่างไร เริ่มต้นด้วยภาษาที่คอมไพล์คอมไพเลอร์ส่วนใหญ่มีระดับข้อผิดพลาดสองระดับ: คำเตือนและข้อผิดพลาดส่วนใหญ่เป็นสิ่งที่ไม่ร้ายแรงที่คุณควรแก้ไขเป็นครั้งแรกและข้อผิดพลาดที่บ่งบอกเวลาส่วนใหญ่ที่ไม่สามารถสร้างเครื่องได้ (หรือไบต์) รหัสจากอินพุต แม้ว่านี่จะเป็นคำจำกัดความที่ค่อนข้างอ่อนแอ ในบางภาษาเช่น Java คำเตือนบางอย่างเป็นไปไม่ได้ที่จะกำจัดโดยไม่ใช้@SuppressWarningคำสั่ง นอกจากนี้ Java ยังจัดการปัญหาที่ไม่ร้ายแรงบางอย่างเป็นข้อผิดพลาด (เช่นโค้ดที่เข้าไม่ถึงใน Java ทำให้เกิดข้อผิดพลาดด้วยเหตุผลที่ฉันต้องการทราบ) C # ไม่มีปัญหาเดียวกัน แต่มีเพียงเล็กน้อย ดูเหมือนว่าการรวบรวมเกิดขึ้นในหลายรอบและการส่งผ่านที่ล้มเหลวจะป้องกันการส่งต่อจากการดำเนินการต่อไป ด้วยเหตุนี้ข้อผิดพลาดที่คุณได้รับเมื่องานสร้างล้มเหลวมักจะประเมินค่าต่ำเกินไป ในการรันครั้งเดียวอาจกล่าวได้ว่าคุณมีข้อผิดพลาดสองข้อ แต่เมื่อคุณแก้ไขข้อผิดพลาดบางทีคุณอาจได้รับ 26 ข้อใหม่ การขุดไปที่ C และ C ++ เพียงแสดงชุดค่าผสมที่ไม่ดีในจุดอ่อนการวินิจฉัยการคอมไพล์ของ Java และ C # (แม้ว่าอาจจะมีความแม่นยำมากกว่าที่จะกล่าวว่า Java และ C # เพิ่งไปได้ด้วยปัญหาครึ่งหนึ่ง) คำเตือนบางอย่างควรเป็นข้อผิดพลาด (เช่นเมื่อเส้นทางโค้ดไม่คืนค่าทั้งหมด) และยังคงเป็นคำเตือนเพราะฉันคิดว่าในเวลาที่พวกเขาเขียนมาตรฐานเทคโนโลยีคอมไพเลอร์ก็ไม่ดีพอที่จะทำให้เป็นแบบนี้ ตรวจสอบที่จำเป็น ในหลอดเลือดดำเดียวกันคอมไพเลอร์มักตรวจสอบมากกว่ามาตรฐานกล่าว แต่ยังคงใช้ระดับข้อผิดพลาดคำเตือน "มาตรฐาน" สำหรับการค้นพบเพิ่มเติม …