Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-03-14

CLで学ぶ「プログラミングGauche」 (2)

| 19:12 | CLで学ぶ「プログラミングGauche」 (2) - わだばLisperになる を含むブックマーク はてなブックマーク - CLで学ぶ「プログラミングGauche」 (2) - わだばLisperになる

Gaucheの特徴

今回は2章「Gaucheの特徴」ですが、Gaucheと比較してCommon Lispはどんな感じなのかしらということを書いてみたいと思います。

Gaucheは

  1. 手軽にプログラムを書いて試せるスクリプト言語
  2. 実用規模のプログラムまでスケールする
  3. 他の言語で書かれたアプリケーションに埋め込める

ことに力を入れている、とあります。

それでCommon Lispはどうかというと、UNIX等のOSの上でスクリプトとして手軽に試せる、というのはちょっと苦手です。

頑張ればできないこともありませんが、そこに力は入ってないようです。

ただ、手軽に試せる、ということや、アイディアをさっとスケッチする、ということはSLIMEのような中の環境から逆にOSを操作すれば良い訳で、スクリプト言語でなければ不可能というわけではないと思います。この辺は、Smalltalkに代表されるイメージの中で生活する処理系で共通しているかと思います。換言すれば、現在一般的にスクリプト言語として手軽、というのは、ホストのUNIXと親和性が高いかどうかということで、ホストを含めてイメージとして抱えている言語では、また違ったアプローチになるかと思います。

次に、スケールするかですが、自分は良く知らないのですが数十〜百万行規模のアプリケーションも実稼働しているようなのでスケールはするんじゃないでしょうか。

そして、他のアプリケーションに埋め込み可能かですが、これも最初の項目に関連し、苦手としていると思います。

  • マルチバイトの処理

これはCLでも可能ですが、Gaucheのように環境が整備されていて、かつ、日本のコミュニティが活溌というわけではないので、何か新しいパッケージを試して文字コード特有の問題に遭遇しても、解決するには自力で色々調べたり、直したりする必要に迫られることが多いかと思います。

  • パッケージ、モジュールシステム

Common Lispには標準でパッケージ機能があるので、コードを書く際にも手軽に書き捨てでパッケージを作成して色々試す、ということも広く行われているかと思います。パッケージを作ると名前の衝突等を簡単に回避できるので、この辺もスケーラビリティーも貢献しています。

また、標準ではありませんが、ASDFというパッケージを導入する仕組があり、最近では、ASDFを使って何でも配布することが多くなって来ているようです。

ASDF-INSTALLという、ネットワークインストールに対応した仕組みもあり、DebianのAptのようにモジュールをネットワークインストール可能で非常に便利です。

  • オブジェクトシステム

Gaucheには、CLOSライクなオブジェクトシステムがありますが、CLOSはCommon Lisp Object Systemの略でもありANSI Common Lispで標準になっています。

「実行時メタオブジェクトプロトコルを完全実装したフル動的オブジェクトシステム!」とか、なんだか凄そうなんですが、親切な解説やチュートリアルは(特に日本)あまりなく、残念ながら人口に膾炙している気がしません。

また、CLOS以外にもオブジェクトシステムはあり、AOP等の実装もあります。

  • Cとの連携

C(や他言語)との連携のためのインターフェースもありますが、実装依存で処理系により異なっています。フリーの処理系では、CFFIがメジャーどころかと思われ、殆どCFFIか、UFFIパッケージを使用しているかと思われます。

これらを利用して、OpenGLや、SQLと連携したりするパッケージも多数公開されています。