39361


例外 exception は、なぜ投げる throw 受け取る catch する、と呼ぶのでしょうか？  
他の動詞でなくて throw/catch が使われたのはなぜでしょう。


CC BY-SA 3.0
2017-11-07T01:05:50.987
39355
2017-11-07T03:21:05.683
2017-11-07T01:48:31.873
8589
8589
question
専門用語 英語
例外はなぜ「投げる」と言う？


例外の、「例外を発生させる」、「コードを追って言って、最初にその例外を受け取れるハンドリングコードに処理をあけわたす」を上手く表す動詞が throw して
catch するだったからではないでしょうか。


CC BY-SA 3.0
2017-11-07T01:39:33.153
39356
2017-11-07T01:39:33.153
754
39355
answer


通常の関数呼び出し`call`、その戻り`return`がありますが、例外`exception`はそれらを超越して処理されるため、`throw` /
`catch`なのだと理解しています。C言語には`setjmp` / `longjmp`が存在しているので`jump`は避けるべきでしょうし。

[Windowsの構造化例外](https://msdn.microsoft.com/ja-
jp/library/swezty51.aspx)だと`raise` / `except`（他に`filter`なども）が使われていますね。


CC BY-SA 3.0
2017-11-07T01:56:17.773
39357
2017-11-07T01:56:17.773
4236
39355
answer


[例外処理に関するWikipediaのページ](https://en.wikipedia.org/wiki/Exception_handling#History)にこんな記述がありました。

> **History**  
>  Software exception handling developed in Lisp in the 1960s and 1970s. This
> originated in LISP 1.5 (1962), where exceptions were caught by the ERRSET
> keyword, which returned NIL in case of an error, instead of terminating the
> program or entering the debugger.[11] Error raising was introduced in
> MacLisp in the late 1960s via the ERR keyword.[11] This was rapidly used not
> only for error raising, but for non-local control flow, and thus was
> augmented by two new keywords, CATCH and THROW (MacLisp June 1972),
> reserving ERRSET and ERR for error handling. The cleanup behavior now
> generally called "finally" was introduced in NIL (New Implementation of
> LISP) in the mid- to late-1970s as UNWIND-PROTECT.[12] This was then adopted
> by Common Lisp. Contemporary with this was dynamic-wind in Scheme, which
> handled exceptions in closures. The first papers on structured exception
> handling were Goodenough (1975a) and Goodenough (1975b).[13] Exception
> handling was subsequently widely adopted by many programming languages from
> the 1980s onward.

なので、MacLispを設計した人に聞いてみないと、本当のところは分かりませんね。言語によっては`throw`ではなく、`raise`を使うこともあるようです。


CC BY-SA 3.0
2017-11-07T03:21:05.683
39361
2017-11-07T03:21:05.683
21092
39355
answer