Rokiのチラ裏

学生による学習のログ

2017-01-01から1年間の記事一覧

Polymorphic Memory Resources

C++

先日策定された C++17 から追加された Polymorphic Memory Rerouces についてのメモ。同提案でも言及されている通りstd::allocatorは、型にそのアロケータ情報を含む事で利用されるため、コンパイル時にしか指定することが出来ず、結果として同じ型のオブジ…

implicitly capture の振る舞い

C++

以下の例が成り立つ。 const int i = 123; // #1 const float f = 123.f; // #2 []{ i; }(); // OK []{ f; }(); // ill-formed C++17 のラムダ式における reaching scope に関する記述 n4659/[expr.prim] 3, 7, n4659/[expr.prim.lambda.capture] 8 から引用…

Java Evaluate Operands before Operation

Java の order of eval についてメモ。 x = 1; x = ++x + x++; // 3 が保証される JLS 15.7.2. Evaluate Operands before Operation から引用。 The Java programming language guarantees that every operand of an operator (except the conditional opera…

Consistent/three-way comparison

C++

先日、米国のニューメキシコ州アルバカーキで開催された ISO C++ 委員会による国際会議にて C++20 に追加された Consistent comparison (p0515) についてのメモ。当エントリー内容は同提案書である p0515r2 に基づく*1。また、同提案の採択と共に導入される …

Synchronized Buffered Ostream

C++

先日、米国のニューメキシコ州アルバカーキで開催された ISO C++ 委員会による国際会議にて C++20 のドラフトに追加された Synchronized Buffered Ostream (p0053) についてのメモ。当エントリー内容は同提案書である p0053 に基づく。 C++ の一部のストリー…

Range-based for statements with initializer

C++

先日、米国のニューメキシコ州アルバカーキで開催された ISO C++ 委員会による国際会議にて C++20 のドラフトに追加された Range-based for statements with initializer (p0614) についてのメモ。当エントリー内容は同提案書である p0614 に基づく。C++17 …

Conditionals with Omitted Operands

GCC の Conditionals with Omitted Operands という拡張構文についてのメモ。x ? x : yというような Conditional operator を利用した記述を次のように記述する事ができる。 x ? : y 値は x が 0 でない限り x 、そうでない場合 y である。このような単純な…

たんぶらーくらいあんと

github.com 二ヶ月半ほど前に一度 Electron を触っておこうと思い作り始め、二ヶ月前にもう作るのに飽きてしまったたんぶらーくらいあんとについてブログに特別載せていなかったので一応リンクを載せておく事にした。一応上記リポジトリから動いている様子も…

ビルトインを使わずに任意の型のアラインメントを計算

C++

alignment_of は C++11 で標準化されており、殆どの場合はビルトイン関数を呼び出す実装となっているが、ふと Boost の実装を見るとなるほど〜という感じだったのでメモ。Boost による実装は今からかな〜り前からあるので、今更感はあるが。 // 以下の実装は…

lua de gmail

単なるメール送信のためにメールクライアントを起動したりブラウザを起動したり、sendmail コマンドを設定するのは面倒だったので lua でそのような用途の簡易的なスクリプトを書いたのだが、lua を書く事自体本当に久しぶりだった。Gist に上げるまでもない…

P0532R0: On launder() 和訳

C++

std::launder については以前触れたが P0532R0: On launder() にとても分かりやすくまとめられていたので、個人的理解のためも含めて和訳してみる。 C++17では、C++14 の NB コメントの結果としてstd::launderを導入している:C++ FCD Comment Status それは…

内蔵ストレージが破損した Mac で USB メモリに Ubuntu 16.04 LTS を インスコしてブート

久しぶりに日記的な内容。 序章 ついにその日が来てしまった。いつもと変わらず Mac の電源ボタンを押すと、フォルダのアイコンに ? のマーク。一旦再起動してオプションキーを押しながら起動するも、起動ディスクが一切一覧に現れない。Apple diagnostics …

C++17 structured bindings で [ ] が使われる事情

C++

C++17 から導入される structured bindings は、複数の変数をタプルのようなオブジェクトから初期化する事ができる言語機能であるが、同機能における宣言では { } ではなく [ ] が使われる。 そもそも structured bindings の元々の提案では宣言の構文におい…

Usage of void() in a comma-separated list

C++

,で連結されたリストにおけるvoid()がどのような意味を持つのか。 a(), void(), b(); これは単純にオーバーロードされたoperator ,の呼び出しを防ぎ、言語による sequencing guarantees を保証するためのものである。void型のパラメータを持ったオーバーロー…

aggregate, aggregate initialization まとめ

C++

C++ における aggregate と aggregate initialization についてのメモ。まずバージョンごとの aggregate の定義から。 aggregate C++03 aggregate とは*1 配列または 以下の要件を満たすクラスである ユーザー定義コンストラクタがない private または prote…

n4687 C++ extensions for Concepts

C++

このエントリは、ドラフト入りしたコンセプト仕様全体を網羅するためのものである。尚、このエントリは P0734R0 と同提案が drafting された n4687 に基づいており、注釈などで付けられるセクション名は特に指定のない限り n4687 を示しているものとする。 …

Can non-type template parameters in c++17 be decltype(auto)?

stackoverflow.com template <decltype(auto)> // Is this legal by standard? struct X {}; 結論: 合法である。 n4659 17.1 Template parameters [temp.param]/paragraph 4 に non-type template parameters が持てる型について示されている(下線部は強調)。 A non-type te</decltype(auto)>…

non-type template parameter におけるデータの受け渡しから TMP で実数を含む value computing を行う

C++

push してからしばらく経っているが記録もかねて。C++ の non-type template parameter には浮動小数点型などの数値を直接与えることはできない。しかし、型の内部に内包させて Expression templates のようにその値を取り出そうとした瞬間に型情報に紐付い…

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

C++

前回。 stackoverflow.com C++98(03) ではstd::vectorの fill コンストラクタのプロトタイプに初期化子のデフォルト値があるが C++11 では削除されている。 C++03 – ISO 14882:2003 23.2.4.1 vector constructors, copy, and assignment [lib.vector.cons] …

C++ Standard Library Active Issues List Issue Status 和訳

C++ Standard Library Active Issues List の Issue Status の和訳。和訳されているのを見たことがなかったので、まとめておく。様々なステータスを通じてLWG移行に報告された問題で、解決への進捗状況を示す。通常、ほとんどの問題は次の段階を流れる。 New…

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 を除いたそ…