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

Я полагаю, что требование Paul Graham состоит в том, что шаблоны разработки должны быть выражены на языке. Если существует X шаблонов, это означает, что люди вынуждены переписать последовательности кода, чтобы сделать это, и должен быть особенный метод языка выражения его. Это могло быть встроено в язык (хотя это является неловким, и может создать новые шаблоны разработки), или это могло быть automatable в языке (таком как макросы языка Common LISP; шаблоны C++, особенно, когда используется странными способами, могут сделать почти такой же иногда).

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

Точно так же при использовании Шаблона "фабрика", или язык мог включать функцию Factory, или могло быть возможно автоматизировать его в языке. А именно, Paul хочет быть в состоянии записать макрос Lisp, чтобы реализовать его, вместо того, чтобы записать Фабрики сам много раз.

опасность с использованием шаблона разработки состоит в том, что это - знакомая платформа кода, которую мы продолжаем вводить, и поэтому у нас есть блоки кода, который мы склонны не читать и писать с полным вниманием. Неудобство - то, что они - код, который мы должны ввести снова и снова, и чувство, что перезапись действительно должна быть автоматизирована.

, Являются ли шаблоны основной частью использования языков, как GoF, говорит или может быть абстрагирован далеко, как PG говорит, существенно эмпирический вопрос, вероятно, лучше всего решенный путем поиска языков, где сами шаблоны являются ненужными и наблюдают, чтобы видеть, нужны ли им действительно новые шаблоны.

18
задан soapergem 20 September 2009 в 00:39
поделиться

8 ответов

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

29
ответ дан 30 November 2019 в 05:50
поделиться

В C ++ были исключения раньше, чем в Java.

7
ответ дан 30 November 2019 в 05:50
поделиться

Я помню, как использовал обработчики исключений на языке Xerox Mesa в ... гм ... 1984 году. Этот язык существовал задолго до того. У Mesa была интересная модель исключения. Помимо распространения и обработки исключения обычным способом, обработчик может «возобновить» исключение, заставляя выполнение возвращаться из оператора «throw».

4
ответ дан 30 November 2019 в 05:50
поделиться

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

А до этого Basic , с при ошибке goto ...

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

0
ответ дан 30 November 2019 в 05:50
поделиться

«Transput» в Алголе 68 имеет обработку «событий», но ее недостаточно упростить, чтобы программист мог ее расширить.

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

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

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

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

В ГОСТ 27975-88 используются дополнительные ключевые слова: MODULE, PUB, POSTLUDE, NEST, EGG, ON, EXCEPTION и RAISE.

Вот оригинал UK предложения:

  1. AB49.1983-май : "Предложение по обработке исключений в АЛГОЛЕ 68", автор CH Lindsey - Страницы: 10 - 15

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

3
ответ дан 30 November 2019 в 05:50
поделиться

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

10
ответ дан 30 November 2019 в 05:50
поделиться

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

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

Первыми структурированными языками, в которых были исключения, по-видимому, были PL / I и CLU (см. Mipadi выше).

15
ответ дан 30 November 2019 в 05:50
поделиться

Относительно поддержки КОБОЛом обработки исключений: Классическая (ввод/вывод и арифметическая) обработка исключений существует по крайней мере с 1968 года, как стандарт COBOL. Обработка исключений OO была добавлена в COBOL в стандарте 2002 года.

.
1
ответ дан 30 November 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: