Revolution in Rebol

k.inabaさんの月替わり企画風に、Rebolやります。*1
実際はいつものように素人の挑戦記録となりHaskellやDの時同様後から<del>タグ入れまくると思いますので、間違いなどありましたら指摘いただければ嬉しいです。
さて、Rebolとはどんな言語かといいますと…本家紹介文の4番目のこれが全ての気が。

REBOL was designed by Carl Sassenrath, the operating system architect responsible for the Amiga OS, the world's first multitasking operating system for personal computers.

紹介文の1番目と2番目が名前の由来で、3番目がスローガンといいますか実態不明ですので、意味のある情報としては先頭に来ているわけです。作者がどうとかは添えて書かれはしてもそれ自体言語の特徴にはならないような…と思いつつAmigaを調べてみました。
適当に検索したら飛び込んできましたこのURL。ライターの自虐さがすげー。
http://pcweb.mycom.co.jp/special/2000/amiga/
私は、Rebolの構文をぱっと見、関数型か?あるいはデータ指向か?と勘違いしてしまったのですが、Rebolはそんなものではありませんでした。Rebol自体は、データとコードを区別しないLispタイプの言語です。Lispよりはだいぶ読みやすくて、":"で値に名前を付けていくようなところはぱっと見YAML*2にも似ています。
しかし…私が受けた印象は、こう、読みやすいLispとか、そんなのじゃなくてですね…。なんといいますか、Amigaの記事でライターが書いておりますように、とてもいい加減でアナログとでもいいましょうか…。
awkはテキストを行単位で処理することが前提でしたが、太古のスクリプトを除けば、Perlは無論、HTMLへの埋め込みに特化しているはずのPHPですら構文は汎用らしく作られてますよね。目的がawkと重なるIconも普通の手続き型言語ですし。Rebolでは、そういった時代の趨勢を嘲笑うかのごとく、URLやIPアドレス、ファイル名、通貨、果ては640x480みたいな画面サイズまでがリテラル表記可能なデータ型なのは…私の見間違いですか?そうですね、神さまはきっといますよ。主流で使われているプロトコルが変わったらとかPC関係ないところでいきなり変動しそうな通貨が…とか勝手な心配を吹き飛ばす、まさにカルチャーショック。
また、構文も厳密というには程遠く…どれが関数でどれが引数でどれが実行されてどれがデータで…なんて区別が見た目理解不能でした。もしかしたら、わからなくても何も問題ないのかもしれません。

*1:…構いませんよね、ね。

*2:Rebol用のYAMLバインディングが無いかと探しましたがありませんでした

実行環境

Rebolの実行環境には、最小限のRebol/Coreと派手派手なRebol/Viewがありますが、…Rebol/Viewはちょっとだけ入れてみましたところ正直言ってケバイのでRebol/Coreを選択します。
Windowsで動くRebol/Coreの最新版はrebol031.exeですが、これがwinhugsのようにウィンドウを開くのですよ。いやまあそれはそれで便利ですのでいいのですが、Hugsで言うところのrunhugsに相当する、ごくごく普通にコマンドプロンプト上で実行する手段が見当たらないのですね。
-cやら-wやらを付けるとウィンドウを開かずに実行してはくれますが、そこはWindowsアプリケーション、標準入出力がコマンドプロンプトと結び付けられていないため、結果が見えないという有り様です。マニュアルにはリダイレクトしろと書いてます。実際に... | moreのようにフィルタを通しますと結果が画面に出てきます。
rebol031.exeをtdumpしてみましてもAllocConsoleやAttachConsoleは使われていない様子。ではどうすればいいかと言いますと…リダイレクトが利いているのですからパイプで、というのも考えたのですが、それよりもPEヘッダのSUBSYSTEMを書き換えてしまいましょう。
rebol031.exeの0DChバイト目の02を03へ上書きするだけです。
これでWindowsのローダーがコンソールアプリケーションと認識してくれますので、常にコンソールに結び付けられます。
ウィンドウで使いたいときもあるでしょうから、オリジナルも置いておきますか…。というわけで私はコンソールアプリケーション化したほうを、呼びやすいようにバージョン番号を切り捨ててrebol.exeとリネームしました。実のところrebol.rやsetup.rが無くても単体動作するようですのでパスの通ったところに放り込んで終わりです。
遥か昔Kylixで遊んだときの記憶ではX上ではGUIアプリであってもターミナルと結びついていましたので、恐らくWindows以外ではこの問題は無いと思われます。