タグ

!tumblr-techと例外に関するtyruのブックマーク (12)

  • C++で例外を使ったプログラムをうまく書くにはどうすればいいのか - 射撃しつつ前転 改

    C++とはできるだけ離れた人生を送りたいと願ってきた。しかし、なかなかそうもいかず、最近はだんだんとC++の知識を学びつつある。今更C++を勉強するなんてちょっと出遅れすぎてるんじゃないかという気もするが、もうすぐ新規格であるC++0xもリリースされるはずであるし、意外とC++を学ぶにはいいタイミングかもしれない。 プログラムの品質はエラー処理をどこまで丁寧に書くかで決まる。エラー処理の書き方には、 エラーコードを返す(エラーコードを返せるように設計しておく) エラー時に例外を投げる の2種類があるが、今悩んでいるのはそのC++の例外についてである。 例えば、機械学習のツールを書くことを考える。このようなツールではデータをパースする部分を書く必要が出てくるだろう。1行に1つのデータが以下のような形式で書かれているものをパースしたい。 1 2:1 4:2 5:1 このデータをパースするコード

    C++で例外を使ったプログラムをうまく書くにはどうすればいいのか - 射撃しつつ前転 改
  • Scalaでの例外処理 - Either,Option,util.control.Exception - ( ꒪⌓꒪) ゆるよろ日記

    今日はScalaの例外処理について解説しますよ。 基 - try,catch,finally 例外処理の基は、try,catch,finallyです。これはJavaと同じですね。 ただし、Scalaでのtry,catch,finallyは値を生成します。つまり、実行されたブロックの値が評価されます。 scala> val n = try{ "99".toInt } catch { case e:Exception => -99 } n: Int = 99 scala> val n = try{ "foo".toInt } catch { case e:Exception => -99 } n: Int = -99 上記のように、catch節には "case e:Exception => ..."のようなパターンマッチを書くことで、対応する例外の型に応じて補足することができます。try,

    Scalaでの例外処理 - Either,Option,util.control.Exception - ( ꒪⌓꒪) ゆるよろ日記
  • コンストラクタでの例外はあり?なし?

    オスツ🍣 @alohakun 逆向きの型推論もできるようにして HogeClass hoge = NULL; hoge = new (...); とかできるようにすれば良さそうに思えるんだけど、何か問題あるのかしら。 http://d.hatena.ne.jp/yaneurao/20100929 2010-09-29 07:53:03 やねうらお @yaneuraoh @alohakun 「逆向きの型推論もできるようにして」は、最初に明示的に型を書かないといけなくて、var x = hoge.XXX(); のようにして複雑な型名を受け取るケースにおいて困るのです。 型名は絶対に明示的には書きたくないのです。 2010-09-29 08:10:49 オスツ🍣 @alohakun @yaneuraoh 次善の策(旧コードの互換性を保ちつつ C# の仕様を変更すること前提)のつもりで書きまし

    コンストラクタでの例外はあり?なし?
  • 例外とはっ

    🎀にゃおきゃっと🐈Nyaocat🎀 @nyaocat 例外処理に関しては未だに理解が……。try~catchとか何か面倒だし、例外をcatchして、それで何をすればいいの?とか。。。 2010-04-29 20:59:38

    例外とはっ
  • NullPointerExceptionなどの標準例外を使っていないわけ - taediumの日記

    Domaでは、Daoのメソッドに期待されない引数(nullとか)が渡された場合に例外をスローしますが、そのときの例外にNullPointerExceptionやIllegalArgumentExceptionを使っていません。代わりに、DomaNullPointerExceptionやDomaIllegalArgumentExceptionといったDoma独自の例外を投げます。 これはなぜかというと、Daoのメソッドに対する事前条件を満たしていないのか、それともDoma自身にバグあって例外がスローされてしまっているのをわかりやすくするためです。 つまり、DomaNullPointerExceptionやDomaIllegalArgumentExceptionがスローされるということは、「これはDomaが意図的にスローしています。なんらかの条件を満たしていません。」というメッセージです。そし

    NullPointerExceptionなどの標準例外を使っていないわけ - taediumの日記
  • 文 - プログラミング言語 D (日本語訳)

  • 例外安全 - プログラミング言語 D (日本語訳)

    例外安全なプログラミングとは、 例外を投げる可能性があるコードが実際に例外を投げた場合に、 プログラムの状態が壊れずリソースもリークしないように作るプログラミングのことを言います。 これを正しく実現するには、既存の方法では、複雑で読みにくく脆いコード を書かねばなりませんでした。結果として、例外安全性に関して バグが残っていることが非常に多かったり、そもそも手間を省くために 例外安全が完全に無視されたりしてきました。 例として、数行の文を実行するあいだMutexをロックして、 終わったら解放するというケースを考えてみましょう: void abc() { Mutex m = new Mutex; lock(m); // mutexをロック foo(); // 処理を行う unlock(m); // mutexをアンロック } >foo() が例外を投げると、abc() は例外による巻き戻しで

  • g++ exception handling - memologue

    Code Project という有名サイトに、VC++の例外処理方法に関する記事があります (http://www.codeproject.com/cpp/Exceptionhandler.asp) が、そこにg++の例外処理方法を解説したコメントがありました。 ざっくりと次のような事を言っています(翻訳してるわけではないので詳しくは英文読んでください)。 g++は、VC++とはちょっと違うやりかたで例外処理を実装している。g++の場合、実際に例外がthrowされない限りは、try/throw/catchを使ったコードを書いてもランタイムのコストはかからない。 foo()がbar()を呼んでいて、bar()が例外を投げるとせよ。このとき、foo()はスタックに戻りアドレス*1を置いてからbar()を呼ぶ。この戻りアドレスを仮にXとする。 このときコンパイラは、 (X, 掃除コードのアドレス

    g++ exception handling - memologue
  • 2010-04-17

    とても欲しい。 pcall と error で似たようなことはできるけど、やはり不十分だし。 明らかな異常系以外で例外に頼らなければいけない状況は変だ、と思い直した。 気軽にぽんぽん例外を投げるような設計は、どうなのだろう、と。 その辺は言語の文化も関わってくるけれど、例えばC++だと、例外は基的に「例外的な事情」がある時しか投げないような設計が多い( boost::lexical_cast のような例外も多いが)。 そういう「よくできたC++のライブラリ」は、事前チェックで例外を投げることを殆ど回避できる仕組みになってるし、例外を気軽に投げる設計のライブラリでも、例外が投げられることが正常な実行パスの中に含まれるようなプログラムを書くような事は、基的に行わない。 もっとも、この辺は正に言語の文化次第である。 例えば Python では、 for 文という基的な構造において、処理終了

    2010-04-17
  • noexcept operator

    ふときがつくと、noexcept operatorなるものが追加されていた。これは、オペランドの式が、例外を投げそうな式を含む場合、falseを返す演算子である。結果はもちろん、定数だ。つまり、メタプログラミングに使える。オペランドの式は、評価されない。 void f() noexcept; void g() ; noexcept( f() ) ; // true noexcept( g() ) ; // false noexcept( throw 0 ) ; // false // ポリモーフィック型 struct Base { virtual void f() {} } ; struct Derived : Base { } ; Base base ; noexcept( dynamic_cast<Derived &>(base) ) ; // false noexcept( type

  • 任意の expression に透過的に hook を仕掛けるようなマクロが書けるのではありませぬか? - Cry’s Diary

    以下のコードでやっていることの説明. EXCEPTION_HOOK((expr))と書いておけば, (expr) という C++ の式を実行したら急に例外が来たので……というときに, call stack のようなもので殴られた跡 (この hook が仕掛けられている場所に関する情報) を boost::exception に乗せていきます. call stack の生成ぐらい言語でサポートして欲しいよね,うんうん.終わり. Microsoft Visual C++ 2010 と GCC 4.5.0 で動作を確認済みです. 工夫として, EXCEPTION_HOOK((expr))という文字列が式 expr と同等な C++ の expression として透過的に機能するように見せかけてあります.つまり,たとえば std::string s("42"); int i = EXCEPTIO

    任意の expression に透過的に hook を仕掛けるようなマクロが書けるのではありませぬか? - Cry’s Diary
  • 例外をめぐる雑談 - いぬビーム

    kusigahama: エラーを「返す」の禁止にしたい kusigahama: 正常終了以外するな! fuktommy: 例外禁止コーディングルールってどっかで見たことあったり。 kusigahama: 例外以外のエラー処理を禁止しましょう kusigahama: そういえば関数型言語って例外的状況はどう処理するんだろう fuktommy: なぜ例外を使ってはいけないのかという、設計論だったのだけど、どういう理屈なのか忘れてしましました。 kusigahama: 例外を投げずに済むならその方が綺麗な気はするが kusigahama: 把握しやすいコードを書くにあたってどういう考え方をするか、かなー fuktommy: これかな。例外使うなとは書いてない。記憶の中でごっちゃになったかも。 http://d.hatena.ne.jp/bleis-tift/20090809/1249825777

    例外をめぐる雑談 - いぬビーム
  • 1