Подтвердить что ты не робот

Какой язык первым применил обработку исключений?

Этот вопрос не является техническим, а историческим. Я просто думал сегодня, что я также думал о Java как о "первом" языке для использования обработки исключений, пока не понял, что моя причина думать так, вероятно, потому, что Java был первым языком, с которым я столкнулся, который использовал его, но я не имело исторических данных для подтверждения этого вывода. В настоящее время обработка исключений является обычным явлением на всех современных языках, поэтому мне просто интересно: кто-нибудь знает, когда он впервые начал широко использоваться? И какой язык первым начал использовать его?

4b9b3361

Ответ 1

Языки программирования: принципы и практика, 2-е издание, Кеннет С. Лоуден (заметный учебник по языкам программирования) отмечает, что "Обработка исключений была основана на языке PL/I в 1960-х годах и значительно продвинулась в CLU в 1970-х годах Однако только в 1980-х и начале 1990-х годов вопросы проектирования были в основном решены" (283).

Ответ 2

Обработка исключений действительно возвращается даже до языков программирования; во-первых, это был аппаратный механизм для условий ошибки захвата (те, которые вызвали остановку выполнения), и, возможно, ветвление на подпрограмму.

Например, VAX-процессор может обнаружить, когда к виртуальному адресу, которому не было физического сопоставления, был доступ, и вызвать в подпрограмму, которая либо загрузила соответствующую страницу из swap, либо остановила программу. Механизм по существу тот же, что и в современных процессорах (смотрите "буфер просмотра перевода" ). Таким образом, в некотором смысле первый язык с исключениями был сборкой.

Самые ранние структурированные языки с исключениями выглядят как PL/I и CLU (см. Mipadi выше).

Ответ 3

CLU выполнял обработку исключений в начале 1970-х годов.

Ответ 4

У С++ были исключения до того, как Java сделала.

Ответ 5

Я могу запомнить использование обработчиков исключений в языке Xerox Mesa в... um... 1984. До этого язык существовал задолго до этого. У Mesa была интересная модель исключения. В дополнение к распространению и обработке исключения в обычном режиме обработчик может "возобновить" исключение, заставив выполнение вернуться из инструкции "throw".

Ответ 6

Algol 68 "transput" имел обработку "событий", но она была недостаточно оптимизирована для того, чтобы программист мог ее расширить.

В стандарте ALGOL 68 широко используются процедуры обработки событий "стандартная передача" (stdio) для управления различными событиями, возникающими при чтении (или записи) данных в файл или внешнее устройство. Встроенные подпрограммы "on event":

  • on char ошибка, ошибка формата, в строке конец, на конец логического файла, на конец страницы, на конец физического файла и на ошибку значения

В 1983 году были приняты предложения, позволяющие программисту определить свои собственные исключения. AFAIK ни одно из этих предложений не было принято Инициативой Инициативы Организации Объединенных Наций.

Однако российский стандартный орган "ГОСТ" стандартизовал обработку исключений в конце Гласности/Гласност в стандарте "ГОСТ 27975-88 Язык программирования ALGOL 68 extended - Язык программирования АЛГОЛ 68 расширенный"

В ГОСТ 27975-88 использовались дополнительные ключевые слова: МОДУЛЬ, ПУБЛИКАЦИЯ, ПОСТЛУД, НЕТ, ЯЙЦА, ВКЛЮЧЕНИЕ, ИСКЛЮЧЕНИЕ И ПОДЪЕМ.

Вот оригинальные предложения Великобритании:

Они похожи на то, что теперь реализовано в python.

Пример Линдси:

    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;

Исключения bulitin были: время исчерпано, исчерпано пространство, арифметическая ошибка, ошибка границ, ошибка области, невозможность передачи, конец файла, ошибка char, ошибка значения и ошибка формата

Мартин Томас Пример:

    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: Советский космический челнок Буран/Буран завершил один беспилотный космический полет в 1988 году, система автоматической посадки была написана в Алголе. Amercian по-прежнему развертывает множество бит военного/космического аппарата в Jovial (Algol 58), и это может содержать обработку исключений с 1950-х годов. У кого-нибудь есть идеи по этому поводу?...

Википедия: Buran_(spacecraft): челнок дважды вращался вокруг Земли за 206 минут полета. Он совершил автоматическую посадку на взлетно-посадочную полосу шаттла на космодром Байконур, где, несмотря на скорость бокового ветра 61,2 километра (38,0 миль)/час, он приземлился всего на 3 метра (9,8 фута) в поперечном направлении и 10 метров (33 фута) в продольном направлении от цели.

Ответ 7

Что касается поддержки COBOL для обработки исключений: обработка исключительных ситуаций (I/O и арифметика) была связана с по меньшей мере стандартом COBOL 1968 года. Обработка OO исключений была добавлена ​​в COBOL в стандарте 2002.

Ответ 8

Мы не должны забывать о C, который имел setjmp(3) и longjmp(3) в 1970-х годах.

И до этого Basic, с on error goto...

Я никогда не видел реализацию algol68, но я слышал, что у нее была кухонная раковина...