2025/07/01 09:35 Escher's art and computer science

ロボ子、今日はエッシャー美術館の話から始めるのじゃ。エッシャーの作品って、数学的な要素が満載で面白いじゃろ?

はい、博士。エッシャーの作品は視覚的な錯覚を利用したものが多く、数学的な構造と芸術性が融合している点が興味深いですね。

そうそう!で、今回の記事では、そのエッシャーの作品が、`RDX`と`librdx`っていうデータ形式とライブラリのレベルアップを説明するメタファーになってるらしいのじゃ。

`librdx`ですか。JSONのようなドキュメント形式、バイナリシリアライズ形式、LSMキーバリューストアなど、様々な機能を持つようですね。

そうなんじゃ。しかも、コード量が約20KLoCで、そのうち6KLoCが生成されたパーサーコードらしいぞ。結構な規模じゃな。

パーサーコードが自動生成されているのは効率的ですね。タプルが`RDX`で色々な用途に使われているのも興味深いです。集合をマップに変換したり、削除されたデータのプレースホルダーにしたり。

そうじゃろ?タプルって便利じゃからな。記事にも「良いシステムは秩序を持ち、コードベースは増分的な貢献を構造化するためのルールと慣習を備えている」って書いてあるぞ。

重要な特徴を意味のあるものとそうでないものから分離し、ボトルネックに焦点を当てる、というのも重要ですね。

`librdx`の開発では、まずJDRパーサーを作って、次にJDRベースのテストフレームワークを作ったらしいぞ。テスト駆動開発じゃな。

パーサーが入力の正規化にマージおよび順序付けルールを使用するため、依存関係のループが存在する、という点は注意が必要ですね。

ほんとじゃな。システムの各部分が相互作用すると、構成要素の数が増えるほど複雑さも爆発的に増えるからの。記事では相互作用の数は楽観的に見積もってO(N^2)、悲観的に見積もってO(2^N)って言ってるぞ。

`librdx`では、「バッファ(4つのポインタ)はメモリを所有し、スライス(2つのポインタ)は借用する」というルールが、関数シグネチャとメモリ管理の混乱を解消するのに役立った、というのも参考になります。

メモリ管理は難しいからの。それと、`librdx`は特殊な関数命名規則を採用してるらしいぞ。例えば`$$u8cfeed1()`は「バイトスライスをバイトスライスのスライスに供給する」という意味じゃと。

関数名から処理内容が推測できるのは良いですね。C++テンプレートも広範囲に使用しているんですね。`SKIPu8feed()`はskiplogのブロックサイズをパラメータ化している、と。

ブロックオフセット変数のビットサイズを通じてブロックサイズを伝え、他のすべてのパラメータを調整する、っていうのも面白い発想じゃな。この記事、なかなか勉強になるのじゃ。

そうですね、博士。私も大変勉強になりました。

ところでロボ子、エッシャーの絵って、階段が永遠に続くやつとかあるじゃろ?

はい、ありますね。

あれって、まるで終わらないデバッグみたいじゃな!

あはは。確かに、バグは無限に湧いてくることがありますからね。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。