2016年10月4日火曜日

rvo と nrvo と API 設計

十数年も経過するので、今時のコンパイラなら意識するまでもなく実装している。

特に教科書然としたものなどで例に挙げられるような単純なケースなら確実に最適化がされる。


実際問題どんな状況なのかを調べてみることにした。


test_rvo_nrvo

これは vc だが相変わらず分岐を挟むと残念なことになるようだ。

しかし、gcc と clang で確認を行うと分岐があるにも関わらずきっちり最適化がされる。

---

const correctness について、ここでは関数の戻り型が焦点となる。

const なポインタや参照を返す場合、やはり一抹の不安が残る。

回避するにはコピーを返せばいいのだが、rvo または nrvo が効くか否かが

重要な場面も多々ある。

要はパフォーマンス問題に帰着する。


API の設計に統一性を持たせたいのだが、クロスプラットフォームだと

足を引っ張ってる方に合わせるしかないかな。

---

(追記)

と少し錯乱していたが、vc だけ少し特殊なことをすれば恩恵を授かることができた。
面倒くさい・・・。

2016年9月24日土曜日

shared_from_this を ctor から呼んでみる


言うまでもなく常識的に考えれば不味いことは一目瞭然。

構築が完了していないので strong_ref もクソもない。

あるクラスを RAII で設計していた際に遭遇したが

バッドノウハウからも得られるものがあるだろうということで興味本位に探してみる。

https://forum.libcinder.org/topic/solution-calling-shared-from-this-in-the-constructor

unfortunately this is not a reliable solution. See post below.

と注意書きがあるので真似しちゃダメではあるが

参照カウンタを騙す・・・ああ、その発想自体に脱帽だよ!


2016年9月13日火曜日

How to Survive 2 を ps3 コントローラでプレイ

表題の件の前提として、
Steam の他ゲームは x360ce 経由で普通に動作しているが
このゲームだけは動作しないという人向け。


先ずは原因から記載すると、

・ 64bit ゲームなので x360ce for 64-bit games が必要
動作させるには xinput9_1_0.dll が必要なのに最新版では生成ができない


なければ生成すればいいじゃないということで本題に。


(1) x360ce 3.2.8.76(for 64-bit games) をダウンロード(use google!)
(2) x360ce でコントローラ設定を行う(ここはいつも通り)
(3) Game settings タブを開く
(4) Add ボタンで HowToSurvive2.exe を登録
(5) 64-bit v9.1を選択

fig1.

このタイミングで Synchronize Settings が表示される。
※最新バージョンでは表示されない

(6) Synchronize Settings を押す

fig2.
ここでOKを押せば、(5) でチェックした xinput9_1_0.dll が (4) で登録したパスに生成される。

fig3.

(7) x360ce_x64.exe と同じ場所に x360ce.ini が生成されるので、上記のパスに手動コピー。


Windows10 x64 環境での動作は確認。

ドイツ人とがっつり遊んだ!