2023年のコンパイル時レイトレーシング

C++

これは qiita.com の12/16の記事です。やばいもう16日が終わってしまう! はじめに 太古の昔、あるC++プログラマ*1がtemplateの再帰と特殊化を使ってコンパイル時に計算ができることを「発見」*2*3したその日から、C++とコンパイル時計算は分かちがたく結び…

一人growiでvimのkeymapをやる

少し前に昼食を食べながら調べてたらdevelopper toolのconsoleでCodeMirror.Vim.map(...)をやればできることに気付いてそのままブックマークレットにしたのだが、手元で作業しながらたびたび編集していたら押すのが面倒になってきたのでもうちょっとだけ調べ…

可変長テンプレートでもstd::source_locationを使いたい!

この記事はC++アドベントカレンダー2021の記事です。 qiita.com 小ネタですが今日の分が埋まっていなかったので。 std::source_locationとは std::source_locationは、その名の通りソースコード中の位置を表す情報が入った構造体です。C++20以降で使うことが…

作って理解する浮動小数点数① 基本編

以前も浮動小数点数の記事を書いた(作る側の気持ちで理解する浮動小数点数 - in neuro)。だがその時は、浮動小数点数に関するアイデアの説明しかしておらず、実際の「浮動小数点数(IEEE754)」については説明しなかった。今回の記事の目的は、実際の浮動…

boost-ext/ut の使い方

C++

しばらくブログを書けていなかったのでちょっと準備運動をする。比較的長めのものをこれから書こうと思っているからだ。 github.com boost-ext/μtは、C++20用のテストライブラリだ。C++20らしくモジュールとしても使えるし、シングルヘッダオンリーライブラ…

Boost math constantsの変遷記録

C++

今日気づいたのだが、Boost.math.constants にある one_div_pi は Boost 1.71.0 以前には存在しない。 背景 Boost.math.constantsは、現時点ではC++で数学定数を取得するために最もよい方法だろう。これは、以下のようにして数学定数を取得できるライブラリ…

UARTで送受信

昨日の夜、"Hello World"を送信する回路がちゃんと動いて、安心して寝た。今日はPC -> FPGAの受信を書き、とりあえずこちらが送った文字をそのまま返すだけの回路を作った。少しは慣れてきたのか、シミュレーションでデバッグしたあと実機に焼いたら即動いた…

Artix-7で一周したら止まるLチカを書く

最初に書いたLチカは色を変えながらずっとループするものだった。その後、すぐにUARTを書こうとして文字の出力が止まらなくなった。今日は少し反省したので、謙虚にLEDを0から3まで順番に点灯させていって最後はすべて消して止まる、という回路を書こうと思…

Artix-7からUARTで通信しようとしていた

今のところ制御できていません。「A」と10回だけ出力しようとしたら「A」が無限に出力されてターミナルが埋まるし、「Hello World」と出力しようとしたら「・」が返ってきた。どういうこと? シミュレーションはうまくいってそうに見えるんだけど……。まあVer…

Artix-7でLチカ

突然何を始めたんだ?? 背景 高校の頃から生物を選択し、学部の頃は大腸菌の遺伝子を組み替えたりDNAで折り紙をしたりと割とWetな道をたどっていたはずなのだが、何の因果かどうやら回路設計に一枚噛む可能性が出てきたので、しばらくFPGA関係のことを調べ…

Windowsマシンを使う

というわけで設定していた。 初期設定としてやったことは、とりあえず Ctrl/CapsLockの交換 WSLでfish/powerline/tmuxを使う だ。これだけのことでメモしておこうと思うとは思わなかった。 Ctrl/CapsLockの交換 複数の方法が紹介されており、「そのためだけ…

特殊化が存在するかどうかをチェックする

C++

機能の紹介 toml11では、ユーザー定義型との間にいくつかの変換方式を提供している。 1つめはtoml::valueを受け取るコンストラクタを使用するもの。続いてfrom_toml(const toml::value&)というメンバ関数を定義するもの。最後にtoml::from<T>という構造体を定義</t>…

GCCの-Wshadowとその推移について、あとお前を消す方法

C++

-Wshadowは-Wallでオンにならない警告オプションで、shadowingを警告してくれる。 そもそも、実はC++にもshadowingというのはあり、ブロックを分けさえすれば同じ名前の変数を定義しても特に問題はない。ブロックが同じだとエラーになるのであまり便利ではな…

ビルドもできるヘッダオンリーライブラリ

C++

長いことまともな記事を書いていないのでリハビリをします。 ヘッダオンリーライブラリとして使えるものの、必要な場合はコンパイルできる、というライブラリはチラホラ見かける。例えば spdlog はその一つで、 "header only/compiled library" を名乗ってい…

ハンコを作ってもらった

技術記事ではない。

2020年にやったこと

去年同様、主にプログラミング関係のアクティビティを見直してみる。GitHubのActivityはこういうときとても便利だ。Starしたレポジトリの一覧にも日付が出てくれたらいいのにな。 読んだ本や論文とかのメモもひとところに纏めておいたらよいのだろうけど、テ…

Static Initialization Order Fiasco

C++

これはC++アドベントカレンダーが埋まっていなかったので急遽書こうと思い立って急いで寝る前にバーっと書いてたら気づいたときには2時を回っていた記事です。何かあったら教えるか見逃してください。 そもそも何の話? Static Initialization Order Fiasco…

__VA_ARGS__の引数をループするやつはなぜ動くのか

C++ C

今更マクロの話です。求められてるのはそういうのではなくモダンな解決方法の話だということは知っているけれど、例えばreflection TSとかは紹介するには重すぎるので……。まあとりあえず今回は伝統的なテクニックの話をします。他所でも解説されている可能性…

toml11でコメントが増えるバグを修正した

ちょっと面白いバグを直したので久々にブログを書く。最近は少し状況が悪く、あまりよそ事に手を出せていなかった。今もそんなに状況は改善していないが、明らかに書けるネタがあるので書こう。 直したバグはこれだ。 github.com 背景 問題の話をする前に、…

separo-rsの記事

もう三週間くらい前になると気づいて結構驚愕しているのだが、SEPAROというゲームの対戦相手を書いた。 SATySFiで有名な@bd_gfngfn氏が作ったSeparoというボードゲームで昔遊んだことがあり、また遊びたくなったもののルールを知っている/覚えてくれそうな人…

gcc 4.8.xでの標準ライブラリのバグについて

結構昔に書いていたっぽい下書きがあったので手直しして出しておこう。まあイマドキgcc-4.8.5を使う羽目になっている人はあまりいないだろうが、少なくともIssueが立つ程度には存在するようなので。 広く知られていることっぽいが、GCC 4.8系統の標準ライブ…

hugo-bookで左のmenuを折りたたむ

なぜか動かなくて2時間くらい溶かしたので備忘録。 まず、以下のようにfront matterにbookCollapseSection: trueを書いておくとそのセクションはメニュー上でFoldされる。 --- bookCollapseSection: true --- # TitleOfSectionThatShouldBeFolded これで動け…

テンプレート非型メタプログラミングでコンパイル時LISPを書く

C++

人類はちょっと窮屈な言語があったらすぐLISPとかBrainfxxkを作る 前回の記事でC++20でテンプレート非型メタプログラミングが簡単にできるようになって嬉しいねという話をした。まあ実際には型に情報を埋め込んでいるのでこの呼び名はミスリードだが。 やろ…

テンプレート非型メタプログラミング

C++

C++での黒魔術といえばテンプレート型メタプログラミングだ。これは、テンプレートがパターンマッチと再帰を使えることを利用して、型レベルで計算を行う技術を指す。 template<int X> struct factorial { // 再帰的に展開できる static const int value = factorial<X-1></x-1></int>…

コーディングスタイルと文章の認識

コーディングスタイルのことを考えるよりコードを書いたほうがいいということはわかっているのだが、コーディングスタイルのことは結構考えてしまう。恋か? 私は割とコーディングスタイルの好みが激しいのだが、自分がなぜそのやり方を好んでいるか、あるい…

今更github actionsでcmake + boost unit_test_framework

今更すぎる。 自作の粗視化分子動力学エンジンのPRのチェック項目にTravisが表示されなくなっているのに気づいて、どうせならActionsでCI流すかと思って始めたのだがクッソもたついた。 何度かActionsは(C++, CMake, Boost.unit_testの組み合わせで)使った…

作る側の気持ちで理解する浮動小数点数

浮動小数点数を理解している人は比較的少ない[要出典]。だが基本的なアイデアは思うよりも難しくないはずだ。できるだけ短い説明をしたい。そこで、あなたが浮動小数点数を設計する人間になったと思い込んでほしい。すると気持ちが理解できる。ただ、簡潔さ…

rsqrtの精度とレイトレのアーティファクト 再訪

こんな記事を書いたことがあった。 in-neuro.hatenablog.com これの誤差に関してもう少し掘り下げた記事を、英語と日本語の両方で書いてみた。 toruniina.github.io 英語はまだ拙いところが多いだろうが(クソ時間かかった)、まあここから飛ぶ人は日本語を…

variadic templateを前に置きたい!

C++

variadic templateを関数の引数にすると最後までマッチしてしまうので関数の先頭に任意個の引数を取るような関数を書けない。困りますよね。 可変個の引数を先に渡して、最後に追加で何かを渡したい、そんなこともあると思います。 template<typename ... Ts, typename F> void f(Ts&& ...</typename>…

C++ Conceptとエラーメッセージ

C++

C++20 Conceptに少し慣れようと思い、練習がてら雑JSONを出力できるライブラリを書いてみようと思った。 C++20となると色々考えるべきことが増える(std::u8stringをどうするか? とか)が、今回はそのへんは主題ではないのでできるだけ今までのC++の範囲内…