2018-01-01から1年間の記事一覧
今までRustは使いまわすことのない適当なスクリプト的にしか使ってこなかったので、実際のところ本質的に難しいことは何もしてこなかった。その間は非常に楽で、言われるほど難しくないのではと思っていた。が、最近コードを使いまわそうと思って書き始めた…
ここ1, 2週間費やしていた作業が完了し、めでたくtoml11のバージョン2.0.0をリリースした。 github.com このバージョンアップで、 コードが凄まじく美しくなり、 エラーメッセージが最強になり、 TOML v0.5.0 (最新) に対応した。 せっかくなのでこの記事で…
On the quality of academic software | Daniel Lemire's blog 同僚がSlackに貼り付けたこの記事に同意しすぎて気絶している。
今日、後輩と色々試していて面白いことに気付いた。Fortranのキーワードは、予約語ではない。Fortranはdoとかifとかといったキーワードを持っているが、これらは予約語ではない。 ググると規格書のセクション番号込で情報が出てくる。 Keywords in Fortran W…
GitHubは自動でシンタックスハイライトがされるが、言語仕様が今も変わっていくような言語(大体の使われている言語はそうだ。Goのように意図的に固定している例外を除いて)ではたまにそれが古いままで、公式ページのハイライトがおかしいことがある。 TOML…
今日、妙な話を聞いた。CかC++かでコードを書いていたところ、変数名を長くすると32文字だかそこらでtruncateされてしまい、前半が同じ名前の変数を使っているとコンパイルエラーになってしまったというのだ。私は(少なくともC++で)変数名に文字数制限があ…
C++にはコンパイル時の有理数計算ライブラリがある。個人的な理解では、これは<chrono>のために入ったライブラリで、<chrono>がdurationを綺麗で速い(使いやすいとは言っていない)やり方で実装するためのものだ。コンパイル時に比率を計算できるので、実行時にかかるオーバ</chrono></chrono>…
タイトルで察した方は帰って結構です。 git submoduleというのがある。これは、別レポジトリをレポジトリの一部として管理できる機能で、要するに依存しているレポジトリのURLと対応するコミットをコードの一部として管理するものだ(大雑把すぎる)。すると…
しばらく放置してしまっていた。中々書くべきことが見つからなかったので。Nintendo Switchを購入してしまい、遊んでいたというのもあるが。 今回は、ちょっと普段気にしないアライメントのことについて話してみようと思う。 以前、C++17でのアライメント指…
何かを開発していると、何かの目的(ランタイムパフォーマンスなど)で少しわかりにくいハックをする必要が出てくることがある。もちろんそういう場所ではコメントを入れるわけだが、長くなりすぎたり、一つのソースファイルから複数のソースファイルへ言及…
今日、外に出ると晩夏の匂いがした。湿気と、草木と、熱気の残り香。夏が終わりかけていることと、それでもまだ夏であるということが、アパートの廊下の外を見るまでもなくわかった。外を歩きながら、今年の夏が殆ど夏らしいことができないまま終わろうとし…
Fused Multiply Addという命令がある。これは、a * b + cという形の演算を1命令で処理するものだ。丸めが一度しか走らないので精度がよくなる。以前、理論値と数値計算を比較してテストするときにこいつが使われるかどうかでテストが通ったり落ちたりして困…
前回、SIMDベクトルライブラリを作った話をしたが、そこでやっていることについてかいつまんで書いておく。 まず、以下のようなクラスがある。 namespace mave { template<typename T, std::size_t R, std::size_t C> class matrix; template<typename T, std::size_t N> using vector = matrix<T, N, 1>; } これについて、ごく普通の演算子</t,></typename></typename>…
TL;DR 高水準なAPIでSIMD命令を使って小さなベクトル・行列計算するためのライブラリを作った。 github.com 名前は安直だが MAtrix と VEctor からとった。 数年前にもExpression Templateを使って似たようなものを書いたことはあったが、これは的を絞った分…
使いドコロがわかりにくいと噂のboost::compressed_pairというものがある。今日はこれの具体的な使いドコロを紹介してみたい。 ところでなぜ私の使っているIMEは「つかいどころ」を「使いドコロ」と変換するのだろう。まあそんなに違和感もないのでこのまま…
ところで、昨日の記事で、以下のコードはコンパイルエラーになって面倒だという話をした。 template<typename T> T f(T x, T y) { return x + y; } auto z = f(1.0f, 2.0); // f(float, double) 一応追記しておくと、これはtemplateだから生じる問題とかではなくて、オー</typename>…
背景 C++では1.0とか書くとdoubleとして解釈され、floatにするには1.0fなどと書かねばならないことはご承知のとおりだ。また、doubleとfloatの演算の結果はdoubleになる。 これはtemplateを使うときに若干面倒になる。例えば、以下のような関数fを実装したと…
背景 これはある実験機器から出てくる特殊なフォーマットの実験データを読むために作ったライブラリのために考えたやり方である。 そのデータは画像データとヘッダ情報から出来ており、基本的にはそれらのペアを返すことになる。だが数百KB〜数百MB程度と大…
普段アセンブリコードを眺めるときは、最初に覚えた方法であることと、たいてい同時に実行して確認しているのもあって、objdumpを使っている。 が、コンパイル結果のアセンブリコードを見たいだけなら-Sで十分である。 $ cat "double add(double x, double y…
ReLUとは、ご存知の通り、xが正の値ならxを返し、そうでなければ0になるという非常に単純な関数である。だがこれが深層学習において重要な役割を演じたのだから面白い。バックプロパゲーションをする時に微分係数が1より小さいよくある活性化関数だと指数的…
なんとも重箱の隅をつつくような話だ。 私が開発に参加しているプロジェクトがあり、そこでは(古くから開発されているので)C++98が使われている。だが先進的なものも積極的に使おうとするプロジェクトでもあるので、Boostやtr1を使ってもいた。CMakeでtr1…
世の中には画像フォーマットが沢山ある。データを圧縮してサイズが小さくなるフォーマットや、様々なメタデータを持てるフォーマットなど色々だが、自分で作るとなると何が一番楽だろうか。 ある意味ではsvgだろうが、今回はビットマップということにする。s…
最近技術系のことをしっかりまとめる時間が減ってきた。とりあえず小粒なものを書いておこうと思う。 2ヶ月前くらいに、AからJまで10個のアルファベットを順に取り出したいことがあった。つまりこういうことがしたい。 grep 'A' something.dat | some_comman…
背景 私が作った個人プロダクトの中で、特に宣伝していない割にはそれなりに(見ず知らずの人に)スターを貰って使ってもらえているものがあるのだが、そこにIssueが立った。 internal compiler error with gcc-7.3.1 · Issue #9 · ToruNiina/toml11 · GitHu…
ふと感じたのだが、プログラミングパラダイムというのは、プログラムに制約をかけることなのではないか。 基本的に、現代で書かれるプログラムはどれも非常に長く複雑で、人間の脳みそに収まりきらない。実行パスをトレースできない規模のものはザラにあるし…
背景 C++11ではconstexprメンバ関数は暗黙にconst指定される。 template<typename T> class X { public: constexpr T get_member() /* const */ {return member_;} private: T member_; }; この仕様はある程度面倒を引き起こしていた(参考:http://boleros.hateblo.jp/e</typename>…
読者諸兄は、雪が降り積もって行くその過程を眺めていたことがあるだろうか。 雪が降り積もる時、雪は初めから着実に蓄積してゆくのではなく、初めは地面に触れては融け、触れては融けを繰り返す。そうして無為に見える時を過ごした後、地面が十分に冷えた時…
飲み会の席で隣に座っていた人が、聞いてみるとゲームのデバッガーをやっているらしい。でも開発プロジェクトの一員という訳ではなくて、コードそのものは見られない立場にいるらしい。なんだそりゃ、と思ったが、そういえばテストプレイヤーの募集を見たこ…
背景 アライメントまわりのことを調べていたらC++17でaligned_allocとnewの新しいオーバーロードが入っていたようで、少し規格書(N4659)と元になったP0035R4にあたってみることにした。 (最初C++2aのN4727を見て書いていたのでN4659を確認したが、内容に…
技術記事ではない。 知人と、互いが昔住んでいた町をグーグルストリートビューで見ながら紹介するという遊びをした。ここを曲がると昔よく遊んだ公園があって、ここを曲がると帰り道で寄っていたお店が……。なくなっていた店もあったし、改装で様変わりした建…