語源ウィザードへの質問:今日のJava/.NET言語で見られるtry/catch/finally構文を最初に使用したプログラミング言語はどれですか。
4 に答える
私はそれがC++だったと思います、そして私はJava / C#がリソースクリーンアップのために最終的に追加されたと思います(最終的にC ++にはありません)。残念ながら、私には参照がありません...まだ。
すべての例外構文のすっきりとしたページ:http: //en.wikipedia.org/wiki/Exception_handling_syntax
C++だと思います。そうでない場合、Stroustrupはクレジットを与える必要があります。彼の論文の中で:http: //www.research.att.com/~bs/except.pdf彼は影響について言及しておらず、彼自身以外の他の資料についても言及していません。
TwitterにMikeFikesが投稿し、PawełKapałaが私と共有しました:
MacLispは
ERR
、エラーを通知する関数を追加しました。ERR
フォームの動的コンテキスト内でが呼び出された場合ERRSET
、toの引数がフォームERR
の値として返されますERRSET
。プログラマーはすぐに、エラーをトラップして通知するのではなく、より一般的な制御目的(動的な非ローカル出口)を使用
ERRSET
し始めました。ERR
残念ながら、この使用はERRSET
予期しないエラーも静かにトラップし、プログラムのデバッグを困難にします。プリミティブの新しいペア、CATCH
およびは、 1972年6月THROW
にMacLispに導入されました[強調鉱山]。これは、エラートラップの意図された使用のために予約することができます。ERRSET
ERRSET
との教訓CATCH
は重要です。の設計者ERRSET
とその後の設計者はERR
、特定の状況を念頭に置き、その状況に対処するためのプリミティブのペアを定義しました。しかし、これらの機能は便利で強力な機能(エラートラップと動的な非ローカル出口)の組み合わせを提供したため、プログラマーはこれらの機能を意図しない方法で使用し始めました。次に、設計者は戻って、別のインターフェイスを使用して目的の部分を分割する必要がありました。この慎重な設計、意図しない使用、およびその後の再設計のパターンは、Lispの進化において一般的です。
—ガイ・スティールとリチャード・ガブリエルによる「TheEvolutionofLisp」から
出典: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>
C ++は、例外を導入した最初の主要なプログラミング言語でした(デストラクタは決定論的であるため、最終的にC ++では必要ありません)。Stroustrupの論文から:http ://www2.research.att.com/~bs/hopl2.pdf
C ++例外処理の設計に最も大きな影響を与えたのは、英国のニューカッスル大学でBrian Randellと彼の同僚によって開始され、その後多くの場所で継続された障害耐性システムの作業でした。
CommonLispはC++よりもずっと前から存在しており、以前のLispに基づいていました。もちろん、Javaはこれをよく知っているLispの男性によって作成されました。しかし、JavaはCによってLispで汚染されているため、チェックされた例外仕様もナンセンスに追加されました。
Common Lispはさらに進んで、実際にキャッチがスロールーチンと対話できるようにしました。これには、スローを続行するように指示することも含まれます。キャッチが完了するまで、スタックは単純に巻き戻されませんでした。つまり、スローが失敗するだけでなく、メモリ不足などの警告をスローする可能性があります。