Вопрос для волшебников этимологии: какой язык программирования первым использовал синтаксис try / catch / finally, найденный в современных языках Java / .NET?
Я считаю, что это был C ++, и я думаю, что Java / C # наконец добавлен для очистки ресурсов (наконец, не в C ++). К сожалению, у меня нет ссылок ... пока что .
аккуратная страница со всем синтаксисом исключений: http://en.wikipedia.org/wiki/Exception_handling_syntax
Я считаю, что это C ++. Если нет, то Страуструп должен отдать должное. В его статье: http://www.research.att.com/~bs/except.pdf Он не упоминает никаких влияний и не ссылается ни на какой другой материал, кроме его собственного.
C ++ был первым основным языком программирования, который ввел исключения (наконец, не требуется в C ++, потому что деструкторы детерминированы).Из статьи Страуструпа: http://www2.research.att.com/~bs/hopl2.pdf
наибольшее влияние на дизайн обработки исключений в C ++ оказала работа над отказоустойчивыми системами, начатая в университете Ньюкасла в Англии Брайаном Ранделлом и егоколлеги и продолжили во многих местах, начиная с
Опубликовано в Твиттере Mike Fikes , поделился со мной Павел Капала :
MacLisp добавил функцию ERR, которая сигнализирует об ошибке. Если ERR вызывается в динамическом контексте формы ERRSET, то аргумент ERR возвращается как значение формы ERRSET. Программисты вскоре начали использовать ERRSET и ERR не для захвата и сигнализации об ошибках, а для более общих целей управления (динамические нелокальные выходы). К сожалению, использование ERRSET также незаметно отлавливало неожиданные ошибки, затрудняя отладку программ. Новая пара примитивов CATCH и THROW была введена в MacLisp в июне 1972 года [выделение шахты] , так что ERRSET можно зарезервировать для предполагаемого использования перехват ошибок. Урок ERRSET и CATCH важен. Разработчики ERRSET и позже ERR имели в виду конкретную ситуацию и определили пару примитивов для решения этой ситуации. Но поскольку эти средства обеспечивали сочетание полезных и мощных возможностей (перехват ошибок и динамические нелокальные выходы), программисты начали использовать эти средства непреднамеренным образом. Затем дизайнерам пришлось вернуться и разделить желаемое на куски с альтернативными интерфейсами. Эта модель тщательного проектирования, непреднамеренного использования и последующего редизайна распространена в эволюции Lisp.
MacLisp добавил функцию ERR, которая сигнализирует об ошибке. Если ERR вызывается в динамическом контексте формы ERRSET, то аргумент ERR возвращается как значение формы ERRSET.
ERR
ERRSET
Программисты вскоре начали использовать ERRSET и ERR не для захвата и сигнализации об ошибках, а для более общих целей управления (динамические нелокальные выходы). К сожалению, использование ERRSET также незаметно отлавливало неожиданные ошибки, затрудняя отладку программ. Новая пара примитивов CATCH и THROW была введена в MacLisp в июне 1972 года [выделение шахты] , так что ERRSET можно зарезервировать для предполагаемого использования перехват ошибок.
CATCH
THROW
Урок ERRSET и CATCH важен. Разработчики ERRSET и позже ERR имели в виду конкретную ситуацию и определили пару примитивов для решения этой ситуации. Но поскольку эти средства обеспечивали сочетание полезных и мощных возможностей (перехват ошибок и динамические нелокальные выходы), программисты начали использовать эти средства непреднамеренным образом. Затем дизайнерам пришлось вернуться и разделить желаемое на куски с альтернативными интерфейсами. Эта модель тщательного проектирования, непреднамеренного использования и последующего редизайна распространена в эволюции Lisp.
- из «Эволюции Лиспа» Гая Стила и Ричарда Габриэля
Источник: 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>— 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>