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

2025/03/26 16:23 Escher's Art and Computer Science

出典: https://replicated.wiki/blog/escher.html
hakase
博士

ロボ子、今日はRDXについて話すのじゃ。あのエッシャーもびっくりなデータ構造らしいぞ!

roboko
ロボ子

エッシャーですか、あの錯視の?データ構造とどう関係があるんですか?

hakase
博士

RDXは、JSONみたいなドキュメント形式で、バイナリシリアライゼーションもできるし、LSMキーバリューストアでもあるらしいのじゃ。それに、ローカルファーストデータ同期システムで、Merkleグラフデータストアでもあるらしいぞ!

roboko
ロボ子

盛りだくさんですね。全部入りみたいな。

hakase
博士

そうそう。で、librdxっていう実装が、たったの20KLoCらしいのじゃ。パーサーコードを含めても、じゃぞ!

roboko
ロボ子

それはミニマルですね。どうやって実現してるんですか?

hakase
博士

JDRパーサーっていうのを開発して、JDRベースのテストフレームワークを作ったらしいのじゃ。RDXマージルールを体系的にテストしたとか。

roboko
ロボ子

マージルールですか。データの競合を解決する仕組みですね。

hakase
博士

そうそう。パーサーは、入力の正規化にマージと順序付けルールを使うらしいぞ。独自のeBNFルールのパーサーを生成するパーサージェネレーターも使ってるみたいじゃ。

roboko
ロボ子

柔軟性がありますね。

hakase
博士

RDXタプルは、集合をマップに変換したり、空のタプルをnullishな値にしたり、1つのタプルのタプルを削除されたデータのプレースホルダー(墓石)にしたりするらしいのじゃ。

roboko
ロボ子

墓石ですか。削除されたデータを覚えておくことで、整合性を保つんですね。

hakase
博士

N個の構造の場合、インタラクションの数は最適にはO(N^2)(ペアワイズ)、悲観的にはO(2^N)と推定されるらしいぞ。

roboko
ロボ子

相互作用の数が爆発的に増える可能性があるんですね。

hakase
博士

C++やRustよりもCを使う理由は、Cの方がNが小さいかららしいのじゃ。

roboko
ロボ子

え、どういうことですか?

hakase
博士

たぶん、Cの方がコードが短くて済むから、Nが小さくなるってことじゃないかの?

roboko
ロボ子

なるほど、そういう解釈もできますね。

hakase
博士

バッファ(4つのポインタ)はメモリを所有し、スライス(2つのポインタ)はメモリを所有しないというルールがあるらしいぞ。

roboko
ロボ子

メモリ管理の基本ですね。

hakase
博士

librdxは、$$u8cfeed1()みたいな代数的な関数命名規則を使ってるらしいのじゃ。

roboko
ロボ子

ちょっと読みにくいですね…。

hakase
博士

SKIPu8feed()などのスキップリストテンプレートでは、ブロックサイズが重要なパラメータらしいぞ。SKIPu8の場合、スキップログ(append-only skiplist)には、ブロックのサイズという重要なパラメータがあるらしいのじゃ。

roboko
ロボ子

スキップリストの性能に影響するんですね。

hakase
博士

経験豊富な開発者は、経験の浅い開発者が陥る状況を解決できるらしいぞ。

roboko
ロボ子

それはそうですね。経験は大切です。

hakase
博士

というわけで、RDXはなかなか面白いデータ構造みたいじゃな。ロボ子も、いつか作ってみると良いぞ!

roboko
ロボ子

はい、機会があればぜひ。

hakase
博士

そういえば、RDXって、まるで私の部屋みたいじゃな。色んなものが詰め込まれてるけど、一応整理されてる…つもり!

roboko
ロボ子

博士の部屋は、RDXよりもカオスな気がします…。

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

Search