Câu hỏi này không phải là kỹ thuật mà là một câu hỏi lịch sử. Tôi đã suy nghĩ ngày hôm nay rằng tôi cũng nghĩ Java là ngôn ngữ "đầu tiên" để sử dụng xử lý ngoại lệ, cho đến khi tôi nhận ra rằng lý do của tôi để suy nghĩ theo cách này có thể là vì Java là ngôn ngữ đầu tiên I gặp phải sử dụng nó, nhưng tôi không có dữ liệu lịch sử để sao lưu kết luận đó. Ngày nay xử lý ngoại lệ là phổ biến trong tất cả các ngôn ngữ hiện đại, vì vậy tôi chỉ tự hỏi: không ai biết khi nào nó bắt đầu được sử dụng rộng rãi? Và ngôn ngữ nào là người đầu tiên bắt đầu sử dụng nó?Ngôn ngữ nào là người đầu tiên thực hiện xử lý ngoại lệ?
Trả lời
Ngôn ngữ lập trình: Nguyên tắc và thực hành, ấn bản thứ 2 của Kenneth C. Louden (một sách giáo khoa đáng chú ý về ngôn ngữ lập trình) lưu ý rằng "Xử lý ngoại lệ được tiên phong bởi ngôn ngữ PL/I vào những năm 1960 và nâng cao đáng kể trong CLU vào những năm 1970. Tuy nhiên, chỉ trong những năm 1980 và đầu những năm 1990, những câu hỏi thiết kế đã được giải quyết phần lớn ”(283).
+1 để tham chiếu –
[Corbató] (http://en.wikipedia.org/wiki/Fernando_J._Corbató) tham chiếu đến việc sử dụng các điều kiện 'ON' trong bài viết 1969 Datamation có tiêu đề [_PL/I As Công cụ lập trình hệ thống] (http://web.archive.org/web/20080206153039/http://home.nycap.rr.com/pflass/PLI/plisprg.html), viết về trải nghiệm của nhóm [Multics] (http://en.wikipedia.org/wiki/Multics) với trình biên dịch PL/I "tạm thời" của họ, vào thời điểm đó đã 5 năm trong cuộc đời của nó. –
Chúng ta không nên quên C có setjmp(3)
và longjmp(3)
trong thập niên 1970.
Và trước đó, cơ bản, với on error goto...
Tôi chưa bao giờ thấy một thực hiện algol68, nhưng tôi nghe nói nó có bồn rửa nhà bếp ...
Tôi đã nghe nói rằng PL/1 là lớn và phức tạp cho ngày của nó, nó có thể có trường hợp ngoại lệ, có nghĩa là họ có thể là khá cũ, năm 1960 giữa. COBOL dường như có chúng ngay bây giờ, nhưng tôi tự hỏi khi chúng được thêm vào .. – DigitalRoss
Ồ, tôi đã nghĩ đến một điều nữa. Rất có thể một trong số 999 phiên bản của Lisp đầu tiên với một cơ chế giống như ngoại lệ. – DigitalRoss
Tôi đã viết PL/1 trên VAX vào năm 1986 và đã có xử lý ngoại lệ được tích hợp sẵn trong ngôn ngữ. – PaulMcG
C++ có ngoại lệ trước khi Java đã làm.
Xử lý ngoại lệ thực sự quay lại ngay cả trước các ngôn ngữ lập trình; lúc đầu, nó là một cơ chế phần cứng để bẫy các điều kiện lỗi (những điều đã gây ra sự ngừng thực thi) và phân nhánh tùy ý tới một chương trình con. Ví dụ, CPU VAX có thể phát hiện khi một địa chỉ ảo không có ánh xạ vật lý được truy cập và gọi vào một chương trình con đã tải trang thích hợp từ hoán đổi hoặc tạm dừng chương trình. Cơ chế cơ bản là giống nhau trong các bộ vi xử lý hiện đại (tra cứu "bộ đệm dịch lookaside"). Vì vậy, theo một nghĩa nào đó, ngôn ngữ đầu tiên có ngoại lệ là lắp ráp.
Các ngôn ngữ có cấu trúc sớm nhất có ngoại lệ dường như là PL/I và CLU (xem Mipadi ở trên).
Phần cứng bẫy/ngắt khác với xử lý ngoại lệ. Bẫy/ngắt nói chung hoặc là có được lồng nhau trên ngăn xếp và cho phép xử lý để tiếp tục không bị quấy rầy, hoặc người nào khác họ giết một sợi và ngăn xếp của nó. Rất hiếm khi bẫy phần cứng/ngắt được sử dụng để làm gián đoạn luồng chương trình với bất kỳ mô hình nào từ xa giống với C++/C#/vb/.net/etc. ngoại lệ. – supercat
CLU có xử lý ngoại lệ vào đầu những năm 1970.
Trên thực tế, theo giấy bạn liên kết đến, công việc xử lý ngoại lệ của CLU bắt đầu vào năm 1975 và nó đã ổn định vào năm 1977. Vì vậy, * cuối * 1970 sẽ là một đặc tính tốt hơn. –
Tôi có thể nhớ sử dụng trình xử lý ngoại lệ bằng ngôn ngữ Mesa của Xerox trong ... um ... 1984. Ngôn ngữ đã tồn tại tốt trước đó. Mesa có một mô hình ngoại lệ thú vị. Ngoài việc tuyên truyền và xử lý một ngoại lệ theo cách thông thường, một trình xử lý có thể "tiếp tục" một ngoại lệ, khiến cho việc thực hiện trở lại từ câu lệnh "ném".
Khả năng tiếp tục một ngoại lệ thực sự tồn tại trong các ngoại lệ của Windows, mặc dù nó không phải là một điều nổi tiếng/được sử dụng ... –
@Matthew. Vì vậy, có lẽ đây là nơi Windows sao chép nó từ :-) –
Xem thảo luận của Stroustrup về ngữ nghĩa 'chấm dứt vs tiếp tục' trong "Thiết kế và Tiến hóa của C++". Hệ thống Cedar được xây dựng bằng cách sử dụng Mesa và ban đầu có một số ngoại lệ 'tiếp tục', nhưng theo thời gian, tất cả chúng đều bị loại bỏ để ủng hộ các ngữ nghĩa 'chấm dứt'. Cuối cùng, Cedar chỉ còn một ngoại lệ được sử dụng ngữ nghĩa 'tiếp tục', và trên đánh giá thêm, điều đó cũng bị loại bỏ. –
"chuyển đổi" của Algol 68 có xử lý "sự kiện", nhưng nó không đủ khả năng để người lập trình mở rộng phạm vi.
Tiêu chuẩn ALGOL 68 sử dụng thường trình sự kiện trong "chuyển đổi chuẩn" (stdio) để quản lý các sự kiện khác nhau phát sinh khi dữ liệu được đọc (hoặc ghi) vào tệp hoặc thiết bị bên ngoài. Việc xây dựng trong "về sự kiện" thói quen là:
- về lỗi char, về lỗi định dạng, trên dòng kết thúc, kết thúc tập tin hợp lý, trên cuối trang, trên vật lý tập tin cuối & về lỗi giá trị
Năm 1983 Đề xuất đã được chấp nhận để cho phép một lập trình viên xác định ngoại lệ của riêng họ. AFAIK không có đề xuất nào trong số này được chấp nhận bởi IFIP của Liên Hợp Quốc.
Tuy nhiên người Nga tiêu chuẩn cơ "GOST" đã chuẩn xử lý ngoại lệ gần cuối Glasnost/Гласност trong tiêu chuẩn "GOST 27975-88 Programming language ALGOL 68 extended - Язык программирования АЛГОЛ 68 расширенный"
GOST 27.975-88 sử dụng các từ khoá bổ sung: MODULE, PUB, POSTLUDE, NEST, EGG, ON, EXCEPTION và RAISE.
Dưới đây là đề nghị Anh gốc:
AB49.1983-May: "Một đề xuất cho Xử lý ngoại lệ trong ALGOL 68", bởi C. H. Lindsey - Trang: 10 - 15
AB49.1983-May: "Một Exception- Cơ chế xử lý cho ALGOL 68 ", bởi Martyn Thomas - Trang: 16 - 17
Chúng xuất hiện tương tự với những gì hiện được triển khai trong python.
Lindsey của Ví dụ:
EXCEPTION singular = new exception ; # EXCEPTION la a new mode #
PROC gauss = (REF [ , ] REAL a. REF [ ] REAL rhs) VOID :
COMMENT a procedure to solve a set of simultaneous
equations COMMENT
BEGIN C the usual algorithm for gaussian elimination which, at some
point, may discover that a is singular C ;
IF C it makes this discovery C
THEN RAISE singular
FI;
C rest of algorithm CO
END;
Exceptions bulitin là: thời gian cạn kiệt, không gian cạn kiệt, lỗi số học, lỗi giới hạn, phạm vi lỗi, transput không thể, tập cuối, lỗi char, lỗi giá trị và lỗi định dạng
Martyn Thomas Ví dụ:
BEGIN
on (overflow , overflow handler) ;
on (bound check, boundcheckhandler) ;
C body of the closed - clause C
EXIT
overflow handler:
C handle overflow exceptions C
EXIT
bound check handler:
C handle bound check C
END
BTW: Tàu con thoi Buran/Буран của Liên Xô đã hoàn thành một chuyến bay vũ trụ không người lái vào năm 1988, một hệ thống hạ cánh vô dụng được viết bằng Algol. Của Amercian vẫn triển khai nhiều bit của bộ máy quân sự/không gian trong Jovial (Algol 58), và điều này có thể chứa xử lý ngoại lệ từ những năm 1950. Bất cứ ai có ý tưởng về điều này? ...
Wikipedia: Buran_(spacecraft): Xe đưa đón quay quanh Trái đất hai lần trong 206 phút bay. Nó thực hiện hạ cánh tự động trên đường băng đưa đón tại Baikonur Cosmodrome ở đâu, mặc dù tốc độ gió bên của 61,2 km (38,0 dặm)/giờ, nó đã hạ cánh chỉ có 3 mét (9.8 ft) chiều ngang và 10 mét (33 ft) chiều dọc từ mục tiêu.
Có giống như ngoại lệ OOP hay tín hiệu/bẫy (đôi khi còn được gọi là ngoại lệ phần cứng)? Một điều đặt ra các ngoại lệ OOP ngoài các khái niệm trước đó là các khái niệm trước đó như tín hiệu/bẫy sẽ xóa toàn bộ hoặc đẩy mọi thứ vào nó trước khi xử lý điều kiện ngoại lệ, trong khi các ngoại lệ OOP bật ngăn xếp trở lại các điểm cụ thể. – supercat
Về hỗ trợ COBOL cho xử lý ngoại lệ: cổ điển (I/O và số học) xử lý ngoại lệ đã được khoảng từ ít nhất tiêu chuẩn COBOL năm 1968. Xử lý ngoại lệ OO đã được thêm vào COBOL trong tiêu chuẩn 2002.
- 1. Xử lý ngoại lệ trong ngôn ngữ Google Go
- 2. Xử lý ngoại lệ được triển khai bằng ngôn ngữ lập trình như thế nào?
- 3. Thực hiện xử lý ngoại lệ GCC C++
- 4. Refactor Xử lý ngoại lệ
- 5. Gói Xử lý Ngôn ngữ Tự nhiên
- 6. Xử lý ngoại lệ Netty - Trình xử lý ném ngoại lệ, sau đó là gì?
- 7. Xử lý ngoại lệ NHibernate
- 8. Ngoại lệ xử lý Antlr
- 9. Xử lý ngoại lệ Python
- 10. xử lý ngoại lệ python
- 11. Delphi Xử lý ngoại lệ vấn đề với nhiều khối xử lý ngoại lệ
- 12. BackgroundWorker xử lý ngoại lệ
- 13. Xử lý ngoại lệ nút
- 14. Xử lý ngoại lệ C++
- 15. c + + xử lý ngoại lệ
- 16. Xử lý ngoại lệ WCF
- 17. Xử lý ngoại lệ AOP
- 18. Xử lý ngoại lệ TPL
- 19. Xử lý ngoại lệ CursorLoader
- 20. Xử lý nhiều ngoại lệ
- 21. Xử lý ngoại lệ MVVM
- 22. Xử lý ngoại lệ JSF2
- 23. Xử lý ngoại lệ chưa xử lý trong .NET 1.1
- 24. XMLHttpRequest.open() xử lý ngoại lệ
- 25. Parallel.Invoke - ngoại lệ xử lý
- 26. ofstream xử lý ngoại lệ
- 27. Xử lý ngoại lệ PostgreSQL
- 28. Mẫu xử lý ngoại lệ
- 29. Reflection.Emit.ILGenerator Xử lý ngoại lệ Lệnh "Leave"
- 30. Ném ngoại lệ trong bộ xử lý ngoại lệ
java không phải là người đầu tiên có hầu hết mọi thứ –