読者です 読者をやめる 読者になる 読者になる

ボレロ村上 - ENiyGmaA Code

中3女子です。

コンパイル時ズンドコキヨシ

中3女子です。 巷でズンドコキヨシなるものが流行っていたようなので C++11 constexpr でやってみた。Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「…

InDesign でラノベの組版をする

中3女子です。今度友人に InDesign で組版を教える機会ができたので、資料作成ついでにブログ記事に書くことにしました。同人ラノベの組版を InDesign で行ってゆくチュートリアルです。 版面の設計 まず版面(はんづら)を決めましょう。版面とは本文のレ…

C++初心者会で話題になったClangの相互再帰バグについて

中3女子です。 歌舞伎座.tech#8「C++初心者会」という勉強会が先日あり、自称初心者やクソザコによるさまざまな発表がおこなわれた。自分は参加できなかったので、いくつかの発表をニコ生で視聴した。 その中に、@wx257osn2 氏による constexpr ラムダライ…

コンパイル時Brainfuckコンパイラ ――C++14 constexpr の進歩と限界――

中3女子です。 この記事は C++ Advent Claneder2014 23日の参加記事です。 constexpr とは この記事を読んでいる層には、いまさら言及するまでもないと思われるので省略する。 必要であれば このあたり の資料を参照のこと。 C++14 シンタックス上の進歩と…

暗黒定数式 Vol.1 の印刷事情

同人おじさんです。 今回は印刷所のステマをしようと思う。 文学フリマで頒布した『暗黒定数式 Vol.1』は420ページあり、これを印刷所に発注しようとするとかなり選択肢が狭まってしまう。というのも、ほとんどの同人誌印刷所のセット料金表は、小説本向けの…

第十九回文学フリマに参加してきました 『暗黒定数式 The Dark constexpr』

中3女子です。 もう一週間くらい経ちましたが、11月24日に東京流通センターで開催された第十九回文学フリマに参加してきました。 サークルは『暗黒定数式 The Dark constexpr』、SF合同誌『暗黒定数式 Vol.1』を頒布してきました。 もともとぼくのツイッタ…

機械になりたいという願い

今回は書評のようなことをします。 ツイッターで知り合った友人が小説を書いているのですが、その中で主人公がこうした独白をします。 ――機械になりたい。 かつて希海はそう思っていた。今でもそう思っている。 機械なら臆病風や怠惰といった心に負けること…

日経ソフトウエア5月号 「constexpr」が開くコンパイル時プログラミングの世界

中3女子です。 だいぶ間が空いたが、日経ソフトウエア5月号の特集記事として 僕の書いた 「constexpr」が開くコンパイル時プログラミングの世界 が掲載されたことを報告する。 「プログラムは実行時にだけ処理が行われるもの」。 そう思い込んでいませんか…

C++14 時代の constexpr プログラミング作法

この記事は、C++ Advent Calendar 2013 の参加記事です。 前回は 西山信行 さんの記事でした。 まもなく C++14 時代が到来しようとしている。 ただでさえ実用的な言語機能である constexpr が C++14 での制限緩和によって神になろうとしている。 C++11 での …

C++標準ライブラリの非常に劣った実装が規格によって強制される

中3女子です。 とある自由ソフトウェア主義者より、C++14 に関して非常に興味深い議論を教えてもらった。 よって、今回はそれについて述べる。2013. Do library implementers have the freedom to add constexpr? http://www.open-std.org/jtc1/sc22/wg21/d…

Sprout のドキュメントを書いている

中3女子です。現在、Sprout C++ Libraries のドキュメントを書いている最中だ。 ついでに GitHub Pages にプロジェクトページも用意した。 http://bolero-murakami.github.io/Sprout/ これまで Sprout のドキュメントは、乏しいというか纏まった形のものが…

constexpr 逆FizzBuzz

中3女子です。 最近 Twitter で逆FizzBuzzが話題に上っていたので、constexpr で実装してみることにした。 なお、自分はこれまで逆FizzBuuz を実装したことはない。 どうやら様々なアプローチがあるらしいが、折角なので何も見ずに一から方法を検討すること…

bind の可変長プレースホルダその他を実装した

中3女子です。 今回はみんな大好き bind について。 bind で関数に引数に値を束縛したり引数の順序を組み替えたりする手法は、C++ ではかなり以前から存在する。 Boost.Bind に始まって Boost.Lambda, Boost.Phoenix, また C++11 の標準ライブラリにも導入…

C++14 のリテラル型

中3女子です。 C++14 でリテラル型の定義にも変更があるので、前回の記事と併せて読んで戴きたく。 N3690 § 3.9 Types - 10 より抜粋 ― void; or ― a scalar type; or ― a reference type; or ― an array of literal type other than an array of runtime b…

リテラル型クラスの条件、および「中3女子でもわかる constexpr」の訂正

中3女子です。 これはおよそ一年半前(2011/12/3)に公開したスライドだが、この中の記述に規格上の誤りがあるので、今更だがここで訂正しておく。 中3女子でもわかる constexpr from Genya Murakami 問題は p.20〜『◆リテラル型クラスの条件』の項目だ。 こ…

今更だけど Boost.勉強会 #12 大阪でした

もう三週間が経ってアレですが、Boost.勉強会 #12 で発表してきました。 Boost.勉強会 #12 大阪 - boostjp 発表 発表タイトルは『constexpr中3女子テクニック―実践と濫用そしてC++14へ』です。 Constexpr 中3女子テクニック from Genya Murakami constexpr…

C++11の糞仕様と戦ってアクセッサをconstexprにする

中3女子です。 C++11が、C++03およびそれ以前に対して明らかに優れていることは今更言うまでもない。 しかしながら、C++11にも恥ずべき糞仕様は存在する。 その糞の代表例が、constexprメンバ関数が暗黙でconst修飾されることである。 これによってどんな問…

すごいユーザ定義リテラルたのしく遊ぼう

中3女子です。 今回は、みんな大好きユーザ定義リテラルについて。 ユーザ定義リテラルは、値(整数、不動小数点数、文字列)に対するプログラマブルなサフィックスを定義することができる機能である。 例えば糖衣構文や単位を持った値を扱うために用いられ…

次期C++ではコンパイル時レイトレーシングやパーサコンビネ―タや音声合成が標準ライブラリで提供される

※これはエイプリルフール記事です C++1yでは、レイトレーシングやパーサコンビネ―タや音声合成が、標準ライブラリに含まれることが決定している。 もちろんこれらはconstexprで実装され、コンパイル時に実行することができる。 しかしながら、C++11のconstex…

コンパイル時/実行時両用アサート

中3女子です。 今回は、アサーションについて。 通常 C++ において、実行時チェックは assert、コンパイル時チェックは static_assert によって行われる。 しかしながら、これらは、constexpr 関数の中で用いることはできない。 もちろん、assert は定数式…

USBメモリを「USB」と略す人間らは腹を切って死ぬべきである。また、USBメモリを「USB」と略す人間らはただ死んで終わるものではない。彼らは無責任な悪人であり、中3女子が地獄の火の中に投げ込む者達である。

中3女子です。 USBメモリを「USB」と略す人間がいることは、まったく恥ずべきことであり、彼らは石もて追われるべきである。 一方、USBメモリを「USB」と略す人間らを批判し、石を投げる者もいる。彼らこそ祝福されるべき者達である。 ここでは、なぜUSBメ…

constexpr本を執筆することにした

中3女子です。 constexpr本を執筆しようと思い立った。 constexpr について、言語機能、用途、歴史的経緯、そして実装技術の観点から詳細に解説した本である。 動機 C++本のうち、例えば template や template ライブラリについて解説した本は探せばいくら…

宣言に const がないということの利点について考える

※これはネタ記事です ※この記事の内容をコピペしたり参考にすることで、HDDが初期化されたり、鼻から悪魔が出たり、遠隔操作ウィルス事件の犯人として逮捕されたとしても、筆者は一切責任を負いませんC++ のソースコードで、変数やメンバ関数の宣言に const …

constexpr アルゴリズムの実装イディオム その1

中3女子です。 今回は、constexpr におけるアルゴリズムの実装法について考える。 よく知られているように、constexpr 関数には言語規格上の制約が多くある。 ローカル変数が使えない、if や for などの制御構文が使えないなどは、C++11 に触れた者なら誰で…

「デザインはなぜ無報酬とされたのか」に対する芸術家からの反論

以前話題になり批判が盛り上がった件の「天王寺区広報デザイナーの募集」について、 イラストレーターの方による論評を見かけたのですが、ここでは芸術家の立場からの再反論をしたいと思います。 makion!log - ユーレカの日々[19]「デザインはなぜ無報酬と…

ISO C++ Standard - Future Proposals に投稿した

std-proposal は、C++標準化委員会メンバと非委員会メンバ両方が新しく提案したり、すでに存在する提案について議論する Google グループのページです。 先日書いた とおり、std::make_integer_seq に再帰深度のオーダーを定める提案です。 std::make_intege…

C++ 標準ライブラリにテンプレート再帰深度のオーダーを定めるべきである

C++ 2013-01 mailing が公開された。 詳細は江添氏のブログを参照されたし。 本の虫: C++ 2013-01 mailingの簡易レビュー これには、コンパイル時処理において非常に重要なイディオムの標準ライブラリ化が含まれている。 Compile-time integer sequences い…

constexpr で音階生成&シンセサイザー&音声合成

中3女子です。 このエントリは C++ Advent Calendar 2012 の 7 日目の記事です。 概要 この記事では Sprout C++ Library という拙作のライブラリによって、以下のようなプログラムを作成する。 コンパイル時音声処理ライブラリ Sprout.Compost の紹介 コン…

恋人と一緒に聴けるヘヴィメタル10選

バトル枠 Turisas - Battle Metal (Battle Metal 収録) 聞け! 我が戦士たちよ! 全世界の果てから来た戦士達よ!我らの軍に加わろう 軍を組織するのだ四つの風が我らを導き チュリサスの心が我らを先導する! Rhapsody - Warrior Of Ice (Legendary Tales …

文句無しに人に薦められるライトノベル9選

本棚を少し整理した折りにふと思いついたので、個人的ライトノベル傑作選をリストにしました。 どれも完成度と面白さで文句無しなので、友達に推薦しても喜ばれること請け合いです。 ついでに内容を一行に纏めたので、未読の人は参考に、この機会に手に取っ…

メタ関数の実装技法 - その2

前回(メタ関数の実装技法 - その1 - ボレロ村上 - ENiyGmaA Code)に続き、メタ関数の実装技法その2です。 関数の呼び分けと decltype を利用したメタ関数 たとえば、クラスメンバに型名 value_type を持つか判定するトレイトを考える。 has_value_type t…

メタ関数の実装技法 - その1

そもそもメタ関数とは (参照:More C++ Idioms/メタ関数(Metafunction) - Wikibooks) 一般に C++ でメタ関数とは、与えられたテンプレート引数から、結果として何か型やコンパイル時定数を返す(定義する)ようなクラステンプレートをいう。 代表的な例と…

コンパイル時数列生成 generate/unfold/recurrence

Sprout C++ Library Github https://github.com/bolero-MURAKAMI/Sprout ご存じのように Sprout には constexpr アルゴリズムがある。 ここでは、そのうち generate と unfold, および recurrence について解説する。 というのも、最近これらについてかなり…

static データメンバの初期化 - constexpr な場合とそうでない場合

constexpr の間違った使い方。 - C++でゲームプログラミング この記事へのフォローです。 constexpr static データメンバの場合は、"コンパイル時定数である変数は、宣言と同時に初期化しなければならない" という原則にしたがって、 クラススコープの内側に…

constexpr を使うべき5の理由 - まとめ&リンク集

「constexpr を使うべき5の理由」の連載をひとまず終えたので、記事の一覧をここにまとめておきます。 また、その他の資料や情報へのリンクを載せておきますので、更に興味あるという方は読んでみるのもよいでしょう。 constexpr を使うべき5の理由 1.定数を…

constexpr を使うべき5の理由 - その5

「constexpr を使うべき5の理由」ひとまず最終回です。 コンパイル時に計算ができると聞いて、誰もがまず思い浮かべる用途は、おそらく、実行時に必要となる値をあらかじめ計算しておくというものでしょう。 5.必要なものをなるべく早く用意しておくために …

constexpr を使うべき5の理由 - その4

「constexpr を使うべき5の理由」ようやく4つめです。 今回は、いわゆるメタプログラミングにおける constexpr について取り上げます。 4.あのうんざりするテンプレートメタプログラミングによる数値計算からはもはや解放された 以下のコードは、[1 .. 5] の…

constexpr を使うべき5の理由 - その3

相変わらず「constexpr を使うべき5の理由」です。 今回は、関数に対する constexpr 指定のもう一つの意味について取り上げます。 3.副作用がないことを保証する 「ねむらなくてもつかれないくすり」に副作用はあるのでしょうか。疲労をポンと感じなくさせて…

constexpr を使うべき5の理由 - その1

constexpr を使うべき5の理由 「なぜあなたは constexpr を使うべきか?」 「そもそも constexpr とは何か」という基本的な部分から始めて、 どうして C++er が constexpr を使わなければならないか、日にちを分けて5つのケースを書いてみます。 constexpr …

constexpr を使うべき5の理由 - その2

引き続き、「constexpr を使うべき5の理由」です。 ここでは、できるかぎり関数に constexpr を付けることが如何に C++er の義務であるかを示します。 2.定数を返す関数をコンパイル時定数にする #include <limits> constexpr auto v = std::numeric_limits<double>::max(); </double></limits>…

コンパイル時離散フーリエ変換(DFT)

コンパイル時離散フーリエ変換(DFT) Sprout.Numeric.DFT は、constexpr DFT アルゴリズムを提供します。 https://github.com/bolero-MURAKAMI/Sprout/tree/master/sprout/numeric/dft DFT は周波数解析などに用いられますが、ここでは詳しくは述べません。 …

Sprout.Io - とりあえず文字列へ変換/コンパイル時のパフォーマンスとバッファサイズの話

Github - Sprout https://github.com/bolero-MURAKAMI/Sprout Sprout.Io は、コンパイル時に文字列をソース/シンクとした入出力を行うことを目指すライブラリです。 基本的に iostream ライクな記法です。 Sprout.Io で文字列へ変換する #include <iostream> #include <sprout/io.hpp></sprout/io.hpp></iostream>…

次期 C++ ではポインタ演算は定数式になるようだ/次期 C++ の constexpr 化を考える

§5.19 Constant expressions (N3290 より抜粋) 2 A conditional-expression is a core constant expression unless it involves one of the following as a potentially evaluated subexpression (3.2), but subexpressions of logical AND (5.14), logical …

constexpr 関数から引数のメンバ関数を呼ぶための forward

この記事で取り上げた問題について。 小ネタ - constexpr の文脈でconstメンバ関数と非constメンバ関数を呼び分ける - ボレロ村上 - ENiyGmaA Code 簡単に言えば constexpr 関数では、 引数が rvalue reference の場合、constメンバ関数が呼ばれてほしいわけ…

index_tuple イディオムにおける index_range の効率的な実装

コードをコミットしたのはだいぶ以前だけど言及していなかったので書きます。 Github - Sprout/sprout/index_tuple https://github.com/bolero-MURAKAMI/Sprout/tree/master/sprout/index_tuple index_tuple Idiom そのものについては、ググればそれっぽい情…

小ネタ - constexpr の文脈でconstメンバ関数と非constメンバ関数を呼び分ける

ちょっと嵌っていたのでメモがてら。 次のような get() メンバ関数を持つクラスと get() フリー関数があったとする。 template<typename T> struct X { T t; T& get() { /* 非const版 */ return t; } constexpr T const& get() const { /* const版 */ return t; } }; tem</typename>…

Sprout の破壊的変更 - constexpr コンテナのトレイト周りの刷新

Sprout C++ Library Github https://github.com/bolero-MURAKAMI/Sprout Sprout に大幅な破壊的変更が入りました。 ユーザコードにおいて、コンテナのトレイト関連を使用したコードは、新しいものに書き換えする必要があります。 また、ユーザ定義のコンテナ…

コンパイル時 FizzBuzz を読んでの Sprout C++ Library 改善

id:osyo-manga さんの Sprout を使った記事↓ [C++][Sprout]Sprout でコンパイル時 FizzBuzz http://d.hatena.ne.jp/osyo-manga/20111207/1323187352 を読んで、「ああ、Sprout にこんな機能が足りなかったな」という部分に思い当たったので、 それを追加した…

Sprout.Darkroom で外部ファイルからのテクスチャマッピング

https://github.com/bolero-MURAKAMI/Sprout Sprout.Darkroom に、コンパイル時に外部ファイルからテクスチャを読み込む機能を追加しました。 テクスチャマッピングの定番ということで、球体に世界地図を Spherical Mapping で貼り付けてみます。 out.png ア…

Sprout.Darkroom でチェック模様のテクスチャを使ったレンダリング

Sprout.Darkroom は、constexpr ベースのコンパイル時レイトレーシングライブラリです。 https://github.com/bolero-MURAKAMI/Sprout Sprout.Darkroom は、特定のインタフェースのクラスをテクスチャマップやスペキュラマップとして オブジェクトに設定する…