Siapa yang merancang pengecualian?

22

Dari mana asalnya pengecualian dan penanganan eksepsi?

Saya suka bagaimana. NET menggunakannya, saya suka bagaimana C ++ mendukungnya (tapi sayangnya perpustakaan menggunakan kode pengembalian atau ditulis dalam C sebagai gantinya). Saya tahu standarnya cukup banyak dalam semua bahasa baru, tetapi siapa yang mendesainnya terlebih dahulu atau dari mana asalnya?

Apakah C ++ bahasa pertama yang menggunakannya? Saya tidak tahu ada yang lebih tua.

agas
sumber
7
Rupanya, Plankalkül memiliki penanganan pengecualian pada tahun 1940-an, meskipun kompiler pertama tidak ada sampai sekitar 50 tahun kemudian. ( en.wikipedia.org/wiki/Plankalk%C3%BCl )
FrustratedWithFormsDesigner
Anda bisa mengatakan bahwa C ++ adalah bahasa menara bukan gading pertama yang memperkenalkan pengecualian kepada massa. Tapi konsepnya sudah ada sejak awal (atau sudah lama, pilihlah).
Martin York
11
Mencari seseorang untuk dicekik? Saya bercanda ...
Mark Canlas
1
Haruskah kita memperhitungkan pengaruh dari pengecualian perangkat keras?
rwong
1
@FrustratedWithFormsDesigner: Rahang saya baru saja menyentuh lantai. Saya tahu tentang Konrad Zuse, tetapi tidak tahu itu. Dia adalah ayah kita semua.
Bob Murphy

Jawaban:

20

Memunculkan dan menjebak pengecualian sudah ada cukup lama. Situs ini mengatakan pengecualian diperkenalkan di PL / I: http://www.math.grin.edu/~rebelsky/Courses/CS302/98S/Outlines/outline.02.html

yang pada tahun 1967, menurut halaman ini (termasuk grafik yang luas tetapi tidak lengkap tentang bahasa dan fitur komputer): http://community.borland.com/article/0,1410,22741,00.html

Banyak bahasa mengambil teknik ini - ADA, ALGOL, FORTRAN, ML [...]

Dikutip dari sini .

Wikipedia memiliki lebih banyak detail tentang penanganan eksepsi di PL / 1 . Halaman itu juga merujuk ke PL / 1 sebagai yang pertama. Tentu saja, ini bukan bukti ilmiah :-)

Mengenai siapa yang merancang PL / 1 secara langsung, artikel tersebut tidak menyebutkan nama, hanya berbagai komite di IBM.

Péter Török
sumber
Pengecualian dalam PL / I adalah jenis acara yang benar-benar spesifik. Anda dapat menentukan dan meningkatkan acara Anda sendiri dan menulis penangan acara untuk menangkapnya. ISTR ada beberapa dukungan untuk ini di beberapa fasilitas sistem (VTAM?), Sehingga Anda benar-benar dapat menulis program yang digerakkan oleh peristiwa.
TMN
Bisakah Anda memikirkan bahasa apa pun sebelum C ++ yang menyediakan fasilitas untuk pembersihan yang tertib saat tumpukan dibuka?
supercat
Pengecualian dalam FORTRAN? Ayo ...
Michał Kosmulski
6

Hof, Mössenböck dan Pirkelbauer (dalam makalah mereka tahun 1997 Zero-Overhead Exception Handling menggunakan Metaprogramming ) menegaskan bahwa konsep pengecualian disarankan pada tahun tujuh puluhan, merujuk pada penanganan Pengecualian John B. Goodenough tahun 1975 : Masalah dan makalah notasi yang diusulkan dalam Komunikasi ACM . Di dalamnya ia mengonfigurasikan penanganan pengecualian modern dengan gagasan umum untuk mendaftarkan panggilan balik, dan notasi yang diusulkan lebih mirip spesifikasi metadata Atribut modern daripada try/catch, tetapi (atau setidaknya bagian 2) merupakan gambaran besar tentang keadaan penanganan pengecualian di pertengahan tahun tujuh puluhan.

Mungkin yang perlu diperhatikan juga adalah raise/rescuemekanisme dalam Alef , yang dapat dilihat sebagai bentuk catchblok primitif , kalau tidak kita pikir mereka muncul sepenuhnya dari alis Stroustroup seperti Athena dari Zeus.

Wtrmute
sumber
3
apakah Anda membaca jawaban sebelumnya ? Ini tanggal pengecualian 1967: delapan tahun lebih awal dari tanggal yang Anda rujuk
agas
4
Ya, tapi saya mencoba melacak beberapa sejarah antara munculnya pengecualian di C ++ dan pernyataan ON CONDITION di PL / I. Saya kira penambahan saya tidak diterima?
Wtrmute
1
Sebenarnya, banyak makalah tentang penanganan pengecualian merujuk pada cukup untuk ikhtisar, diskusi dan pengaruhnya terhadap mekanisme pengecualian modern - masuk akal untuk menganggapnya sebagai mani. Di sisi lain, "penanganan pengecualian" memiliki semantik berbeda dalam banyak bahasa, dan saya berharap ini benar secara khusus sebelum publikasi Goodenough. Dengan mengingat hal ini, jawaban konservatif untuk pertanyaan ini bisa juga melacaknya kembali ke lompatan bersyarat.
Thiago Silva
@gnat: Apakah Anda membaca komentar yang melacak ide sampai tahun 1940-an? Sekalipun komentar itu tidak ada, pertanyaannya adalah "dari mana asalnya pengecualian?", Bukan "sebutkan tanggal paling awal ketika pengecualian digunakan".
Michael Shaw
@MichaelShaw jawaban yang saya rujuk telah diposting pada saat yang sama dengan komentar yang Anda sebutkan, dan juga mencoba untuk menjawab pertanyaan yang diajukan ("menjadi yang pertama"). Bertentangan dengan itu, posting ini gagal untuk mengakui bukti yang terlihat sebelumnya dan bahkan tidak mencoba untuk menjawab pertanyaan
Agak