2019-01-01から1年間の記事一覧
だいぶ前(前の冬なので半年以上前)に、Ray tracing in one weekendを読みながらRustでレイトレを実装していたのだが、そこでrsqrtを使ったら画像が変になったのを思い出した。理由は今も(ちゃんと調べていないので)よくわかっていないが、とりあえず思い…
起きたこと TOML v0.5.0までは、配列に異なる型の要素を混ぜるのは許可されていなかった。 array = [1, 2, 3] # OK invalid1 = [1, "foo", 2019-11-08] # error invalid2 = [1, 2, 3.14, 4, 5] # error が、混ぜたいという人がかなり多く、ずっと議論が続い…
しばらく前だが、アップデートした。最新バージョンはv3.1.0だ。 Added TOML11_USE_UNRELEASED_TOML_FEATURES TOML言語仕様はまだちょいちょいバージョンアップされている。なので「TOMLとしてリリースされていないがtoml-lang/toml:masterにmergeされた、お…
今までドキュメントは適当なMarkdownで書いてそれを適当にGitBookでウェブサイトに変換していた。だがGitBookはコマンドラインツールの開発をやめてしまっている。なのでGitBook公式のホスティングサービスに移行するか、何か代替品を探さなければならない。…
そういえば、自分のインデントスタイルについて人に話すことってないなと思ったので。 インデントやコードのスタイルは初心者には軽視されがちだ。なぜならそれは「本質ではない」からだ。どんなコーディングスタイルでも動くものは動く。コンパイラにとって…
C++は静的に型付けを行うので、基本的に実行時に型を切り替えることはできない。なので、入力に応じて異なる型を返すことはできない。だが継承を使っているなら、常に基底クラスへのポインタを返しつつ、入力に応じて派生クラスのテンプレート引数を変更する…
全く同じアルゴリズムを似たようなスキルの人が書いても、使った言語によって速度差が出る。 たとえばガベージコレクタが一瞬実行を停止させてしまったり、配列の境界チェックが必ず行われたり、ネイティブコードにコンパイルされなかったり、そもそもの処理…
gccには-Ofastというオプションが存在する。これは、標準規格への適合性を犠牲にしてでも高速なバイナリを吐くモードだ。色々なことが犠牲になるが、NaNチェックも犠牲になる。 以下のコードを見て欲しい。 wandbox.org #include <iostream> #include <cassert> #include <cmath> int m</cmath></cassert></iostream>…
どうやら昨日mathjaxがメジャーバージョンアップ(v3.0.0)したらしい。リリースノートによると、中身がモダンなテクニックを使って全て書きなおされているようだ。 This version is a complete rewrite of MathJax from the ground up using modern program…
タイトルが長い。 でもこれ以上何かを削ると不正確なタイトルになる。もしかするともう少し条件を広げても同じエラーが出るかも知れないが。 extern templateというのがあり、以下の記事に詳しい。 qiita.com かい摘んで説明しておこう。ヘッダファイルでext…
github.com これがTOMLの作者(Tom Preston-Werner)の手によってマージされていた。一応masterブランチにマージされてもリリースまでにrevertされる可能性はあるとはいえ、それなりの確率でTOML 1.0.0でリリースされると思われる。 この変更で、以下のよう…
今までBoostは1.58~1.69までしかインストールしていなかったのだが、今日1.71をビルドしてインストールした。そしてこれにハマってCMakeCacheやbuild/ディレクトリを消してはCMakeを実行しなおすことを繰り返して10分くらい時間を無駄にした。 github.com リ…
しばらく前に、CUDAを使ってGPU上に作ったデータをそのままGPU上でpixelの配列にしてそのまま画面に描画しようとしていた。 cuda_practice/ising-show at master · ToruNiina/cuda_practice · GitHub 例えばこれなのだが。これは、isingモデルをシミュレーシ…
cerealで継承を使ったサンプルを少し前に掲載したが、これらのクラスがテンプレートだったらどうなるか。特に、継承関係を登録するマクロ。 この部分だ。 CEREAL_REGISTER_TYPE(sample::Derived) CEREAL_REGISTER_POLYMORPHIC_RELATION(sample::Base, sample…
メモです。cerealは説明不要のシリアライズ用ライブラリ。 派生クラスをstd::unique_ptr<Base>として持っている時の最小サンプル。 cereal::base_class<Base>(this)をシリアライズするのを忘れない CEREAL_REGISTER_TYPE(sample::Derived)を名前空間の外に書く。セミコロ</base></base>…
久々に少し非自明なことをCUDA+thrustでやった。大体動くようになるまでまる一日(半日+半日なので別のmetricsでは2日)かかった。 github.com BVHとはなんぞやという話は、以下の記事にとてもよくまとまっている。というか、多分この記事の著者は私のような…
毎回思うんだけどどういうタイミングでリリースタグ打てばいいのかよくわからない。皆どうしてるんだろう。 github.com 基本的に前回記事を書いた時からそんなに変わっていない。一応自分で使ってみて気になった細かなことがいくつかあるが(例えばカスタム…
以前「やりたいな〜」と書いた通りの変更をゴリっと入れてみた。まだマージしていないが、v3ブランチがpushされている。今まで通していたテストは全て通った。追加機能のテストも最低限は通った。しばらくテストの拡充をしてからベータ版を出すつもりでいる…
今回はC++規格書のif文周りを読んでみたい。 今更一体全体何なんだと思う人が大半だと思うが、普段息をするように使っているものだからこそ、規格書を読んでおくのは良いことだと思うのだ。普通の人が規格書を読むのは、知らないものについて勉強するときか…
技術記事ではない。
TL;DR: .nojekyllという名前の空ファイルをgithub pagesのルートに入れる タイトルの通りの現象が起きて困っていた。 解決策の拍子抜け感に比べて状況としては結構こんがらがっていたのだが、順に説明していこうと思う。 以前に書いた方法で、Gitbookを使っ…
ふと、そういえばbrainfuckよりも高級な言語処理系を作ってない(太古の昔に作ろうとした滅茶苦茶なやつは除く)ことを思い出し、ちょっとlisp処理系でも作るか〜〜と思って実装した。連休だし、普段やってるプロジェクトしかやらずに過ぎていくのももったい…
しすぎじゃない? 変更点 まずは、C++17になっていたら文字列をstd::string_viewで受け取ったり、toml::valueをstd::string_viewで初期化できるようにした。どうやらC++17で使っている人がいたっぽいので、特に要求はなかったがあったほうがいいかなと思って…
遅すぎた(間違えてtabを押すと数秒止まる)ので「fish completion slow」とかでぐぐってみたところ、「遅いよ」なるIssueが立っていた。 github.com このコメントで「3.0で速くしたよ」というコメントがあった。 Slow git auto-complete... how to turn off…
toml11はしばらく前に開発して、最近も結構いじり続けており、それなりの数のユーザーがついてるっぽくて結構嬉しくなっているライブラリだ。そもそもが自分のために作ったものなので、自分の都合で結構改変することがある。これは、まあレポジトリのオーナ…
はい。C++17を使っている人はnewが全部やってくれるようになったので不要な話です。C++17以前のコードのため。 Introduction アライメントとは、ざっくり言うとメモリ上の位置調整であり、普段は気にしなくていい(コンパイラやmallocがちゃんとやってくれる…
なんか話題になっていたので、具体例を考えてみたい。 継承を使っているとき 通常、C++で継承は使わない。テンプレートの方がたいてい実行時性能がよいので、テンプレートを使うからである[要出典][独自研究]。 ライブラリの場合は普通ユーザーがコードを書…
注:ネタバレを避けようという気持ちは全くありません。むしろ根本的なアイデアを解説してさえいる 『順列都市』を最初に読んだのは確か中学三年生か高校一年生の頃で、当時は塵理論のアイデアを今にして思えば何一つ理解できていなかったし、主人公ダラムが…
1ヶ月くらい、土日や夜の自由時間を主に使ってGPUを使ったレイトレを書いていた。この話もまとめたいな〜と思いながらダラダラしていたら1週間が経過してしまった。みんなどこから時間をひねり出しているんだ? 私以外の人々はその人生で一切ダラダラしない…
そういえば最近はC++関連のことに触れていないなと思ったので、今日はまだ日本語の説明があんまりないように見えるContractでも取り上げてみたい。サーベイ不足だったら申し訳ない。提案に関する情報は、 P0542R3: Support for contract based programming i…