起源、と言ったところで、そもそも「コードゴルフ」なんて言葉を初めて聞く人も多いだろう。
僕もそうだった。
メールアドレス暗号化を作ったのは、もう2年近く前。
それから1年近くかけてJavascriptのコードを、1バイトでも小さくする方法を考えた。
今でも時々、もっと短くならないかと見直し、知らないテクニックがないかとググってみる。
で、とあるページでJavascriptの短縮化テクニックをまとめてあり、そこに「ゴルファーな人は知ってそう」と書かれていた。
ここでは「コードゴルフ」の単語は出ていなかったのだが、言おうとしている意味はすぐに分かった。
そんな懐かしい言い回しを覚えている人がいたか…と思ったのだが、これは僕の早とちりで、1バイトでも短縮すべく競う遊びを「コードゴルフ」と呼ぶのだと知った。
Wikipedia の日本語ページはほとんど情報がない。でも、英語ページにはそれなりの解説がある。
それによれば、コードゴルフ、という名称は、1999年に perl 向けに使われたのが最初だそうだ。
しかし、この「1バイトでも縮める」という遊びをゴルフと言うのには、少し違和感を感じる。
僕は本物のゴルフはやったことがないが、ゲーム好きなのでゴルフのルールを取り入れた遊び…パターゴルフだとか、フライングディスクゴルフだとか、レーザーガンゴルフだとか…そういう遊びはやったことがある。
ゴルフルールを取り入れた遊びの共通点は、3つ。
1) 何かを達成するまでの「打数」を競う。少ないほど良い。
2) 1つの「ホール」での標準打数(パー)が決まっていて、複数ホールの合計で競う。
3) 通常、パーは3~5。そのため1点の重みが非常に重い。
コードゴルフには、パーは存在しないし、1点の重みはゴルフほど重くない。
問題や言語にもよるが、4バイトでなにか実用的な処理ができる、なんてことはあり得ないだろう。
さて、最初に「ゴルファー」という単語に対して「懐かしい」と書いた。
コードゴルフという言葉がはじめてつかわれた、とされる1999年より以前…1980年代中盤に、すでにプログラムの短縮競争を「ゴルフ」と呼んでいたのを知っているためだ。
正確な記憶ではないのだが、1984年ごろではないかと思う。
NECのパソコン向け専門誌、Oh!PC の連載(読者投稿コーナー)だったはず。
(僕はOh!Xは買っていたがOh!PCは買っていなかったので、記憶違いがあったら申し訳ない)
#翌日訂正:Oh!PC ではなく、PCマガジンだった模様。
こちらのサイトの掲示板に情報が…って、これ15年前の自分の書き込みだよ (^^;
#2014.10.28 追記
10年前の2chで話題に上ってた。
これ、当時の紙面に載っていたルールの抜粋だ。
毎月お題が出て、BASIC で「出来るだけ短く」書く競争をするコーナーだった。
「Proゴルフ」という連載名だったと記憶している。
Pro は、Program の意味だ。もちろん、職業ゴルフの意味の「プロゴルフ」と掛けているわけだが。
ここで「短さ」の定義は、行数。1行にどれだけ詰め込んでもよいが、今の言語と違って行には重い意味があったため、詰め込みに限度があった。
(分岐を使うには「行番号に」飛ぶしかないため、処理上どうしても改行が必要な場合がある)
そもそも、詰め込もうにも1行の文字数は仕様上の制限があって、PC-8801の場合で255文字、PC-6001だと71文字が限度だった。
機種によってハンデがあるため、パーは機種ごとに設定されていた。
しかし、基本的にはパーは3~5程度。本当のゴルフと同じような感じだった。
出題内容はよく覚えていないが、「任意のメモリアドレスから入っているデータを文字列として画面いっぱいに表示し、キー操作によって自由に上下スクロールさせながら閲覧させる」という出題があったことは覚えている。
他の月の出題といくつか合わせると、エディタの基本が出来上がる、という説明がついていた。
最終目標がエディタだからこそ、1つ1つの機能は出来るだけ小さく作り、エディット可能なメモリを大きくとりたい、という出題意図だった。
パー4くらいのところを、2行まで縮めてきたのが数名、1人だけ1行で書いてきて出題者が驚いた、とかではなかったかと思う。(別の月の話だったかもしれないが、時々超絶技巧による「ホールインワン」が出た)
投稿者は常連が多く、1年間の合計行数で競っていたように思う。
ちゃんと、ホールを回っているのだ。ここでもちゃんと、ゴルフらしさを出している。
Wikipedia の英語版にあるように、短縮競争を「ゴルフ」と呼ぶのは1999年にNetNews のperlのコミュニティに登場し、なんの違和感もなく(その考えは面白い、というような賞賛もなく)周囲も受け入れている。
先に書いた Proゴルフは、BASICの「行」が非常に重い意味を持っていたから成立する遊びだった。
Apple // の頃も、「2行」で何ができるか、を競う遊びが流行っている。
だとすると、アメリカでも BASIC の行数削減を「ゴルフ」に例える遊びはあったのではないだろうか?
Oh!PC のアイディア自体、オリジナルではなかったのかもしれない。
BASIC での行数短縮を「ゴルフ」と例えるのであればわかるのだが、perl のバイト数短縮を「ゴルフ」と呼ぶのは、どうも不自然に思えてならない。
まだ想像の域を出ておらず、裏付けも難しそうだが、コード短縮を「ゴルフ」と呼ぶのは、BASIC 時代に端を発しているのではないか、と考えている。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |