2010-07-01から1ヶ月間の記事一覧

可変個引数処理のパフォーマンス比較

Lua

Lua で可変個引数を処理する方法には、主に三通りあります。 すなわち、再帰によって行う方法、テーブルを作る方法、標準関数selectを使う方法です: -- 再帰版 do local function add_impl_( x, y, ... ) if y == nil then return x end return add_impl_( …

何物でもない値

Lua

Lua でテーブルを使ったコード書いてると、しばしば、 「特定のフィールドを予め確保しておきたい」状況に出くわします。 例えば __index や __newindex をカスタマイズした場合に、 それらを無視してフィールドにアクセスする場合、普通は rawget/rawset を…

std::vector の shrink_to_fit

C++0x の std::vector には、新しく shrink_to_fit() メンバ関数が用意されています。 これは「 vector の確保しているメモリ領域を、その大きさに見合ったサイズまで縮小する」関数で、 典型的な使い方は、以下のような感じになります: // std::vector に…

「プログラミングの魔導書」の予約受付が再開されたようです

[Grimoire]「プログラミングの魔導書」予約開始! - Faith and Brave - C++で遊ぼう忘れないうちに予約予約、と。

インデックスアクセスと rawget/rawset は、どちらが高速か?

Lua

以下のスクリプトを書いてテストしてみた。 -- rawget と ls[k] および -- rawset と ls[k] = v は、どっちが高速か? -- 関数 f を n 回実行するのにかかった時間を測定する do local clock = os.clock function time( n, f, ... ) local oldtime = clock()…

関数の定義における落とし穴(解答編)

関数の定義における落とし穴(出題編) - 野良C++erの雑記帳 に対する解答例です。

関数の定義における落とし穴(出題編)

以下の Lua 関数 append は、第一引数として渡された配列形式のテーブルに、 第ニ引数以下で渡された配列形式のテーブルを全て追加するものである:http://ideone.com/SGfpS function append( t, t1, ... ) if t1 == nil then return end local n = #t for _…

Lua で using ディレクティブみたいなもの

Lua

最近 Lua でいろいろ書いてるのですが、 Lua の不満な点として、 標準ライブラリが全体的に最低限の機能しか無い点が挙げられます。 いや、 Lua という言語のコンセプトから考えると、これば別に不満点ではないですが、 それでも、ちょっと便利に使おうと思…

本物の C++er はデストラクタを書かない

代わりに std::unique_ptr (あるいは boost::scoped_ptr )を使います. 何故か? struct hoge { hoge() : xxx( get_resource() ) { /* 処理 */ if( some_cond ) throw some_exception(); /* さらに処理 */ } ~hoge() throw(){ release_resource(xxx); } /*…

自己代入チェックについて

驚くべきことに,世の C++er の中には,未だに 「自前のクラスを作る場合は,忘れずに代入演算子を定義し,自己代入チェックをしなければいけない」 という考えを持った人がいるようです. http://d.hatena.ne.jp/nagoya313/20100706/1278428503 確かに,昔…