タグ

ブックマーク / in-neuro.hatenablog.com (2)

  • 2023年のコンパイル時レイトレーシング - in neuro

    これは qiita.com の12/16の記事です。やばいもう16日が終わってしまう! はじめに 太古の昔、あるC++プログラマ*1がtemplateの再帰と特殊化を使ってコンパイル時に計算ができることを「発見」*2*3したその日から、C++とコンパイル時計算は分かちがたく結びついています。 言語機能を来意図されていなかった方法で活用する曲芸的な技巧だったコンパイル時計算は、その強力さを買われコミュニティを席巻し、C++11での constexpr の導入によりある意味で公式に認められたものとなりました。 導入当初は return 文一つだけしか持てなかった constexpr 関数は、それでも三項演算子による条件分岐や再帰によってコンパイル時計算を大いに盛り上げました。 そしてC++14で条件分岐、ループ、変数の書き換えが、C++17ではラムダが、C++20では仮想関数と動的メモリ確保

    2023年のコンパイル時レイトレーシング - in neuro
  • 関数型言語としてのC++ Template MetaProgramming入門 - in neuro

    C++ではtemplateを使ってコンパイル時に計算を行うことができる。 今回は、関数型言語としての視点からC++テンプレートメタプログラミング(C++-TMP)の簡単な紹介をやってみたい。 注:私はHaskellとlispの経験がホンの少しだけあるが、どちらも使いこなせるようになっているわけではない。のでこの記事には関数型への誤解が含まれる恐れがあることを注意していただきたい。 値 C++TMPでは型、もしくはコンパイル時定数が値に相当する。つまり、C++TMPにおいて値の型は、型もしくはコンパイル時定数(の型)ということになる。値の型が型とかめっちゃ面白いな 例えば我々は以下のようにして型を値として用いることができる。 struct v1{}; struct v2{}; struct v3{}; ... template<typename T1, typename T2> struct

    関数型言語としてのC++ Template MetaProgramming入門 - in neuro
  • 1