14
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RustAdvent Calendar 2023

Day 7

Daniel Keep の『Rust 説話集』

Last updated at Posted at 2023-12-06

Daniel Keep 氏の "Rust Koans" を日本語に訳してみました。 "Rust Koans" は Rust 初心者が主人公として登場する 4編のプログラマー小噺 (hacker koan) で、 The Rust Programming Language Forum で読むことができます。

Rust の考え方が短い物語の形式で面白おかしく表現されていて、すべての Rustaceans にオススメの楽しい読み物になっています。私の拙い翻訳ですが、原作の魅力が少しでもお伝えできれば幸いです。

なお、原文は投稿先である TRPL Forum の規定により CC BY-NC-SA 3.0 Deed のライセンスの下で公開されています。この翻訳も同ライセンスの下で公開します。

「障害」

初学者のコルが寺院の前に立ち続けて八日が経っていた。目の前には寺院の大きな正門があり、二人の偉い門番が立っている。二人の門番は簡素な衣を身にまとっていたが、威厳があり、恐れられていた。コルは自信を持って、一人目の門番に向かって大股で歩いていった。そして、自分のプログラムを記した羊皮紙を手渡した。

一人目の門番は注意深く目を通しているが、この手順は形式的なものにすぎない。なぜなら昨日は二人目のところで承認を得られなかっただけなのだから。指摘された箇所はすべて解決したと彼は確信していた。

一人目の門番はコルに羊皮紙を手渡した。すると、目にも止まらない動きで、素手でコルの横っ面を平手打ちした。そして落ち着いた声で一人目の門番は語りかけた。「mismatched types: expected &Target, found &<T as Deref>::Target」その後、沈黙した。

コルは羊皮紙を手に取って、泣きそうになりながら近くのベンチへと引き下がった。八日だぞ。このプログラムがとくに複雑だというわけでもない。それでも彼は二人の門番に寺院への入場を許可してもらえなかった。他の寺院ではこれほど苦労したことはなかったのに!

他のベンチに初学者の仲間がいた。二日前に話をしたら、その同胞は自分のプログラムを受け入れてもらうために、二週間近く寺院に入れないまま、ずっと苦労しているのだと言っていた。

門番のせいだ。コルには自分のプログラムが意図した通りに動くと分かっていた。やつらは些細なエラーをあげつらい、まったくケチな理由で自分を拒んでいるようにしか思えなかった。自分の入場を拒否する理由を探してばかりいるんだ。そうなんだ!

彼は憤りを感じはじめていた。

そのとき、一人の僧侶がむこうの初学者に話しかけているのに気づいた。その会話はかなり弾んでいるようで、突然その初学者は叫び声を出し、飛び上がって寺院に向かって駆け出した。走りながら必死にプログラムを修正しているようだった。

だが、彼は二人の門番に立ち向かうことなく、壁の小さな薄汚い所へと歩いていった。コルが驚いたことに、壁が開いて秘密の入り口のようなものが現れた。その初学者はそこを通って、視界から去ってしまった。

コルは呆然と座っていた。秘密の入り口だって? なら……、なら二人の門番はただのたちのわるいイタズラかもしれないじゃないか! これは、他の僧侶が初学者に教える何かで、そう、謙虚さだ。あるいは……立ち直る力。あるいは……、あるいは……、ひょっとするとたんに陰で笑いものにするために。

「彼に言ったこと、知りたいですか?」声がした。コルが振り返るとベンチの横にさっきの僧侶が立っていた。「あなたは彼に別の道があると言ったのですね?」

「そうです」彼女は答えた。「 unsafe の扉のことを話したのです」

unsafe の?」コルは尋ねた。

「そうです。これは寺院で長く熱心に学んできた人だけが知っている秘密です。実はプログラムを書く際に立ちはだかる障害の多くは、このアンセーフの術を使うことで乗りこえることができるのです。そのように Rustnomicon に記されています」

「そんなに強力なんですか?」コルは驚いて尋ねた。

「非常に強力です。 transmute を使えば、たんに値の型を指定しなおすことも、ポインターのライフタイムを延ばすこともできます。さらにはなんと、空中からポインターを呼び出したり、無からデータを召喚することすらできるのです」

コルは寺院がどう機能しているのかようやく理解できた気がした。僧侶たちが使っているのはこの「アンセーフ」の魔法なのだ! でも……

「それなら、なぜあの二人の門番は雇われているのですか? この寺院に入るのに単に unsafe の扉を通っていけばいいのなら、べつに――」

その瞬間、寺院から血も凍るような悲鳴が聞こえた。それは中庭に響きわたり、急に終わった。

沈黙が訪れた。誰も動かなかった。誰も言葉を発しなかった。風も止んだ。鳥のさえずりすらも聞こえなくなった。

コルの心臓が高鳴る。

「あの門番があそこにいるのは」僧侶は正気に戻って言った。「あなたを、寺院と、その中にいるものから守るためなのです」

コルは振り返り、もう一度隠し扉のほうを見つめた。「それならなぜあの入り口があるのですか?」

「それは、門番たちも完全無欠ではないからです。時には一人で危険に立ち向かうことが必要な場合もあります」彼女はため息をついた。「ですが、みんながそれほど勇敢でも優秀でもないのです」

そう言って、僧侶はマントから羊皮紙を一枚取り出すと、二人の門番のほうへ歩いていった。一人目の門番は彼女のプログラムを読み、うなずいた。二人目の門番はプログラムを読むと、それを返して、彼女の顔を引っ叩いた。

「Borrowed value does not live long enough.」

僧侶は顔をこすりながら引き下がってベンチに座り、ブツブツと文句を言った。

その瞬間、コルは悟りを開いた。

「振る舞いのモデリング」

ある暖かい秋の日、ブラザー・ファーボルドは最近 Rust の寺院のそばにできた「抽象化の庭園」の中を歩いていた。複雑な抽象化がたくさん展示され、手の込んだ興味深いものもある中で、ふと一人の僧が自分の展示にあくせくと取り組んでいる様子が目に入った。彼女が初学者であることはローブから分かったが、その手はしわしわで擦りきれていて、長年の経験の積み重ねを物語っていた。彼女の周りにはさまざまな形や大きさの白い石が数十個と、いくつかの種類の熊手が散らばっていた。見ると、それぞれに一枚ずつ、単語が書かれた小さな紙のラベルが貼られている。

興味をそそられて、彼は近づいていった。

「おーい!」彼は言った。「お名前は?」

「私は初学者のマランといいます」

「あなたが取り組んでいる問題について、お聞きしてもいいですか?」

「この前にやったデザインを翻訳しようとしているんです。この寺院に合うかもしれないと思って」と初学者は答えながら、一枚の大きな紙に集中していた。その紙は箱のスケッチで覆われていて、それらの箱にはたくさんの線や矢印が結ばれていた。

「たくさんのラベルが見えますが、何に使うのですか?」

「これで各オブジェクトのクラスを定義します」

ブラザー・ファーボルドはちょっと間をおいて言った。「クラスとは何ですか?」

その初学者は困惑の表情を浮かべた。「クラスが何なのか知らないのですか?」

「ええ」と彼は答えた。「そのような言葉が遠くから風に乗って伝わってきたことはありますが、この地ではそれを使うことがないのです」

「ああ、なるほど」とマランは言った。「私が前にいた寺院では、物事の属性や振る舞いはすべてクラスを使って定義して、そうしてできた単一の定義を多くのもので共有するのです」

「便利な手法なんですね。そのスキームだと私は単なる庭師として、『世話をする』という振る舞いを持つということですか?」

初学者はうなずいて、小さな石を手に取った。「これは『石』です」彼女はそう言って、ブラザー・ファーボルトにラベルを見せた。「これはメソッドを持っていません。というのも、操作されるまで地面で動かないからです。ですが、『重量』や『体積』といった属性は持っています」

「では、石は何もできないということですか?」

「何もできません。一つ以上の『石』を『かき集める』能力を持つこの『熊手』とは違うのです。こうすることで、私は庭園や、その変遷をそっくりそのままモデル化できるのです」

「本当ですか? それなら、この単純なモデルで、起こりうるすべての相互作用を捉えられるのですね?」

「そうです!」初学者のマランは誇らしげに叫んだ。「私は長年これを使って、大成功を収めてきました」

「しかし、石が転がったり、光ったり、話したりしたい場合はどうなるのですか? クラスには制限が多いように聞こえます。私はそれぞれがしたいことを選べるように、もっと具体的に範囲を狭めて振る舞いを定義するほうが好きですね」

初学者は嘲笑した。「オブジェクトにできることは、設計されたことだけです。それ以上のことはできません。あなたは庭師だと仰っていましたが、新人を指導したり食事を作ったりするのがお仕事なのですか?」

「いいえ、私には庭造りの仕事がありますね」

「クラスを使えば、こうしたことは設計時にあなたのクラスで示されます。ですから、混乱することは決してありえません! 振る舞いの変更は、システム設計の変更と同じことなのです!」

「興味深いですね」ファーボルドはうなずいた。初学者は自分の仕事に戻った。

「正直言って、この寺院がよしとする形でこの考えを表現するのに苦労しています。ですが、私は信――」初学者は遮られた。白い小石が頭に当たったのだ。

マランが頭を抱えて振り返った。「あなた、私に石を投げましたか?」彼女は問いただした。

「私が?」ブラザー・ファーボルドは言った。「もちろん違いますよ。私は単なる『庭師』です。『石』を『投げる』ことなんてさっぱり分かりません」

「石が自分を投げるわけがないでしょう!」

「だとしても、あなたの設計ではそのようなことは起こりえません。きっと、あなたの勘違いですよ。投げられた石はありません」

初心者のマランは不平を漏らしながら、スケッチへ戻った。

しばらくして、長い木の棒が腕に当たって、彼女は後ずさった。「あなた――?」

「『熊手』にできるのは『石』を『かき集める』ことだけですよ。『初学者を打つ』ことはできません。気のせいですよ」

「しかし、あなたが……」

「おーい、ブラザー・ファーボルド!」別の僧侶が庭の反対側から叫んだ。「ブラザー・シーブが病気になりました。代わりに夕食を作っていただけませんか?」

「よろこんで、シスター・ドゥーレ。たったいま、この初学者への指導を終えたところです」

その瞬間、マランは悟りを開いた。

「完璧」

シスター・キヨウは、院長が「マスター・アーキテクト」と呼ぶ人物、マスター・トーランドの視線の下で不安そうに足をもぞもぞ動かしていた。「約束どおりに、私は完成した設計を月終わりに院長に提出したのです。インターフェイスについて正しい使い方や間違った使い方をすべて説明した三百六十一頁におよぶ膨大なドキュメントも添えました」と彼女は締めくくった。「このドキュメントをとくに誇りに思っていたのです。考えられるすべての非互換性や失敗例を詳しく列挙するために多大な労力を費やしました。ですが、院長はとても喜んでいるようには思いませんでした」

「それで?」トーランドは尋ねた。

「院長は仰いました。『きみは長い時間をかけて懸命に苦労してこれを完成させたところですが、今度はマスター・アーキテクトとともにしばらく働いてもらいます。きっと学ぶことがありますよ』それで私はこちらへお伺いしたのです」と彼女は言葉を終えた。

マスター・トーランドは了解してうなずいた。彼ははっきりとこれがどういうことなのか分かっているようだった。「院長は前から、寺院の境内に新しい宝塔を設計するように私に依頼していました。寺院の知識を収める場所にするのでしょう。私は建設を始める前に、設計が完璧であることを確認しなければなりません。そのため、私は院長に模型を送るつもりです。彼に検査してもらうためであると同時に、設計が適切かどうかを判断するためでもあります」

キヨウはうなずいた。極めて理にかなっていると思われたからだ。

「たまたまですが、ちょうどその模型が用意できています。そこにありますよ」マスターはそう言って、部屋の隅にあるテーブルを指さした。キヨウは歩いていくと、そこは繊細な彫刻と塗装が施された何百もの小さなバラバラな木片で覆われていた。

「これは……組み立ててない状態ですが、本当に模型と呼んでいいのでしょうか?」

「そうですね、シスター。この模型を組み立てるのが、あなたの仕事なのです」

「私の――?」

「私は何日もほとんど休むことなく働いてきました。気分をすっきりさせるために庭を歩かないといけません。あなたのように才能のある僧侶なら、何の問題もなくこの最後の手続きを完了させられますよ」

「マスター、私は建築ではなく、アルゴリズムの設計者です。木や石のことはほとんど分かりません」

「学ばなくてはならないことはたくさんありますが、幸いにも、私はこの作業に知っておくべきことはもうすべて知っていますし、あなたに必要な部品は作ってあります」

「しかし私は……実際、宝塔がどのように見えるべきなのか、あいまいにしか知らないのです!」

「あなたのような力量があれば、そう難しくありません」こうして、マスター・トーランドは模型の部品が山と積まれた工房にキヨウを一人残して去っていった。

キヨウは狼狽した。それがどのように見えるべきなのかすら知らないのに、模型を組み立てられるわけがない! さまざまな略図、設計図、大まかな方向性……。どうしてマスターらしき人物が、彼女にこれほど複雑なものを構築できると思えるのか? 何の手引もないのに?

しばらくの間、キヨウはごちゃまぜな木片をじっと見つめていた。ふと彼女は木片を調べ出した。すると、これほど部品が多くあるのに、どうも一つ一つが違っていて同じものがないようで、興味をそそられた。小さな木の梁や桁のような単純なものでさえ、さまざまに微妙な違いがあるようだった。さっきは端の接合部が四角形だったのに、今度のは丸い。これなんかは端が六角形だ。

気まぐれに彼女はそれっぽい二枚のタイルを手に取ってみた。組み合わさらない。一枚をおいて、次の一枚を試した。その次。またその次。ついに、ぴったりと合う二枚目を見つけた。

これでタイルが二枚になった。同じように、彼女は三枚目を探した。

それから四枚目を。

それから五枚目を。

毎回、うまくはまるのはただ一枚だけだった。すぐに、自分が小さな床のようなものを作り上げたことに気づいた。床には他の部品がはまりそうな穴がいくつか開いている。注意深く部品の山を探したところ、ぴったりはまるちょうど五本の梁桁を見つけた。彼女はそれらを組み立てた。

太陽が空を横切るまで、これが何度も何度も続いた。宝塔は、それが自らの意志であるかのように、どんどんと高く伸びていった。床は組み上がり、壁が取り付けられ、瓦が所定の位置に定まっていく。キヨウは模型がどう一体化していくのか制御できないように思えた。それはまるで模型自体がどのような形状であるべきかを知っていて、彼女にどんな自由も許す気はないかのようだった。

太陽が空に沈む頃、キヨウは模型が完成していることに気づいた。どの部品も使われている。構造はしっかりしていた。高さがあり、屋根は優雅な曲線を描いていた。彼女にタネや仕掛けは分からなかったが、マスター・トーランドは組み立てに立ち会わなかったのに、どうにかして安定した美しい宝塔の模型を作り上げてしまったのだ。

その瞬間、キヨウは悟りを開いた。

「ああ、ちょうどいい時間に散歩から帰ってこれましたね」

キヨウは彼に顔を向けなかった。「散歩は気持ちよかったですか?」

「ええ、とても。では、院長にその模型を届けてもらえますか。そして、学んだことを話してください」


「というわけで、私は戻ってきました」と彼女は話し終えて、院長に完成した模型を見せた。

院長は顔をしかめた。「それで」と彼は尋ねた。「何を学びましたか?」

「私は自分のドキュメントを誇りに思っていましたが、それは間違いでした。多大な努力と配慮から生まれたものだとはいえ、その努力はインターフェイスそのものを改善するために使うべきでした。私が尽力すべきだったのは、三百ページにわたる説明が必要とされないインターフェイスを作ることだったのです。型そのものがその使い方をプログラマーに手引すればよかったのです」

「完璧なインターフェイスとは、たとえ偶然であっても、間違った使い方をすることができないものなのです」

院長はため息をついた。「まあ、仕方ないことですね。来てください、他のと同じ場所に置きにいきましょう」

戸惑いながらも、キヨウは院長の後についていって、寺院の曲がりくねった回廊を通っていった。奥まで行くと、長い広間にたどり着いた。広間の壁には棚が並んでいた。

それぞれの棚は何十、何百もの小さな塔の模型で覆われていた。その一つ一つが最新のものとはわずかに違っている。部屋の奥まで歩いて、小さな構造体の配列を通り過ぎると、院長はある棚に空いた場所を指し示し、キヨウに自分の模型を置かせた。

これは幾度となく教えられ、学ばれる教訓だったようだ。

「あなたが学んだ教訓は貴重なものですが、私はそのためにあなたをマスター・トーランドのもとへと送ったわけではなかったのです」

「えっ?」

「違うのです。マスター・トーランドには約八年前にこの寺院の宝塔の建設を依頼していました。彼は設計を完了するたびに、それを取り下げて、まだ完璧ではないと主張しています」彼は再びため息をついた。

「私はむしろあなたが彼に実用主義の価値と、完成のためには完璧さと妥協する大切さとを教えてくれるかもしれないと期待していたのです。たとえ醜くてガタガタの小屋だったとしても、仮想上の完全無欠な宝塔よりもずっと役に立つのだと」

その瞬間、キヨウは悟りを開いた。

「Puom」

ある日、初学者のコルはマスター・トゥオルのところに来てこう言った。「あるプログラムをほぼ書き終えたのですが、コードに繰り返しが見られます。そのパターンは関数やトレイトによってまとめられるほど規則的ではありません。マクロを使うつもりですが、どのようにすればいいのか分りません」

マスター・トゥオルは思案した。「君のもやを晴らしてくれそうな人物に心当たりがあります」

彼らはともに本堂から立ち去って、庭を通り過ぎた。境内の外れまで来ると、奇妙な建物に出くわした。板材、仕切り、瓦、窓の一つ一つが独特で、形、大きさ、色、質感、素材がどれも違っている……。「ここは?」と初学者は尋ねた。

「ここは『天降る雪片』の一族が『構文抽象』の術を実践する場所です。彼らは何よりも繰り返しを嫌います」コルはうなずいて中に入った。

建物の内部は、まさに執拗なまでに独自性にあふれていた。扉は同じ形や大きさを持つものは二つとない。ろうそくや燭台には一つ一つ違った意匠や色彩が施されていた。コルはめまいを感じはじめた。

僧侶自体もこの流儀を体現していた。『天降る雪片』の一族は、他の僧侶が着る無地の暗褐色の衣ではなく、素材や色をでたらめにまとめたものを身に付けていた。コルは思った。もしかしたら大嵐が織物商人の服を拾い上げ、疑うことを知らないこの僧侶たちに預けていったのかもしれないと。

彼の視線は壁に惹きつけられた。壁がプログラムで覆われていて、しかもその言語が奇妙だった。ここは APL の寺院なのだろうかと思えるくらいに……。しかし、そこらかしこに見覚えのある構文が見つかるものの、意味がほとんど分からないものばかりだった。

僧侶たちの話し方もまた奇妙だった。コルは何組かのグループが静かに立ってお互いを見つめているのを目の当たりにした。もしかしたら彼らは話すのを禁じられているのではないか、とコルが思いはじめていたとき、ある一団から叫び声が上がった。

「Sie durm! Wik puom, eeis.」

そう言うと、その一団に立っていた僧侶たちは互いにうなずき、立ち去ってしまった。

「マスター……」コルが先に声を出した。

「言ったように、彼らは繰り返しを嫌います。そのため、私たちの言語を嫌っているのです。冗長さに満ちていて、もちろん不正確さでもいっぱいですから。代わりに、彼らは完全に正確で完全に最適な彼らの言葉を使います。彼らは言いたいことだけを言って、それ以外のことは言わないのです」

「しかし、それ以外のときがとても静かです」

マスター・トゥオルはうなずいた。「何か言葉を口にする前に、まったくきっちり正確に、言いたいことを決めておくのは簡単なことだと思いますか?」

二人は小さな五角形の戸口をくぐり抜けると、千の色合いで濃灰色に染められた服を身にまとった一人の僧に出会った。その衣は白い糸がつくる魅惑的な模様に包まれていて、その糸は螺旋を描きながら服の中へ永遠に続いていくように見えた。直線や方形が無限に渦巻くその様は人間業ではなかった。

「初学者よ、この方がマスター・クォエム、『天降る雪片』の一族の長です」そう言われた僧侶はうなずいて挨拶した。「彼にあなたの問題を話してみなさい」

コルは息を呑んだ。「私はほぼプログラムを完成させたのですが、繰り返しが多く見られるのです」

「あるロジックでは、全体的には違いがないにもかかわらず、異なる関数を呼び出す必要があります。他にも、複数の型が似たメソッドを実装していますが、トレイトでまとめることができません」

「マクロがこの問題の解決策になるかもしれないと話していたところです。何か助言をいただけるでしょうか?」

マスター・クォエムは黙っていた。何分ものあいだ、彼はじっとコルを見つめていた。それがあまりに長く続いて、コルはマスターの視線のもとで不安そうに足をもぞもぞしはじめた。もしかして何か気に障ることをしてしまったのだろうか。

ようやく、マスター・クォエムはこう言った。

「Fheiq kah, puom.」

そして彼はコルにうなずき、振り返って立ち去った。

「ご意見をありがとうございます、マスター・クォエム」とマスター・トゥオルが言うと、コルを来た道へと案内した。

歩きながらコルは何が起こったのかを理解しようとした。日差しの下へ戻ってきて、彼はある結論に達した。

「マスター・クォエムと話して、答えへの手がかりは得られましたか?」マスター・トゥオルは尋ねた。

「はい」コルは答えた。「プログラムはすでに完成していたのです」

マスター・トゥオルはうなずいた。初学者はもう悟りを開いていたのだった。

14
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?