Происхождение синтаксиса try / catch / finally - PullRequest
6 голосов
/ 24 мая 2011

Вопрос для волшебников этимологии: какой язык программирования первым использовал синтаксис try / catch / finally, найденный в современных языках Java / .NET?

Ответы [ 3 ]

4 голосов
/ 24 мая 2011

Я считаю, что это был C ++, и я думаю, что Java / C # наконец добавлен для очистки ресурсов (наконец, не в C ++). К сожалению, у меня нет ссылок ... пока что .

аккуратная страница со всем синтаксисом исключений: http://en.wikipedia.org/wiki/Exception_handling_syntax

Я считаю, что это C ++. Если нет, то Страуструп должен отдать должное. В его статье: http://www.research.att.com/~bs/except.pdf Он не упоминает никаких влияний и не ссылается ни на какой другой материал, кроме его собственного.

3 голосов
/ 24 мая 2011

C ++ был первым основным языком программирования, который ввел исключения (наконец, не требуется в C ++, потому что деструкторы детерминированы).Из статьи Страуструпа: http://www2.research.att.com/~bs/hopl2.pdf

наибольшее влияние на дизайн обработки исключений в C ++ оказала работа над отказоустойчивыми системами, начатая в университете Ньюкасла в Англии Брайаном Ранделлом и егоколлеги и продолжили во многих местах, начиная с

2 голосов
/ 07 июля 2017

Опубликовано в Твиттере Mike Fikes , поделился со мной Павел Капала :

MacLisp добавил функцию ERR, которая сигнализирует об ошибке. Если ERR вызывается в динамическом контексте формы ERRSET, то аргумент ERR возвращается как значение формы ERRSET.

Программисты вскоре начали использовать ERRSET и ERR не для захвата и сигнализации об ошибках, а для более общих целей управления (динамические нелокальные выходы). К сожалению, использование ERRSET также незаметно отлавливало неожиданные ошибки, затрудняя отладку программ. Новая пара примитивов CATCH и THROW была введена в MacLisp в июне 1972 года [выделение шахты] , так что ERRSET можно зарезервировать для предполагаемого использования перехват ошибок.

Урок ERRSET и CATCH важен. Разработчики ERRSET и позже ERR имели в виду конкретную ситуацию и определили пару примитивов для решения этой ситуации. Но поскольку эти средства обеспечивали сочетание полезных и мощных возможностей (перехват ошибок и динамические нелокальные выходы), программисты начали использовать эти средства непреднамеренным образом. Затем дизайнерам пришлось вернуться и разделить желаемое на куски с альтернативными интерфейсами. Эта модель тщательного проектирования, непреднамеренного использования и последующего редизайна распространена в эволюции Lisp.

- из «Эволюции Лиспа» Гая Стила и Ричарда Габриэля

image of this text from the twit below Источник: https://twitter.com/mfikes/status/881943130588753920

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">“The Evolution of Lisp,” by Guy Steele and Richard Gabriel</p>&mdash; Mike Fikes (@mfikes) <a href="https://twitter.com/mfikes/status/881950560508940288">July 3, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
...