Paul Graham氏のnews.ycombinator.comのArcソースを覗く

Paul Graham氏のインキュベータのニュースサイトのソースが公開された
最近、彼が発表した言語Arcによる実装だ。というか、Arcのディストリビューションにアプリケーションがバンドルされてる。

早速ダウンロードしてみた。tarを展開してみるとファイルは20個。
ArcはPLT Schemeの上にマクロを使用して実装されているらしい。.scmはArc言語の実装っていうことになる。

  • rw-r--r-- 1 tengu tengu 37311 Feb 24 16:38 ac.scm
  • rw-r--r-- 1 tengu tengu 18575 Feb 24 16:38 app.arc
  • rw-r--r-- 1 tengu tengu 39955 Feb 24 16:38 arc.arc
  • rw-r--r-- 1 tengu tengu 242 Feb 24 16:38 as.scm
  • rw-r--r-- 1 tengu tengu 2452 Feb 24 16:38 blog.arc
  • rw-r--r-- 1 tengu tengu 1252 Feb 24 16:38 brackets.scm
  • rw-r--r-- 1 tengu tengu 1649 Feb 24 16:38 code.arc
  • rw-r--r-- 1 tengu tengu 146 Feb 24 16:38 copyright
  • rw-r--r-- 1 tengu tengu 111 Feb 24 16:39 grayarrow.gif
  • rw-r--r-- 1 tengu tengu 111 Feb 24 16:39 graydown.gif
  • rw-r--r-- 1 tengu tengu 10333 Feb 24 17:09 html.arc
  • rw-r--r-- 1 tengu tengu 191 Feb 24 16:39 libs.arc
  • rw-r--r-- 1 tengu tengu 57398 Feb 24 17:39 news.arc
  • rw-r--r-- 1 tengu tengu 2445 Feb 24 16:39 pprint.arc
  • rw-r--r-- 1 tengu tengu 3283 Feb 24 16:39 prompt.arc
  • rw-r--r-- 1 tengu tengu 0 Feb 24 16:39 robots.txt
  • rw-r--r-- 1 tengu tengu 43 Feb 24 16:39 s.gif
  • rw-r--r-- 1 tengu tengu 12905 Feb 24 16:39 srv.arc
  • rw-r--r-- 1 tengu tengu 5221 Feb 24 16:53 strings.arc
  • rw-r--r-- 1 tengu tengu 43 Feb 24 16:40 y18.gif

アプリケーションは二つあるらしい。blog.arcと今回、公開されたnews.arcだ。
blog.arcはなんと100行ちょっと。この短さには訳がある。

実はこのArcが数週間前に公開されたとき、何年も待っていたファンの多くは
がっかりし、かなりのblog sphereではかなりのPGバックラッシがあった。なにしろ、
「100年言語」とか大きなことを言って期待させておいて、蓋を開
けたら、既存のPLT Schemeの上にマクロのスキンを載せただけのようなものだっ
たからだ。みんな、Cでいちから書き上げた言語システムを期待していたのだ
ろう。確かに教育で使わがちなPLTでマクロによりシンタックスをちょい変え
たなんていうのは学生のやりそうなことだ。

さらに、unicodeはさしあたりサポートしない、HTMLはCSSを避けTableで構成
するなど、時代遅れなことをして開き直っている。これらのArcの「欠点」を
めぐってさらにPLブログ界は炎上した。

しかし、そういう批判にもGraham氏には蛙の面にしょんべんという感じで平然としてい
る。むしろ、クリティクあざけ笑うように「批判されるのは良いものができた証拠」
のようなことを書い
ている

で、この数年間何していたの? Arcって何がいいの? という質問に彼は「プ
ログラムを短くした」としか答えない。確かに短い方がいいけど、それが全て
を越えたプログラミング言語の唯一の目的なのか? 彼は成功呆けをしてしまっ
たのか?それとも私達が知らない何かを知っているのだろうか? それを解明
するにはArcを読むしかない。

Arcの力を証明し批判に答えるために「arc challenge
をもうけた。ユーザの入力したテキストを1クリック経て返す簡単なウェブ
アプリケーションを何行で書けるかというものだ。 Arcだと五行:

(defop said req
(aform [w/link (pr "you said: " (arg _ "foo"))
(pr "click here")]
(input "foo")
(submit)))

どうやらコールバックによるロジックの断片化を避けるため、「continuation」を
使っているようだ。(continuationの機能自体は下層のPTL schemeによる)
つまり、ユーザとウェブサーバの一連のやり取りを一つの関数の中でこなしてしまうのだ。
こうすることによって、ロジックの流れどうりに自然なコーディングができる。

確かに面白いコードだが、continuationベースのウェブフレームワークは他にもある。
簡潔だが、このようなおもちゃプログラムでは実感が沸かない。やはり、プロダクションに
使われているアプリケーションでのArcの活躍を見たいと思っていた。今回News.arcの発表で
それが可能になったのだ。

$ wc -l news.arc
1769 news.arc
さすがに、そんなに短くない。

さあ、Arcははたして本物なのか?