何でもGauche
Gaucheという処理系は使えます。 僕のプライベートなプログラミングは全てGaucheになってきました。まさに、なんでもGaucheです。 何がそんなに良いのか。 今日はその辺りを書いてみたいと思います。 それでは、箇条書きで。
- Lisp系言語なので生産性が高い いままで、Emacs LispやGaucheなどのLisp系言語をやってきて思うのは、他の手続き型言語に比べて生産性が高いということです。 関数型言語一般に言える事だと思いますが、手続的なプログラミングではなく宣言的にプログラミングすることで一行で表現できる意味濃度が高くなります。 関数型言語でプログラミングしたことのない人には想像しにくいと思いますので、About Haskellの関数型言語とは?の部分を引用しておきます。非常に分かりやすい説明がされています。(Scheme言語の説明ではないですが同じ関数型言語であるScheme言語の説明としてもそのまま通ります。) About Haskell 関数型言語とは?
C, Java, Pascal, Adaといった言語は命令型(imperative)言語です。これらは 逐次実行されるコマンドの列により構成されているという意味で’命令型’と呼 んでいます。 Haskellは関数型言語です。関数型プログラムはただ一つの式からなり、それが 評価されることによりプログラムは実行されます。 表計算ソフトを使ったことがある人は関数型プログラミングを経験済みだと言 えるでしょう。表計算ソフトでは各セルの値を、他のセルの値を基に決定しま す。ここで注目されるのは何を計算するのかであり、どう計算されるかではあ りません。例えば
-
セルが計算される順序は指定されません。- その代わりに表計算ソフトがそ れぞれのセルの依存性に応じてセルの計算をしてくれるであろうという考え が根底にあります。
- 表計算ソフトがメモリをどのように配置するかを指定することはありません。
- むしろ、表計算ソフトが表面的には無限のセルの列があるように見せてく れて、実際に使用される時に初めてメモリを配置してくれることを期待しま す。
- ほとんどの場合、各セルの値は、その値を計算するためのコマンドの列では なく、ただ一つの式により指定されます。 (式の中の部分式の評価順は問わ れません)。
この表計算ソフトにおける計算の順序が指定されないということから、代入と いう概念はそれほど役にたたないという面白いことが言えます。 とりわけ、もし代入がいつ起こるか正確にわからないのであれば、それを有効 利用することはできません! このことは、基本的に代入文を慎重に並べていくことにより計算を構成してい く C言語や、メソッドの呼び出し順が重要となるJavaといったような慣習的な 言語とはかなり対称的です。 このレベルの低い’どう’ ではなくレベルの高い’何’ に焦点を当てているのが、 関数型言語が他と最も異なる特徴と言えます。 他のよくしられた関数型言語に近い言語として、標準的なデータベースクエリー 言語である SQLがあります。 SQLのクエリーは投射、選択、結合などを含めた式になります。クエリーには どの関係が計算されるかが記述され、どのように計算するかは記述されません。 もちろんクエリーはどのような順序で評価されても構いません。 SQLの実装の多くは、(考え得る中で)最も最適な式の評価順序を見つけること でクエリーの最適化を行ないます。
-
ライブラリが充実している 充実している上にバランスが良いのが特徴です。 作者のShiroさんのバランス感覚は外の言語処理系の作者をしのぐ素晴らしさです。
-
日本語がネイティブサポートされている(UTF-8) UTF-8を自然に扱え日本語の正規表現なども問題なくいけます。ソースコードもUTF-8で書けるのでUTF-8 onlyの世界が実現します。 というような理由でオススメです。 Lisp系言語では実用的なアプリが作れないというイメージをお持ちの方は一度試してみてはいかがでしょうか。 僕は今のところ、利用するばっかりでGaucheのライブラリ開発などにはうまくフィードバックできていないのですが、 もっとスキルを高めてフィードバックしていきたいと思っています。
コメント by Mario:
What a joy to find soemnoe else who thinks this way.