เจอร์รี่กล่าวว่า: ... ผลที่ได้คือไม่ได้ค่อนข้าง c ++ อีกต่อไปในขณะที่คำอุปมาของฉันก็คือว่ามันเป็นอย่างชัดเจน c ++ เพียงแตกต่างกันเล็กน้อยภาษาเพราะโปรแกรมใช้รูปแบบอื่น ๆ การประชุมและรูปแบบการเขียน
นี่คือเหตุผลหลักของฉันสำหรับการปิดการใช้งาน:
ความเข้ากันได้ไบนารี
การข้ามภาษาและขอบเขตการแปลไม่ได้กำหนดไว้อย่างดีในระดับสากลหรือไม่ได้กำหนด หากคุณต้องการรับประกันว่าโปรแกรมของคุณทำงานภายในโดเมนของพฤติกรรมที่กำหนดคุณจะต้องกักกันข้อยกเว้นที่จุดออกจากโมดูล
ขนาดที่ทำงานได้
นี่คือขนาดไบนารีของโปรแกรมฟรีที่เป็นข้อยกเว้นที่ฉันเขียนสร้างโดยไม่มีและเปิดใช้งานข้อยกเว้น:
โดยไม่มีข้อยกเว้น:
- executable + dependencies: 330
- ไฟล์สั่งการแบบถอดได้สุดท้าย (build build): 37
ด้วยข้อยกเว้น:
- executable + dependencies: 380
- ไฟล์สั่งการที่ถูกปล้นขั้นสุดท้าย (build build): 44
คำเตือน: นั่นคือคอลเล็กชันของไลบรารีและโปรแกรมที่มีการส่ง / จับเป็นศูนย์ ธงคอมไพเลอร์จะช่วยให้ข้อยกเว้นในห้องสมุดมาตรฐาน C ++ ดังนั้นค่าใช้จ่ายในโลกแห่งความเป็นจริงจึงเห็นมากกว่า 19% ในตัวอย่างนี้
คอมไพเลอร์: apple gcc4.2 + llvm ขนาดเป็น MB
ความเร็ว
แม้จะมีคำว่า "การยกเว้นค่าใช้จ่ายที่เป็นศูนย์" แต่พวกเขายังคงเพิ่มค่าใช้จ่ายบางอย่างแม้ว่าจะไม่มีอะไรเกิดขึ้น ในกรณีข้างต้นมันเป็นโปรแกรมที่สำคัญเกี่ยวกับประสิทธิภาพ (การประมวลสัญญาณการสร้างการนำเสนอการแปลงด้วยชุดข้อมูล / สัญญาณขนาดใหญ่เป็นต้น) ข้อยกเว้นไม่ใช่คุณสมบัติที่จำเป็นในการออกแบบนี้ในขณะที่ประสิทธิภาพมีความสำคัญมาก
ความถูกต้องของโปรแกรม
ดูเหมือนว่ามีเหตุผลแปลก ๆ ... หากการขว้างปาไม่ใช่ตัวเลือกคุณต้องเขียนโปรแกรมที่ค่อนข้างเข้มงวดถูกต้องและผ่านการทดสอบอย่างดีเพื่อรับประกันว่าโปรแกรมของคุณจะทำงานได้อย่างถูกต้องและไคลเอนต์นั้นใช้อินเทอร์เฟซอย่างถูกต้อง ไม่ตรวจสอบรหัสข้อผิดพลาดแล้วคุณสมควรได้รับ UB) ผลลัพธ์? คุณภาพการใช้งานเพิ่มขึ้นอย่างมากและปัญหาได้รับการแก้ไขอย่างรวดเร็ว
ความง่าย
ข้อยกเว้นการใช้งานการจัดการไม่ได้รับการปรับปรุงให้ทันสมัยอยู่เสมอ พวกเขายังเพิ่มความซับซ้อนมากเพราะการใช้งานสามารถมีหลายทางออกมากมาย มันง่ายกว่าในการอ่านและบำรุงรักษาโปรแกรมที่ซับซ้อนสูงเมื่อใช้ชุดเล็ก ๆ ที่กำหนดไว้ดีพิมพ์ออกกลยุทธ์ที่ฟองสบู่และจัดการโดยลูกค้า ในกรณีอื่น ๆ การใช้งานอาจใช้เวลามากขึ้นหรือการอ้างอิงของพวกเขาอาจแนะนำพวกเขา ลูกค้าไม่สามารถป้องกันการออกจากสิ่งเหล่านี้ได้อย่างง่ายดายหรืออย่างง่ายดาย ฉันเขียนและอัปเดตห้องสมุดจำนวนมากมีวิวัฒนาการและการปรับปรุงบ่อยครั้ง การพยายามทำให้ทุกอย่างสอดคล้องกับลำดับการออกยกเว้น (ในฐานข้อมูลขนาดใหญ่) จะไม่ใช้เวลาและอาจเพิ่มเสียงรบกวนและ cruft เป็นจำนวนมาก เนื่องจากความถูกต้องของโปรแกรมที่เพิ่มขึ้นและการทดสอบเพิ่มเติม
ประวัติ / รหัสที่มีอยู่
ในบางกรณีพวกเขาไม่เคยได้รับการแนะนำด้วยเหตุผลทางประวัติศาสตร์ codebase ที่มีอยู่ไม่ได้ใช้งานการเปลี่ยนแปลงโปรแกรมอาจใช้เวลาหลายปีและทำให้มันน่าเกลียดจริงๆที่จะรักษาเพราะการทับซ้อนกันในการประชุมและการใช้งาน
ข้อเสีย
แน่นอนว่ามีข้อเสียที่ใหญ่ที่สุดคือ: ความไม่เข้ากัน (รวมเลขฐานสอง) กับห้องสมุดอื่น ๆ และความจริงที่ว่าคุณจะต้องใช้โปรแกรมจำนวนมากเพื่อให้เหมาะกับรุ่นนี้