Rokiのチラ裏

学生による学習のログ

non-type template parameter のシーケンス生成におけるプレースホルダなど

C++

執筆時現在、C++1z(17)から追加される、non-type template parameter でのautoを使ってゴリゴリとコンパイルを行うと、コンパイル時間が型を指定している場合と比較して圧倒的に伸びる事があるので*1、この機能を使わずに C++14 までの機能だけで任意の型の…

brainf**k LLVM IR トランスパイラ(コンパイラ)ジェネレータ

以前 brainf**k インタプリタジェネレータのようなものを書いたが、LLVM IR を使ってオブジェクトファイル吐けたら良いかなと思ったので、取り敢えず作った。レキシカルアナライザ*1は、インタプリタで書いたものを呼び出して再利用している。 github.com こ…

量子力学と量子コンピューターについての学習メモ #4

シリーズとしては少し間が空いてしまったが前回の続き ショアのアルゴリズム ショアのアルゴリズムは、有名な因数分解の量子計算アルゴリズムである。因数分解したい数を とする。 まず に対して、お互いに約数を持たないような より小さい数 を決める。 と …

C++ メタクラス提案の要約

元記事:http://www.fluentcpp.com/2017/08/04/metaclasses-cpp-summary/, Jonathan Boccara氏 [訳注 + メモ: Herb Sutter 氏による P0707R0 Metaclasses の提案文書の要約がまとまった記事。分かりやすく要約されていたため個人的理解のため翻訳 + メモ。 …

JPEG デコーダ書いた

以前 JPEG エンコーダをフルスクラッチで書いたが、今度は JPEG デコーダを書いて見た。該当するコミットはこちら。 github.com プロジェクト全体はこちら。 github.com 量子化テーブルの要素数を間違えて指定していて、少しハマった瞬間もあったが今回は割…

order of eval

Because my memory was a little vague, I learned about C++ order of eval again and wrote it in Japanese to my reference book. github.com The document of built version is here and for list of grounds and references of this document, consult …

Why an access to a volatile glvalue is considered a side effect by [intro.execution] ?

side-effect についてドラフトで再確認していたところ、その定義として “Reading an object designated by a volatile glvalue” という文面があったのでタイトルの内容をメモ。執筆時現在、side-effect については [intro.execution]/14/sentence-1 にて以下…

普段使いのコンパイル環境の整備

私は普段ちょっとしたコードに対してコンパイルを行う時、GCC と Clang のどちらかを使う。使うたびにコンパイルオプションを付与するのは面倒なので、これまでは単にオプションを含めた文字列をそのまま .zshrc のエイリアスとして設定していたのだが、あん…

Template non-type arguments によるコンパイル時四則演算パーサー

C++

書いて見た。 テスト。 テストの通り、無駄に C++11 に対応している。勿論の事だが C++14 では variable template が使えるし、C++1z(17) では型推論が効くのでそれによって使い勝手も良くなっている。尚、clang 4.0.0 でテストを行ったが、少し前の GCC と…

javascript parseInt 関数の挙動

javascript (ECMAScript 2015) の parseInt 関数の挙動についてメモ。parseInt 関数は、第1引数の文字列をパースし、第2引数に与えられた基数(数学的記数法の底)に基づく整数を返す関数である。基数には、2 ~ 36 までの整数を指定する事ができ、0 を除いたそ…

Template non-type arguments (Variadic templates) によるコンパイル時乱数生成

C++

Variadic templates でコンパイル時に乱数を生成してみた。現段階ではエンジンとして linear congruential, Xorshift, mersenne twister を、Discrete Uniform Distribution として uniform_int_distribution を実装してみた。ただし Template non-type argu…

P0707R1 Metaclasses の Design principles

P0707R1 は メタクラスという新しい概念、言語機能についての提案論文である。論文の中身そのものとは少し離れるのだが、1.1 の Design principles が中々良いデザイン原則で他のものにも流用できるな〜と感じたので引用してメモ。 The primary design goal …

Unity 導入から簡単なスターファイターを作るまでのチュートリアル

学校やその周辺で、Unity が〜…とよく聞くのだが、なんだかんだ触った事がなかったので、先日初めて Unity を触ってみた。そこそこお遊びとしても楽しめたので、わざわざまとめておく事もないかなと思っていたのだが、まあ無駄な事はないだろうと思ったので…

モナドの概念をC++に導入して冗長なエラーハンドリングを回避する

C++

モナドの概念をC++に導入する事についての Jonathan Boccara 氏による投稿のシリーズを見て、興味深く感じたので、個人的なメモ。尚ソースからは若干コードなどが改変されているところがある。 さて、この具体的な方法は、新たに関数を作成する場合と、既存…

C++20 進捗

C++

先日、ISO C++委員会は、カナダのトロントで次の国際標準であるC++20の作業を開始し、技術仕様の開発が続かれた。C++ 20ドラフトには、以下の機能が追加された。 Concepts Explicit generic lambdas _VA_OPT_ Default bit-field initializers Fixed const-…

最近 srook/cxx17/mpl/any_pack に加えた機能

C++

テンプレートパラメータにautoを使える喜びを噛み締めて遊ぶ - Rokiのチラ裏 にて取り上げてから、いくつかの機能を追加したのでその紹介をしてみる。 cos table [追記: any_pack によるコンパイル時コサインテーブルの構築。これは、srook/cxx17/mpl/any_pa…

stack overflow からの小ネタメモ #2

C++

前回。 stackoverflow.com 質問者は、void_t detection idiom によるSFINAEを試行している。void_t には、確かにテンプレート型に依存するパラメータが渡されているが、C++14 N3936 [temp.alias] を参照すると、テンプレートパラメータのエイリアステンプレ…

JPEG エンコーダ書いた

以前、JPEGに関する画像圧縮技術やデータ構造などついて学んだので、折角だし自分で作ってみようと思い、フルスクラッチで書いて見た。といっても、性能自体はそんなに良いものではないと思うし、簡単のために色々と制限を設けているので実用的ではないと思…

量子力学と量子コンピューターについての学習メモ #3

前回の続き。 データベース検索 データベースの例として電話帳を取り上げる。電話帳は、名前の五十音順に番号が付けられている。これは昇順ソートされたリストであると解釈できるので、バイナリーサーチの手法によって比較的高速かつ簡単にアクセスできる。…

stack overflow からの小ネタメモ

C++

stack overflow で得たちょっとした小ネタをメモがてら羅列してみる。 stackoverflow.com 質問は、ざっくり書くと、ラムダを関数ポインタに変換する明示的な記述なしでそのような事ができる方法はあるか?であるが、これに対して operator+ を適用すると、変…

量子力学と量子コンピューターについての学習メモ #2

前回の続き。 ドイチュ-ジョサのブラックボックス ジョサのアルゴリズムとは、ブラックボックスが蓄えているビット列が均一か等分かどちらなのかを判定するアルゴリズムである。よって、このアルゴリズムが有効であるのは、ブラックボックスが蓄えているビッ…

量子力学と量子コンピューターについての学習メモ #1

量子力学、量子コンピュータについての個人的な学習メモ。学習を促すものでも入門記事でもなくあくまで個人的な学習過程でのメモである事に注意。 量子コンピュータ―超並列計算のからくり (ブルーバックス)作者: 竹内繁樹出版社/メーカー: 講談社発売日: 200…

scala 始めました

scala警察が怖いという話題で少し盛り上がっていたので、始めてみた。sbtとscalaはbrewから導入した。sbt consoleを使ってbuild.sbtの内容を読み込み、チマチマplay groundを遊ぶ。build.sbtにはscalaのバージョンと、-deprecation,-feature,-unchecked,-Xli…

k-meansクラスタリングで遊ぶ

k-meansがディスられていたので、取り敢えずどんなもんかと実装した。 exp: #include<srook/k_means/k_means.hpp> int main() { srook::k_mns::k_means km("data",3); // km.set_initial_point(Point{2.0,90.0},Point{5.0,50.0}); // initial centerの独自設定も勿論可能 km.clustering(</srook/k_means/k_means.hpp>…

Default constructor improperly invoked in C++1z mode in GCC 7.1.0

C++

※5/16追記 私の推測では、C++14とC++17間で、[expr.type.conv]の文面に差異がある*1という事実の基の意見でしたが、[expr.type.conv]に該当しない場合でも発生する事を確認したため、議論がややこしくならないよう、内容を全て取り下げ、タイトルを変更しま…

テンプレートパラメータにautoを使える喜びを噛み締めて遊ぶ

C++

次期C++標準C++17では、テンプレートパラメータにautoキーワードを用いる事ができる。この機能により、型に縛られる事なく定数、リテラルをコンパイル時に扱う事ができるので、Variadic templatesで遊ぶのが好きな人からすると中々良い機能なのではないだろ…

TMP によるコンパイル時ハフマンエンコーダー(Compile time huffman encoder)

何となく書いて見た。テンプレートメタプログラミングによって、コンパイル時にハフマンツリーを構築し各記号を符号化して生成する。 以下のサンプルコードで標準出力以外は全てコンパイル時に行われる。 exp: #include<srook/mpl/cxx17/huffman_coding/huffman_encode.hpp> #include<iostream> #include<boost/type_index.hpp> template<class T> inline v</class></boost/type_index.hpp></iostream></srook/mpl/cxx17/huffman_coding/huffman_encode.hpp>…

数式をRecursive Descent Parsing

数式(四則演算記号 +, -, *, /、括弧、数値のみから成る式)の解析が知人間で少し話題になってたので自分もrustで書いてみる。数式をBNFで表現してからコードに落とし込んだ結果、以下のようになった。面倒なので、unwrap_orをチェックしていない。 fn num(ex…

カラー画像の原理からJPEGの圧縮原理までの学習メモ

なんとなくJPEGにおける基本的な概念の理解を固めようと思ったので、その学習メモ。尚、具体的な計算式の意味や証明には取組んでいない。 用語と定義 成分の集合を画素という。画素の集合がデジタル画像となる。 デジタル画像は小さな点の集合から成っている…

Effective tuple algorithm

C++

下書きに眠っていたので投稿。タプル生成に関するアレコレを書いた。主に個人的にBoost.fusionで納得のいかないものを実装。 分割 たまにやりたい時がある。一々記述するよりは書いてしまった方が良いだろう。 exp: #include<tuple> #include<srook/tuple/algorithm/split.hpp> #include<srook/algorithm/for_each.hpp> #include<iostream> int</iostream></srook/algorithm/for_each.hpp></srook/tuple/algorithm/split.hpp></tuple>…