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