タグ

!tumblr-techとexceptionに関するtyruのブックマーク (11)

  • 例外の分類

    元ネタは、C#チームのEric Lippert氏のブログの数年前の投稿です。 例外処理というと、「とりあえずキャッチしとけ」とか、逆に「とりあえずキャッチするな(集約例外ハンドラーで対処しろ)」とか言われたりします。かと思えば、「プロなんだから自分の頭で考えろ」とか、「業務フロー次第でしょ」などと千尋の谷に突き落とされたりもします。 極論を言えばそうなのですが、もう少しガイドラインとなるものは無いのか、ということでEricのブログの内容をかいつまんで紹介します。 Ericは、例外は4種類に分類できると言っています[1]。 例外の4分類(Eric Lippert氏による) 種類説明特徴対処方法例 致命的な例外(fatal exception) プロセスに深刻な問題が発生し、今にも死にそうな状態にある場合に発生する例外。 プログラマーの過失ではない[2]、 復旧は無理(finallyを実行する

  • 例外 - Note

    gistのはてなダイアリー埋め込みテストも兼ねて。 LLVMでの例外の扱いは基的にgccと同じようです。libgccを使って投げた例外を受けることができます。 gccの例外をゼロから実装するにはぱーそなりてぃふぁんくしょんというとても面倒な関数を書かないといけませんので、手を抜いてlibstdc++(g++のランタイム)とlibgnat(GNATのランタイム)を使って例外を投げてみました。 ↑とほぼ等価なC++コード #include <cstdio> int main() { try { throw 0; } catch(int) { std::puts("int"); } catch(float) { std::puts("float"); } return 0; } ↑とほぼ等価なAdaコード with GNAT.IO; procedure main is begin raise

    例外 - Note
  • 2011-06-01

    assert()は、第一引数にboolean、第二引数にオプションでエラーメッセージを取る。呼び出しが成功した場合は、関数の戻り値を返す。例えば、以下のio.open()はエラーの場合、第一引数にnil、第二引数にエラーメッセージを返す。なので、以下の呼び出し方は定石となる。 file = assert(io.open(name, 'r')) 逆に、自作の関数で、エラー処理をする場合、以下の2パターンがある。 error()関数を呼び出し、エラーを発生させる 失敗の場合は、第一引数にnil(もしくはfalse)、第二引数にエラーメッセージを返す つまり、Luaではエラーを上側に伝播したい場合、エラーコードを返すのではなく、nilとエラーメッセージを返すのが基。また、第二引数の型は文字列ではなく任意でよく、エラーコードを返しても良い。 package.loadlib()でのWin32API

    2011-06-01
  • 例外的にふぉろーのふぉろー

    目次 ホーム 連絡をする RSS Login Blog 利用状況 投稿数 - 1078 記事 - 2 コメント - 26135 トラックバック - 363 ニュース 著作とお薦めの品々は 著作とお薦めの品々は 東方熱帯林へ。 わんくま 東京勉強会#2 C++/CLI カクテル・レシピ 東京勉強会#3 template vs. generics 大阪勉強会#6 C++むかしばなし 東京勉強会#7 C++むかしばなし 東京勉強会#8 STL/CLRによるGeneric Programming TechEd 2007 @YOKOHAMA C++C++/CLI・C# 適材適所 東京勉強会#14 Making of BOF 東京勉強会#15 状態遷移 名古屋勉強会#2 WinUnit - お気楽お手軽UnitTest CodeZine Cで実現する「ぷちオブジェクト指向」 CUnitによるテスト駆

  • Plan 9 ソースコードでの例外機構 実装編 - #define NO_MONEY 0

    前に取り上げた「Plan 9 ソースコードでの例外機構 使い方編」の続きです.こんどは実装について. Plan 9のプロセスでは例外をサポートするために, それを表すProc構造体に特殊なメンバを導入しています.以下に挙げるnerrlabとerrlabがそれにあたります. これらはそれぞれ, 登録されたラベルの個数, 配列です. /sys/src/9/port/portdat.h : 長いので抜粋 struct Proc { ... int nerrlab; Label errlab[NERR]; ... }ここでいうラベルとはエラー時に戻るべき, waserror()関数が呼び出された場所を表します.具体的には以下のようなLabel構造体を用いてこれを保持しています.それぞれスタックポインタとリターンアドレスを格納するためのメンバがあります. /sys/src/9/pc/dat.h ty

    Plan 9 ソースコードでの例外機構 実装編 - #define NO_MONEY 0
  • Plan 9 ソースコードでの例外機構 使い方編 - #define NO_MONEY 0

    Plan 9のソースコードを読んでいると以下のような関数が頻繁に出てきます. error() waserror() poperror() nexterror() これらはC言語で例外をサポートするためにPlan 9で利用される関数です. 具体的には以下のように使います 1 int func(){ 2 if( waserror() ){ 3 recover_from_error(); 4 return ERROR; 5 } 6 7 // below could err 8 if( !do_something_has_error() ){ 9 error("failed!"); 10 11 } 12 13 poperror(); 14 return SUCCESS; 15 } recover_from_error()とdo_something_has_error()はコードを書く人が挿入した任

    Plan 9 ソースコードでの例外機構 使い方編 - #define NO_MONEY 0
  • 例外こわい

    普通のC++使い、銀天すばる @SubaruG std::next_permulation を使う場合は do-while が便利です。 RT @aizen76: do-whileに関しては仕事を通しても一度も使った事がないな… 普通のC++使い、銀天すばる @SubaruG swap( a.first, a.second ); RT @tozangezan: pairは二つの値を入れ替えるのにmake_pair(a.second,a.first)でいけるので楽ということに気がついた 普通のC++使い、銀天すばる @SubaruG @tozangezan std::swap は C++ やるなら覚えておいたほうがいいです。使うときは std::swap( a, b ); じゃなくて using std::swap; swap( a, b ); って呼ぶか、あるいは boost::swap

    例外こわい
  • close()

    プププランドのプリンス RiSK @sscrisk 何が問題なのかよく分からない。何をいいたいんだろう? "Story of Your Life » Blog Archive » fstreamのデストラクタを追ってみた話" http://shnya.jp/blog/?p=271 プププランドのプリンス RiSK @sscrisk "仕事でも使えるようなというレベルのことを考えると、間違いなくクローズする関数の戻り値をチェックすべきです。" というこの主張がどうなんだろう?

    close()
  • Java の null check をどのように行うべきか - 麦酒堂

    void methodA () { ... if (str != null) { methodB (str); } } void methodB (String str) { ... } (呼び側主義) とするか。 呼ばれ側主義者の主張はこう。 呼び元で null check すると複数箇所に同じ check コードが分散し、コード量を増大させる null check をせずに NullPointerException が発生するのは恥ずかしい 事実これまで、呼ばれ側で null check しないと困ることが多かった(プラグマティズム) 一方、呼び側主義者の主張はこう。 メソッド先頭に null check の if 文がずらずらと並ぶのは可読性を損ねる JDK のライブラリ群だって null を入れたら NullPointerException を投げている この議論は平行線をたどり、

  • エラーと例外 - Open MagicVox.net

    エラーと例外 Posted by ぴろり Posted at 2010/11/20 13:51 Trackbacks 関連記事 (0) Post Comment コメントできます Category コーディング スタイルの話題の一つに、関数はエラーを返すべきか、例外を返すべきか、というテーマがあります。普段は PerlPHP ばかりで、最近は C++ も疎遠なので、例外自体ほとんど使っていないんですが。帰りの電車の中でちょこっと考えてみたので、そのメモ。 | | | | 情報の流れる方向、境界線 こんな感じか? 情報の流れる方向、境界線 関数呼び出しを行った際に、その関数内部で何か問題が発生したときに、それはエラー値を返すのか、例外を投げるのか、といった議論です。これでは少し曖昧なので、考えるポイントを明確にします。私が注目したのは、情報の流れる方向と、関数との入出力を行う境界線、という

  • Remlab: I hate Xlib and so should you

    For over 20 years, Xlib has been at the heart of most graphical applications and user interface frameworks on Unices, including GNU/Linux. It is also knows as libX11, the actual name of the shared library in the file system. Unfortunately - and given its age, perhaps unsurprisingly - it suffers from some rather troublesome limitations and designs mistakes. This brought a few smart developers to cr

  • 1