2019-09-01から1ヶ月間の記事一覧

インデントのスタイルについて

C++

そういえば、自分のインデントスタイルについて人に話すことってないなと思ったので。 インデントやコードのスタイルは初心者には軽視されがちだ。なぜならそれは「本質ではない」からだ。どんなコーディングスタイルでも動くものは動く。コンパイラにとって…

入力に応じてテンプレート引数を変える

C++

C++は静的に型付けを行うので、基本的に実行時に型を切り替えることはできない。なので、入力に応じて異なる型を返すことはできない。だが継承を使っているなら、常に基底クラスへのポインタを返しつつ、入力に応じて派生クラスのテンプレート引数を変更する…

言語間の速度差について

全く同じアルゴリズムを似たようなスキルの人が書いても、使った言語によって速度差が出る。 たとえばガベージコレクタが一瞬実行を停止させてしまったり、配列の境界チェックが必ず行われたり、ネイティブコードにコンパイルされなかったり、そもそもの処理…

-OfastはNaNチェックを無効化する

C C++

gccには-Ofastというオプションが存在する。これは、標準規格への適合性を犠牲にしてでも高速なバイナリを吐くモードだ。色々なことが犠牲になるが、NaNチェックも犠牲になる。 以下のコードを見て欲しい。 wandbox.org #include <iostream> #include <cassert> #include <cmath> int m</cmath></cassert></iostream>…

gitbookのmathjaxプラグインが突如動かなくなる

どうやら昨日mathjaxがメジャーバージョンアップ(v3.0.0)したらしい。リリースノートによると、中身がモダンなテクニックを使って全て書きなおされているようだ。 This version is a complete rewrite of MathJax from the ground up using modern program…