Ai thiết kế ngoại lệ?


22

Trường hợp ngoại lệ và xử lý ngoại lệ đến từ đâu?

Tôi thích cách .NET sử dụng nó, tôi thích cách C ++ hỗ trợ nó (nhưng các thư viện không may sử dụng mã trả về hoặc được viết bằng C thay thế). Tôi biết tiêu chuẩn khá nhiều của nó trong tất cả các ngôn ngữ mới, nhưng ai đã thiết kế nó đầu tiên hoặc nó đến từ đâu?

C ++ có phải là ngôn ngữ đầu tiên sử dụng nó không? Tôi không biết bất kỳ cái nào cũ hơn.


7
Rõ ràng, Plankalkül đã xử lý ngoại lệ vào những năm 1940, mặc dù trình biên dịch đầu tiên không tồn tại cho đến khoảng 50 năm sau. ( en.wikipedia.org/wiki/Plankalk%C3%BCl )
Thất vọngWithFormsDesigner

Bạn có thể nói rằng C ++ là ngôn ngữ tháp ngà đầu tiên không giới thiệu ngoại lệ cho công chúng. Nhưng khái niệm này đã có từ đầu (hoặc một thời gian dài, hãy lựa chọn).
Martin York

11
Tìm ai đó để bóp nghẹt? Tôi đang đùa ...
Mark Canlas

1
Chúng ta có nên tính đến những ảnh hưởng từ các ngoại lệ phần cứng?
rwong

1
@FrustratedWithFormsDesigner: Hàm của tôi vừa chạm sàn. Tôi biết về Konrad Zuse, nhưng không biết điều đó. Ông là cha của tất cả chúng ta.
Bob Murphy

Câu trả lời:


20

Tăng và đặt bẫy ngoại lệ đã có từ khá lâu. Trang web này cho biết các trường hợp ngoại lệ đã được giới thiệu trong PL / I: http://www.math.grin.edu/~rebelsky/Cifts/CS302/98S/Outlines/outline.02.html

đó là vào năm 1967, theo trang này (bao gồm một biểu đồ bao quát nhưng không đầy đủ các ngôn ngữ và tính năng máy tính): http://community.borland.com/article/0,1410,22741,00.html

Nhiều ngôn ngữ đã chọn kỹ thuật này - ADA, ALGOL, FORTRAN, ML [...]

Trích dẫn từ đây .

Wikipedia có nhiều chi tiết hơn về xử lý ngoại lệ trong PL / 1 . Trang đó cũng đề cập đến PL / 1 là trang đầu tiên. Tất nhiên, đây không phải là bằng chứng khoa học :-)

Đối với những người trực tiếp thiết kế PL / 1, bài viết đề cập đến không có tên, chỉ có các ủy ban khác nhau tại IBM.


Execptions trong PL / Tôi thực sự là loại sự kiện cụ thể. Bạn có thể xác định và nâng cao các sự kiện của riêng mình và viết các trình xử lý sự kiện để bắt chúng. ISTR đã có một số hỗ trợ cho việc này trong một số cơ sở hệ thống (VTAM?), Vì vậy bạn thực sự có thể viết các chương trình hướng sự kiện.
TMN

Bạn có thể nghĩ ra bất kỳ ngôn ngữ nào trước C ++, nơi cung cấp một phương tiện để dọn dẹp có trật tự trong quá trình giải nén ngăn xếp không?
supercat

Ngoại lệ trong FORTRAN? Thôi nào ...
Michał Kosmulski

6

Hof, Mössenböck và Pirkelbauer (năm 1997 bài báo của họ ngoại lệ Zero-Overhead Xử lý sử dụng Metaprogramming ) khẳng định rằng khái niệm về trường hợp ngoại lệ đã được đề xuất trong những năm bảy mươi, ám chỉ đến năm 1975 John B. Goodenough của xử lý ngoại lệ: Các vấn đề và một ký hiệu đề xuất giấy trong Truyền thông ACM . Trong đó, anh kết hợp xử lý ngoại lệ hiện đại với ý tưởng chung là đăng ký các cuộc gọi lại và ký hiệu được đề xuất của anh trông giống với các đặc tả siêu dữ liệu thuộc tính hiện đại hơn try/catch, nhưng nó (hoặc ít nhất là phần 2) là một tổng quan tuyệt vời về trạng thái xử lý ngoại lệ trong giữa những năm bảy mươi.

Có lẽ đáng chú ý cũng là raise/rescuecơ chế ở Alef , mà người ta có thể xem như một dạng catchkhối nguyên thủy , vì chúng tôi nghĩ rằng chúng mọc lên hoàn toàn từ trán của Stroustroup như Athena từ Zeus.


3
bạn đã đọc câu trả lời trước ? Nó bắt đầu ngoại lệ 1967: sớm hơn tám năm so với ngày bạn đề cập
gnat

4
Tôi đã làm, nhưng tôi đã cố gắng theo dõi một số lịch sử giữa sự xuất hiện của các ngoại lệ trong C ++ và các câu lệnh ON CONDATION trong PL / I. Tôi đoán sự bổ sung của tôi là không mong muốn?
Wtrmute

1
Trên thực tế, nhiều bài viết về xử lý ngoại lệ đề cập đến lợi ích tổng quan, thảo luận và ảnh hưởng của nó đối với cơ chế ngoại lệ hiện đại - hợp lý để xem xét nó là bán kết. Mặt khác, "xử lý ngoại lệ" có ngữ nghĩa riêng biệt trong nhiều ngôn ngữ và tôi hy vọng điều này sẽ đặc biệt đúng trước khi xuất bản của Goodenough. Với suy nghĩ này, một câu trả lời bảo thủ cho câu hỏi này cũng có thể theo dõi nó trở lại một bước nhảy có điều kiện.
Thiago Silva

@gnat: Bạn đã đọc bình luận theo dõi ý tưởng đến những năm 1940 chưa? Ngay cả khi nhận xét đó không tồn tại, câu hỏi là "trường hợp ngoại lệ đến từ đâu?", Không phải "đặt tên ngày sớm nhất khi ngoại lệ được sử dụng".
Michael Shaw

@MichaelShaw câu trả lời tôi đề cập đã được đăng cùng lúc với bình luận bạn đề cập, và nó cũng cố gắng giải quyết câu hỏi được hỏi ("là người đầu tiên"). Trái ngược với nó, bài đăng này đã không thừa nhận bằng chứng rõ ràng có thể nhìn thấy trước đó và thậm chí không cố gắng giải quyết câu hỏi
gnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.