Ecdfivbj

日報 2016-07-13Created on 2016-07-14 by sairoutine

    やったこと

    仕事

    try-catch 構文は遅いよね、という話が出た。
    コンシューマーゲームのような、60FPSを保つことが必要なソフトウェア開発では常識らしく
    基本的に、チーム内で使用が禁止されていることが多い。

    一方、web では結構軽く使われている。

    javascript の Promise は非同期に発生した unhandledRejection を拾うための
    仕組みとも言えるし、そもそもサーバー用途での node では、uncaughtException が投げられると
    プロセスごと落ちかねない。

    開発するソフトウェアの用途によって〜と言えばそこまでなのだが、
    どうして遅いのか知ってみたい。

    アセンブラレベルでどういう動きになるのか知りたかったので、
    下記のコードでC++のコードをアセンブラにしてみたが、
    如何せん i386 アーキテクチャの命令に詳しくないので、
    何やってるかさっぱりだった。

    g++ -g -O0 -c ファイル名.cpp # コンパイル
    objdump -m i386:intel -S -d ファイル名.o # 逆アセンブリ
    

    下記のサイトに C++ をアセンブリして命令を比較しているが、
    それを見ると、スタックが一個増えるだけで、それほど速度は落ちないように見える
    (命令1回毎に例外が throw されてないか jump 判定してるのだと思ってた)
    http://blogs.wankuma.com/andochin/archive/2009/04/27/172138.aspx

    「try-catch が遅いという一般化は適切でなく、実行環境あるいは実装次第で
    ソフトウェアによっては深刻なパフォーマンス問題になる」という結論に持って行きたい。

    Three.js

    またニコ生しました。2枠。リファクタばかりでまったくおもしろくないので、
    何かしらエンターテイメントになるように改善したい。

    Three.js は Essential Three.js を読んだだけ。
    サンプルコードを自分の望む要件にちょっと修正してみたいなこともできないので、
    とりあえずサンプルコードを読みながら、わからないAPIをリファレンスで調べる。

    それをもって、サンプルコードを自分の望む要件に修正くらいはできるようになろうと思う。

    それができたら、もっと抽象的な3Dグラフィックの本を読んだり、
    あるいは流体力学を学んで、よりWebGLで表現できる幅を増やしてみようと思う。

    リファレンスのAPIも一通り目を通しておきたいな。
    codepen とか jsdo.it に落ちてるコードもたくさん読んでみたい。

    考えたこと

    進捗なし(絶望)