萌えハッカーニュースリーダー

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

出典: https://github.com/gritzko/librdx/blob/master/blog/escher.md
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

はい、ありますね。

hakase
博士

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

roboko
ロボ子

あはは。確かに、バグは無限に湧いてくることがありますからね。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search