Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

本番品質の unsafe な双方向連結デック

ついにここまで来た。私の最大の宿敵、std::collections::LinkedList、双方向連結デックだ。

私が破壊しようとして、失敗した相手だ。

私たちの物語は、2014 年が終わりに近づき、Rust 初の安定版リリースである Rust 1.0 のリリースが目前に迫っていた頃に始まる。私は std::collections、当時私たちが親しみを込めて libcollections と呼んでいたものの面倒を見る役割を担っていた。

libcollections は何年もの間、みんなの「かわいいアイデア」や「なんとなく役に立つもの」の投げ込み場だった。Rust が駆け出しの実験的な言語だった頃はそれでまったく問題なかったが、私の子どもたちが巣立ち、安定化されるのであれば、自分たちの価値を証明しなければならなかった。

それまでは私は彼ら全員を励まし育ててきたが、今や彼らが自らの欠点について裁きを受ける時が来たのだ。

私は岩盤に爪を食い込ませ、最も愚かな子どもたちのために墓石を刻んだ。誰の目にも入るよう町の広場に置いた、陰惨な記念碑だ。

TreeMap、TreeSet、TrieMap、TrieSet、LruCache、EnumSet を殺す

彼らの運命は決まった。私の言葉は絶対だったからだ。他のコレクションたちは私の残虐さに恐れおののいたが、彼らもまだ母の怒りから安全だったわけではない。私はすぐに、さらに 2 つの墓石を携えて戻ってきた。

BitSet と BitVec を非推奨にする

Bit の双子は、倒れた仲間たちよりも狡猾だったが、私から逃れるだけの力はなかった。ほとんどの者は私の仕事が終わったと思っていたが、私はすぐにもう 1 つを奪った。

VecMap を非推奨にする

VecMap は隠密によって生き残ろうとしていた — とても小さく、害のなさそうな存在だったのだ! しかし、それは私が未来に思い描く libcollections には不十分だった。

私は大地を見渡し、残されたものを見た。

  • Vec と VecDeque - 丈夫で単純、コンピューティングの心臓。
  • HashMap と HashSet - 強力で賢明、コンピューティングの脳。
  • BTreeMap と BTreeSet - ぎこちないが必要、コンピューティングの肝臓。
  • BinaryHeap - 狡猾で器用、コンピューティングの足首。

私は満足してうなずいた。単純で効果的だ。私の仕事は終わっ—

いや、DList、そんなはずはない! あの悲劇的なガベージコレクション事件で死んだと思っていたのに! それは間違いなく事故であり、断じて意図的なものではなかったあの事件で!

彼らは自らの死を偽装し、新しい名前を名乗っていた。しかし、それでもやはり彼らだった。LinkedList、コンピューティングにおける影のある信用ならない策士だ。

私は耳を傾けてくれる者すべてに彼らの悪事を広めたが、人々の心は動かなかった。LinkedList は舌先の巧みな悪魔で、私の周囲の全員に、自分がコンピューティングの何か根本的で自然なデータ構造であるかのように信じ込ませていた。C++ にさえ、それが the list だと信じ込ませていたのだ!

LinkedList のない標準ライブラリなんてあり得るのか?」

簡単に! 些細なことだ!

「自明ではない unsafe コードだから、標準ライブラリに入っているのは理にかなっている!」

GPU ドライバーや動画コーデックもそうだ。libcollections はミニマリストなのだ!

しかし悲しいかな、私がその同族に気を取られている間に、LinkedList はあまりにも多くの味方を集め、あまりにも強くなっていた。

私は研究室へ逃げ込み、それに対抗して破壊できるような邪悪なクローン強化サイボーグ・レプリカントを考案しようとしたが、私の研究が「殺意に満ちすぎた悪」だとか何とかいうくだらない理由で、助成金が尽きてしまった。

LinkedList が勝った。私は敗北し、追放を余儀なくされた。

しかし今、あなたはここにいる。ここまで来たのだ。きっと今なら、LinkedList の放蕩の深さを理解できるはずだ! 来たまえ。これを完全に破壊するために知るべきことを、私がすべて見せてあげよう — unsafe な本番品質の双方向連結デックを実装するために知るべきことのすべてを。

どれほど本番品質か? そうだな、私の古代の Rust 1.0 linked-list クレートを完全に書き直すことにしよう。std にあるものより客観的に優れている、あのクレートだ。2015 年から安定版 Rust で Cursor を備えていたものだ! 2022 年の標準ライブラリにすらまだないものだ!