나는 이론이 있는지 없는지 모르겠지만, 실용적으로 실험적인 과학이 생길 수도있다.
내가 생각할 수있는 최고의 소스는 Bjarne Stroustrup, C ++의 디자인과 진화, Addison-Wesley, 1994 입니다. 내가 올바르게 기억한다면 (매우 훌륭한 책이고 사람들이 저에게서 계속 빌려 와서 돌려주지 않기 때문에 현재 사본이 없습니다) 예외에 관한 장이 있습니다. Stroustrup의 C ++위원회는 언어 정의에 기꺼이 추가하기 전에 제안 된 기능이 필요하다는 많은 경험적 증거가 필요했습니다. 예외에 대한 위키 백과 페이지는 책에서 다음 인용문이있다 :
1991 년 11 월 Palo Alto [C ++ 표준화] 회의에서, 우리는 개인 경험과 Jim Mitchell (Sun, 이전에는 Xerox PARC)의 데이터로 뒷받침 된 종료 의미론에 대한 훌륭한 요약을 들었습니다. Jim은 20 년 동안 24 개 언어로 예외 처리를 사용했으며 Xerox의 Cedar / Mesa 시스템의 주요 설계자 및 구현 자 중 하나로서 재개 의미론의 초기 제안자였습니다. 그의 메시지는 재개보다 우선하는 것이 낫다. 이것은 의견의 문제가 아니라 수년간의 경험의 문제입니다. 재개는 유혹적이지만 유효하지 않습니다. 그는 여러 운영 체제의 경험을 바탕으로이 진술을 뒷받침했습니다. 주요 예는 시더 / 메사 (Cedar / Mesa)였습니다. 50 만 라인 시스템에는 재개 사용이 한 번만 있었으며 이는 상황에 대한 문의였습니다. 이러한 상황 문의에는 재개가 실제로 필요하지 않았기 때문에이를 제거하고 시스템의 해당 부분에서 상당한 속도 증가를 발견했습니다. 재개가 사용 된 모든 경우에 10 년에 걸쳐 문제가되었고보다 적절한 디자인으로 대체되었습니다. 기본적으로, 재개를 사용할 때마다 별도의 추상화 수준을 분리하지 않은 것으로 나타났습니다. 재개가 사용 된 모든 경우에 10 년에 걸쳐 문제가되었고보다 적절한 디자인으로 대체되었습니다. 기본적으로, 재개를 사용할 때마다 별도의 추상화 수준을 분리하지 않은 것으로 나타났습니다. 재개가 사용 된 모든 경우에 10 년에 걸쳐 문제가되었고보다 적절한 디자인으로 대체되었습니다. 기본적으로, 재개를 사용할 때마다 별도의 추상화 수준을 분리하지 않은 것으로 나타났습니다.
C ++에서 진정한 승리는 RAII 이므로 오류가 발생했을 때 리소스 할당 해제를 훨씬 쉽게 처리 할 수 있습니다. ( throw
및 try
- 의 필요성을 catch
없애지 않지만 필요하지 않음을 의미합니다 finally
.)
예외가 필요하다고 확신 한 것은 일반 컨테이너라고 생각합니다. 컨테이너 작성자는 포함 된 객체가 반환해야 할 오류 유형 (아마도 처리 방법이 훨씬 적음)에 대해 아무것도 알지 못하지만 해당 객체를 컨테이너는 해당 객체의 인터페이스가 무엇인지 알아야합니다. 그러나 포함 된 객체에서 어떤 종류의 오류가 발생할 수 있는지 알지 못하므로 예외 유형을 표준화 할 수 없습니다. (반대로 : 예외 유형을 표준화 할 수 있다면 예외는 필요하지 않습니다.)
사람들이 수년에 걸쳐 배운 것으로 보이는 또 다른 것은 예외 사양이 언어에 올바르게 적용되기 어렵다는 것입니다. 예를 들어 http://www.gotw.ca/publications/mill22.htm 또는 http://www.gotw.ca/gotw/082.htm을 참조하십시오 . (그리고 그것은 C ++뿐만 아니라 Java 프로그래머도 확인 된 예외와 확인되지 않은 예외 에 대한 경험 에 대한 긴 논쟁을 가지고 있습니다 .)
예외의 역사에 대해 조금. John B. Goodenough : "예외 처리 : 문제 및 제안 된 표기법" Commun. ACM 18 (12) : 683-696, 1975. 그러나 그 전에는 예외가 알려져 있었다. Mesa는 1974 년경에 그것들을 가졌으며 PL / I도 그랬을 것입니다. Ada는 1980 년 이전에 예외 메커니즘을 가지고있었습니다. 저는 C ++의 예외가 1976 년경 Barbara Liskov의 CLU 프로그래밍 언어에 대한 경험에 가장 큰 영향을 받았다고 생각합니다. Barbara Liskov : 프로그래밍 언어의 역사 에서 "CLU의 역사" --- II , Thomas J. Bergin, Jr. 및 Richard G. Gibson, Jr. (Eds.). 471-510, ACM, 1996 쪽 .