ใครออกแบบข้อยกเว้น


22

ข้อยกเว้นและการจัดการข้อยกเว้นมาจากที่ใด

ฉันชอบวิธีที่. NET ใช้งานฉันชอบวิธีที่ C ++ รองรับ (แต่ห้องสมุดน่าเสียดายที่ใช้รหัสส่งคืนหรือเขียนเป็น C แทน) ฉันรู้ว่ามันค่อนข้างมาตรฐานในทุกภาษาใหม่ แต่ใครเป็นคนออกแบบมันมาก่อนหรือมาจากที่ไหน

C ++ เป็นภาษาแรกที่ใช้หรือไม่ ฉันไม่รู้จักคนอื่นที่มีอายุมากกว่า


7
เห็นได้ชัดว่าPlankalkülมีข้อยกเว้นในการจัดการในปี 1940 แม้ว่าคอมไพเลอร์แรกไม่ได้อยู่จนกระทั่งประมาณ 50 ปีต่อมา ( en.wikipedia.org/wiki/Plankalk%C3%BCl )
FrustratedWithFormsDesigner

คุณสามารถพูดได้ว่า C ++ เป็นภาษาหอคอยไม่ใช่งาช้างตัวแรกที่นำข้อยกเว้นมาสู่ฝูงชน แต่แนวคิดได้รับมาตั้งแต่ต้น (หรือเป็นเวลานานเลือกของคุณ)
Martin York

11
กำลังมองหาใครบางคนที่จะบีบคอ? ฉันล้อเล่น ...
Mark Canlas

1
เราควรคำนึงถึงอิทธิพลจากข้อยกเว้นฮาร์ดแวร์หรือไม่

1
@FrustratedWithFormsDesigner: กรามของฉันเพิ่งกระแทกพื้น ฉันรู้จัก Konrad Zuse แต่ไม่รู้เรื่องนั้น เขาเป็นพ่อของพวกเราทุกคน
Bob Murphy

คำตอบ:


20

การยกและการดักจับข้อยกเว้นมีมานานแล้ว ไซต์นี้ระบุว่ามีการยกเว้นข้อยกเว้นใน PL / I: http://www.math.grin.edu/~rebelsky/Courses/CS302/98S/Outlines/outline.02.html

ซึ่งอยู่ในปี 1967 ตามหน้านี้ (รวมถึงแผนภูมิภาษาคอมพิวเตอร์และคุณสมบัติที่ครอบคลุม แต่ไม่ละเอียด): http://community.borland.com/article/0,1410,22741,00.html

มีหลายภาษาที่ใช้เทคนิคนี้ - ADA, ALGOL, FORTRAN, ML [... ]

ยกมาจากที่นี่

วิกิพีเดียมีรายละเอียดเพิ่มเติมเกี่ยวกับการจัดการข้อยกเว้นใน PL / 1 หน้านั้นยังหมายถึง PL / 1 เป็นคนแรก แน่นอนว่านี่ไม่ใช่ข้อพิสูจน์ทางวิทยาศาสตร์ :-)

สำหรับผู้ที่ได้รับการออกแบบด้วยตัวเอง PL / 1 บทความไม่ได้กล่าวถึงชื่อเฉพาะคณะกรรมการต่างๆของ IBM


Execptions ใน PL / I เป็นประเภทเฉพาะของเหตุการณ์ คุณสามารถกำหนดและเพิ่มกิจกรรมของคุณเองและเขียนตัวจัดการเหตุการณ์เพื่อจับพวกเขา ISTR มีการสนับสนุนบางอย่างสำหรับสิ่งอำนวยความสะดวกของระบบ (VTAM) ดังนั้นคุณสามารถเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์ได้
TMN

คุณนึกถึงภาษาใด ๆ ก่อนหน้าภาษาซีพลัสพลัสซึ่งให้ความสะดวกในการทำความสะอาดอย่างเป็นระเบียบระหว่างการคลี่คลายคลี่คลายหรือไม่?
supercat

มีข้อยกเว้นใน FORTRAN หรือไม่ มาเลย ...
Michał Kosmulski

6

ฮอฟMössenböckและ Pirkelbauer (ในของพวกเขา 1997 กระดาษยกเว้นศูนย์ค่าใช้จ่ายในการจัดการการใช้ metaprogramming ) ยืนยันว่าแนวคิดของข้อยกเว้นได้รับการแนะนำในยุคหมายถึงจอห์นบี Goodenough 1975 การจัดการข้อยกเว้น: ปัญหาและสัญกรณ์เสนอกระดาษในการสื่อสารของ พลอากาศเอก ในนั้นเขา conflates การจัดการข้อยกเว้นที่ทันสมัยกับความคิดทั่วไปของการลงทะเบียนโทรกลับและสัญกรณ์ที่เสนอของเขาดูเหมือนว่าคุณสมบัติข้อมูลเมตาของแอตทริบิวต์ที่ทันสมัยกว่าtry/catchแต่มัน (หรืออย่างน้อยก็ส่วนที่ 2) เป็นภาพรวมที่ดีของสถานะของการจัดการข้อยกเว้นใน กลางอายุเจ็ดสิบ

บางทีการสังเกตยังเป็นraise/rescueกลไกในAlefซึ่งเราสามารถมองว่าเป็นรูปแบบดั้งเดิมของcatchบล็อกเพื่อว่าเราคิดว่าพวกมันผุดขึ้นมาจากคิ้ว Stroustroup อย่าง Athena จาก Zeus's


3
คุณอ่านคำตอบก่อนหน้านี้หรือไม่? เป็นวันที่มีข้อยกเว้น 1967: แปดปีก่อนวันที่คุณอ้างถึง
gnat

4
ฉันทำ แต่ฉันพยายามติดตามประวัติระหว่างการปรากฏตัวของข้อยกเว้นใน C ++ และคำสั่ง ON CONDITION ใน PL / I ฉันเดาว่าการเพิ่มของฉันไม่เป็นที่พอใจ
Wtrmute

1
ในความเป็นจริงเอกสารจำนวนมากเกี่ยวกับการจัดการข้อยกเว้นอ้างถึงดีพอสำหรับภาพรวมการอภิปรายและอิทธิพลที่มีต่อกลไกข้อยกเว้นที่ทันสมัย ​​- มันมีเหตุผลที่จะพิจารณามันน้ำเชื้อ ในอีกทางหนึ่ง "การจัดการข้อยกเว้น" มีความหมายที่แตกต่างกันในหลายภาษาและฉันคาดว่าสิ่งนี้จะเป็นจริงโดยเฉพาะก่อนที่จะตีพิมพ์ของ Goodenough เมื่อคำนึงถึงสิ่งนี้คำตอบแบบอนุรักษ์นิยมสำหรับคำถามนี้ก็สามารถติดตามกลับไปที่การกระโดดตามเงื่อนไข
Thiago Silva

@gnat: คุณอ่านความคิดเห็นที่ติดตามความคิดของปี 1940 หรือไม่? แม้ว่าความคิดเห็นนั้นจะไม่มีอยู่คำถามก็คือ "ข้อยกเว้นมาจากไหน" ไม่ใช่ "ตั้งชื่อวันที่เร็วที่สุดเมื่อมีการใช้ข้อยกเว้น"
Michael Shaw

@MichaelShaw คำตอบที่ฉันอ้างถึงถูกโพสต์ในเวลาเดียวกันกับความคิดเห็นที่คุณพูดถึงและมันก็พยายามที่จะตอบคำถามที่ถาม ("เป็นคนแรก") ตรงข้ามกับที่โพสต์นี้ล้มเหลวในการรับรู้หลักฐานที่เห็นได้ชัดก่อนหน้านี้และไม่ได้พยายามที่จะตอบคำถาม
gnat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.