14

Câu hỏi của tôi có tính chất lịch sử hơn thực tế:Ai đã phát minh ra loại xử lý lỗi ném/thử/bắt [/ cuối cùng]?

  1. Ai đã phát minh ra nó?
  2. Ngôn ngữ nào sử dụng ngôn ngữ đó trước tiên (và ở mức độ nào)?
  3. Ý tưởng ban đầu là gì, khái niệm cơ bản (những vấn đề thực tế nào phải được giải quyết trong những ngày này, giấy tờ được chào đón)?
  4. LISPs condition system tổ tiên của xử lý ngoại lệ hiện tại?
+2

Trong thời trang được đóng gói lại phần nào, điều này chủ yếu là bản sao của http://stackoverflow.com/questions/1449951/what-language-was-the-first-to-implement-exception-handling – mjv

+0

Cảm ơn! Nhưng tôi cũng đánh giá cao câu trả lời cho các câu hỏi 3 và 4. – Frunsi

+0

+1 cho bài đăng đẹp .. –

Trả lời

5

Hệ thống điều kiện Lisp chung ngày nay là người mới tương đối. Thiết kế dựa trên các hệ thống trước đó, nhưng không được bao gồm như là một phần của ngôn ngữ Common Lisp cho đến cuối những năm 80 khoảng thời gian CLTL2

Tôi tin rằng chương điều kiện trong cuốn sách đó có một bình luận về số tiền hợp lý trong lịch sử và nền tảng của thiết kế và tham chiếu đến nghiên cứu có liên quan và triển khai trước đó của các hệ thống tương tự.

4

CPU VAX có hệ thống xử lý ngoại lệ dựa trên stack. Trong mọi khung cuộc gọi, một ô 32 bit được cấp phát và được điền bằng số không. Nếu chương trình con được gọi là muốn xử lý các ngoại lệ, tất cả những gì nó phải làm là điền vào ô đó với địa chỉ của thường trình xử lý ngoại lệ.

Khi ngoại lệ xảy ra, tìm kiếm ngăn xếp sẽ xảy ra. Điều này thật dễ dàng, vì các khung ngăn xếp đều bị xích lại với nhau. Khung ngăn xếp đầu tiên có mục nhập khác 0 sẽ làm cho ngăn xếp thư giãn đến điểm đó và trình xử lý ngoại lệ sẽ được gọi.

Tôi nhớ đây là một trong những tính năng của bộ xử lý nhằm vào các ngôn ngữ cấp cao hơn, nhưng tôi không biết rằng có một ngôn ngữ cấp cao hơn đã tận dụng được tính năng này. Tôi tin rằng nó đã được sử dụng bởi mã thư viện, mà có khả năng đã được viết trong assembler.

0

Nó không quay trở lại các hàm setjmp, longjmp trong C? Richie, Kernighan, et al?