Gaucheプログラミング(立読み版)

Schemeのすごい点 Slideshow

Schemeについて、簡単だとか覚えるものが少ないとか説明されることが多いかも知れません。

読者のみなさんは、本当にそれで実用的なプログラムが書けるのだろうかと疑問に思うでしょう。

そして、近くにたまたまいあわせたSchemerに質問を浴びせたくなるはずです。

オブジェクトシステムとかはどうなってんの? デリゲートとかはあるの? そもそもifしか制御構造がなさそうだけどイテレーションのための構文はどのくらい用意されてるの? マルチスレッドは使えるの? ジェネレータとかはある? 内包表記とか書けないの? などなど、自分の使い慣れた言語に存在し、こりゃ便利だと思っていた機能を挙げて比較しようとするでしょう。

そしておそらくSchemerの回答はほとんど全て「そんなのは無い」ということになります。 しかし、Schemerが「そのなのは無い」と答える時、 その本当に意味するところは、あなたが予想しているものとはまるで違っていることでしょう。

Schemeは、素のSchemeがある機能Xを提供していなくても、 Schemeプログラマが困らないように設計されており、 「ある機能Xがあるかないか」という議論を無意味にしてしまうのです。

事実、上にあげた機能はいずれもSchemeの標準仕様には含まれていませんし、 おそらく今後も入ることはないでしょうが、 SchemerはScheme自身を使って上記の機能を実現しています。

もう一つ、Schemeではプログラムとデータが同じ形式であると言われます。 しかしここで注目すべきは、 Schemeのプログラム(およびデータ)の形式は そのままScheme処理系の抽象構文木でもあるということです。

多くの言語では、抽象構文木を弄ぶことができるのは、 その言語の実装者だけではないでしょうか。 あるX言語のユーザ、つまりXプログラマは残念ながら、 X言語の抽象構文木に触ることは出来ないのです。

それがどうした?と思われるかもしれませんが、 Schemeプログラマはこの点においてScheme処理系の実装者と 等しい力を有している点が重要です。

Schemeプログラマがプログラムを最適化すれば、 それはそのまま、そのSchemeプログラムの効率を最適化するでしょう。 さらに高度な機能としてマクロを使えば、 評価される前にその抽象構文木を変換することができます。 その変換規則の記述にはSchemeの全能力を注ぐことができますし、 その変換がもし高度な最適化のためのロジックであれば、 SchemeプログラマはSchemeプログラムをコンパイルする感覚を味わうでしょう。

この様に、Schemeプログラマは抽象構文木を扱うという点において、 Scheme実装者と同等の力を手にしているおかげで、より創造的になりえます。 もしあなたに素晴らしいアイディアがあるなら、 今はまだどの言語にも実装されていない機能をScheme上で創出することができるはずです。 そして、その機能はそのまま目の前のScheme処理系の新たな機能として、 元からあるSchemeの全機能と合わせて使うことができます。 それは、時には他の多くの言語ではバージョンアップと言われるような変更かもしれません。 そして、その機能はScheme言語の実装者が実装した場合と あまり変わらない効率で動作することが期待できます。 なぜなら、おそらくScheme処理系の実装者によって実装されるものは、 あなたが書いた抽象構文木と同じものになると考えられるからです。

またこの構文木はプログラムテキスト上はS式という形を取りますが、 どの部分を取り出してもS式であるというのも特長です。 木も枝も全てが同じS式であるということで、 Schemeにおけるリファクタリングは極めて自由です。 基本的に、どの枝でも切り落とせて、どの枝のどの位置にでも 継ぎ木をすることが可能です。

これは文だから、式が来るべき位置には記述できないとか、 ここには複数の文を書けないなどといった無駄な制約がほとんどありません。 Schemeは自由で、制約があれば感じるであろうストレスから解放してくれます。

Schemeという言語は、決して多くの荷物や重い装備を背負わせるのではなく、 無駄なものを徹底的に削ぎ落とし、プログラマに自由を与えてくれます。

結果としてリファクタリングという作業が 予想しているより楽しくなるでしょう。 なぜなら、S式という木の組み換えにはほとんど限界がなく、 木として似ていれば簡単に共通の構造を抽出できてしまうからです。 時には、そうやって抽出された構造は、あなたが書いたにもかかわらず、 それを書くまで、あなたの頭のどこにも無かったアイディアかもしれません。 頭の中で考えたことを、そのまま実現するのも楽しいものですが、 Schemeという言語との対話を通して、あなた自身が考えたこともなかったような アイディアが目の前に出現するという体験は、 プログラミングがもっとずっとワクワクするものだということを 教えてくれるでしょう。

 

Comment Form:

コメント・トラックバック規約を必ずお読みください。

 

Comments:

2007/04/07 16:38:12 えんどう
ご指摘ありがとうございます。修正しました>maruさん
2007/04/07 04:16:16 maru
気持ち悪い:「議論を無力にしてしまうのです。」
まあふつう:「議論を無意味にしてしまうのです。」
議論を形容するのは力の強弱ではなく有意義であるか無意味であるかではないかと。
2006/10/23 15:05:37 ito
しかし私が本当に注意を向けたいのは、→ しかしここで注目すべきは、

でどうでしょうか?
2006/10/23 12:00:53 shiro
単著ではないのに「私」が出てくるのが唐突な感じがします (8パラグラフ目).

Trackback URL: http://karetta.jp/trackback/book/006082/006084

Trackbacks:


このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation