言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

渡米一ヵ月後

大島さんは今頃シアトルで活躍しておられる模様ですが、それとは関係なく近所の本屋にある Seattle's Best でコーヒーを飲む。本屋とコーヒー屋が近くにあるアパートで本当に良かった。地下鉄が無い以外は大体上新庄に劣らない生活が出来そうだ。

先週末で渡米一ヶ月たった。今のところ何の変哲も無い平和な暮らしをしている。当初はまめに日本人スーパーにも行っていたが、高いし面倒だしその辺の適当なスーパーで食物を調達している。食べるものは大体毎晩同じで、ご飯とベーコン入り野菜炒め、デザートに梨。初めてアメリカに来たときは、まずいものばかりでこれでは生きていけない!と危機感を抱いたものだが、アメリカのおいしい物も大体分かってきた。特にベーコンと梨は日本の物より絶対においしいと思うので、極めたいと思っている。

あと、チーズも沢山種類があって征服欲が沸くが、夜食としてクラッカーに載せて食べる以外食べ方が思い浮かばないのでなかなか減らないで困っている。全体的に物価は高い。相場が分かってくると賢い買い物が出来るのかも知れない。朝昼会社で食ってる割にはかなり食費に費やしていて、それを今後の課題にしたい。

アパートにはほとんど物を置かず勿体無いレイアウトで暮らしているが、最近布団を寝室に移した。友人が遊びに来るまでにベッドを購入したいと思っているのだが、選び方が分からなくて躊躇している。あと生活に必要な物は免許だけだ。テストは夢にまで出るほど苦手なので、テストの事を考えると恐怖で一杯だ。あと、何かあるかな。休日は結局ハックしている。平日も休日もハックなんて体に悪そうだが、若者に付き合って体を動かしすぎると一週間しんどくて堪らない事が分かったのでこれで良いのだ。焼き飯定食(米のご飯とおかずが焼き飯)のような物で、好きな物が一番良いのだ。

世界は言葉で繋がっている。

小説を読んでいて、ああ、さっきの登場人物の何気ない所作が、ここに関係があったのか!と見事に思う事がある。伏線というやつである。死亡フラグとか言われるやつも、広い意味で伏線と言える。なぜ伏線って何故か面白いのだろう。現実世界でも伏線という物がある。ここから今さっき感じたハックに関する伏線を書く。

1+1ができない子と線形論理 という記事を以前読んで、難しいけど何となく印象に残る話だなと思っていた。

一方別の日に、以前大島さんやアレックスと GC に関する議論をしていた。GC はプログラミングに必須だというのが我々の常識なのだが、近頃はずっと C でばかりプログラミングしていて、メモリ管理もパズルと考えたら結構楽しいやんと思っていたので、もしかして GC 無しでも勝手にメモリ管理をする言語が作れるのでは無いかと提案していた。

これらの何気ない日常の一コマには関係があった。

Joy 言語の動作を理解する為にわざわざ自分でインタプリタを作り始めたわけだけど、どうもイマイチな仕様がある事が分かった。それは主に条件文などで使われる使用でこういう物だ。

  • [1 2 <] ["yes"] ["no"] ifte.

ifte 文は最初の を実行し、真なら二つ目の を、偽なら二つ目の [] を実行する。この場合 1 < 2 は真なので "yes" が一つスタックに積まれる。ではこの場合どうなるだろう。

  • 1 [2 <] ["yes"] ["no"] ifte.

条件を構成する 1 が [] の外側にある。この場合でも答えは "yes" だが、スタックの状態を詳しくみると微妙に違って、1 がそのまま残り、1 "yes" となる。

関数 < はスタックから二つの値を取り出し結果を積むという仕様のはずなので、1 が残っているのは妙だ。ifte は条件に関しては副作用を残さないで複製されたスタック上で判定を行う。この仕様の動機は良く分かる。条件文が副作用を起こすが為に分かりにくいバグが紛れ込む事は容易に想像出来る。一方で、折角な単純な世界を壊す醜い仕様なのでは無いかとググると、やはりそのような議論はすでになされていた。 http://osdir.com/ml/lang.concatenative/2005-10/msg00008.html

ここで、Linear という単語が登場する。一本のスタックしか使わないという禁欲的な態度を守る純粋な Joy を Linear Joy と呼ぼうという話だ。ここから私の理解の及ぶ外の話になるが、どうやら世の中には Linear Logic という学問があって、ちょうどそこでの議論が一本のスタックの話に対応しているとの事だ。 http://home.pipeline.com/~hbaker1/ForthStack.html

ここで伏線が明らかになる。Liner Logic 、訳して線形論理、は 1 + 1 が出来ない子供が GC を使わずにメモリ管理を行うスタック言語を作成する話そのまんまである事が分かった。これらはここ数ヶ月全くランダムに身の回りで起こった事なので、繋がりについて全く気にしていなかった。が、あとで考えると必然だと思ってしまう。必然とはこのように適当に起こる物である。