Seminar:CommonLisp:2005
「2日間みっちり!Lispチュートリアル&Lispセミナー&Lisp事例紹介」
一日目
Lispチュートリアル & Lispセミナー (一日目午前)
- フランツ社社長 ご挨拶
- セマンティック Web
- 概念や周りの規格などとかから丁寧に説明
- Racer って結局何をやるものなのか分からなかった
- Lispゲームプログラミング
- Common Lisp オブジェクト指向(CLOS)入門
- xyzzy にも CLOS を実装したい
- たしか The Art of Metaproject Protocol で作っている Closette のソースが手に入るはず。あとで WiLiKi のセミナーの感想のところに載せておく
昼飯
- 巨大化する言語仕様について
- C++0x と Ada 2005 の要望リストが凄いことになっている
- C++ の標準ライブラリ総書き換え
- ただ、 typeof や auto などの以前の標準が制定された当時知見が足りなかったために実現出来なかった template のエラーメッセージが分かりにくいという問題を解決するものは導入されてしかるべきだと思うし、STL のなんでもインターフェースを std のネームスペースに突っ込んでしまっている結果問題が生じる部分のように明らかにデザインミスなので直さないといけないようなものもある。
- 継続
- On Lisp に継続を実装する話があるよ
- 継続のメリット
- 継続の実装は処理系の動作にオーバーヘッドを与えないか?
- Gauche ではそこで色々とオーバーヘッドが出ないようにするために関数を Scheme による実装ではなく C で書いている部分があって、そこで色々と継続をうまく使えない問題がでたという話がある。
Lispチュートリアル & Lispセミナー (一日目午後)
- On Lisp出版祝い - 弱冠20歳の邦訳者が語る
- MySQLへの直結インターフェース
- 生の SQL 文を送ってる……
- MySQL でエスケープされた文字列をとってくるのに、mysql-escape-sequence などが必要になる
- SQL をそのままではなく S 式で書くようにすれば、そういう手間は防げるんじゃないか?
- XML Parser (XML文書を Lisp フォーマットに変換)
- それぞれの API のある理由は?
- パフォーマンス的には PXML-SAX が一番良いのでデフォルトで使うよう勧めているが、PXML でしかできないものもあるので、必要になることがある。
- DOM と SAX を用意しているのは、標準に拘る顧客に合わせるため
- JavaとCommon Lisp間での連結ソケット (jLinker)
- JLinker の力を示すつもりが、結局全部 Lisp にしてしまった
- Allegro Prolog
- Allegro Common Lisp v7.0/v8.0クイック・オーバービュー
懇親会
- Scheme 処理系 Kawa のインタプリタから Project Looking Glass を動かすという記事
- 鋭い質問を投げかけた人に対して、「Lisp で仕事をしない?」とお誘い攻勢が!
- 誰か xyzzy で ILC に発表してみない?
- その前にメニュー等の英語化が必要
- そのために本体のコードを書き換えたりする必要があるけど、ライセンスが不明瞭だし……
- だれかパッチを Mailing-list に流したり、TODO リストにありながら作者が手をつけれていない部分を改良したりしてお膳立てを整えてから、柔和に交渉してみればどうにかならないかな?
- 2005/12/07リリースの0.2.2.235でMITライセンスになりましたね。
- Emacs では OCaml とか? Haskell でのコメントのネストを扱えるんだけど、xyzzy でどうやって扱うの?
- それは本体の構文解釈の部分を書き換える必要があると思う
二日目
Lispセミナー
- どう転んでもLisp?
- 当時の再帰が遅いという評判に対し、再帰の方がうまくかけるアルゴリズムとしてたらいまわし(竹内)関数 (Scheme:たらいまわしべんち) を考案
- McCarthy の記憶違いで、最初 if x <= y = z の tak 関数として伝わった
- ICPC の問題として、つい Lisp なら簡単に書けるであろう問題を考えてしまう
- コンテストでは C や C++ などの GC のない言語を使うので、あとで GC がなくても書けるように改定する
昼食
Lispセミナー&Lisp事例紹介
- Lispで書いたアプリケーション事例 - 国内編と海外編
- Lisp で作った Car Crash のシミュレーションのうち、表示には JAVA Applet を使っていたが、環境ごとにまちまちだったり原因不明のエラーで落ちたりするようなエラーが度々起きたので FFI を使った Direct X の呼び出しをすることにして Lisp で置き換えた
- Ontology は信じない。<-> Semantic Web の発表者は Ontology を信じる
- マルチエージェントを用いた柔軟なインターネット運用アーキテクチャ
- 生物学的ナレッジベース BioBike
- オープンソースプロジェクト
- 自社で改良しているもののうち専用の部分を分けて、その部分を商業化する予定……だっけ?
- もともとのプロジェクト名であった BioLingua は商標がとられてしまったので、名前を変更
- Artificial Intelligent Database
- Allegro Cache + Allegro Prolog なお話
- Prolog による問い合わせと Database へのアクセスがシームレスに繋がっている
- Allegro Cache を作った理由は?
- Allegro Store は million までのオブジェクトを使うことを想定していたが、今ではそれよりもっと多く扱わなければいけない
- この限界に陥ったとき書き換える必要に迫られたが、Allegro Store は C++ で書かれていて簡単には書き換えられなかったので Lisp で書き直すことにした
- Allegro Cache なら billion のオブジェクトを扱える
- Lisp によるリターゲッタブルコードジェネレータの実装
- ファミコンのメタルスレーダー・グローリーを記述するために使われていた AGL (Adventure Game Language) を KCL でコンパイラ及びインタプリタを再実装する
- これにより、KCL を使ってインタプリタ上でデバッグしてから ROM に焼き付けることができるようになった
- スーファミのマザー2やシムシティーなどもこれで実装
- この間に KCL にリターゲッタブルな性質 (C のコードを出力するので他の環境に移植しやすい) を加えてもらって、RISC な Virtual Boy への移植が簡単に出来た
- COINS プロジェクトにおいて、Lisp 的な S 式の構文を使った中間言語、LIR を作る
- 最初は Scheme で実装していたが、政治的な理由から JAVA になってしまった
- COINS を少しさわったときに、このあたりは Lisp っぽいなと思ったことがありました。世間的にはやっぱり Java なんですねえ
懇親会
- 型理論の人たちの大部分は、XML をにどう型をつけるかという研究の方に行ってしまっている
- もちろん、ML とか Haskell とかの深い話になると色々と研究の余地があるんだけど……
- Haskell 方面で Monad 以外の方法として、Arrow (これは Clean 方面の人も使っている) とか Comonad とか Codata とか出てるけど、実用例がそんなにはないため Monad ほどに認知されるかどうかは未知数。
- Monad が広く認知されたのは、IO 以外に State とかにも使えるという実例を示した論文を書いた人のおかげ
- Haskell に Monad が導入されるまで、Monad は Category 方面ではあんまり注目されない存在だった
- 伊地知先生による型付きλ計算の解説
- 大堀先生の説明は難しい
- 萩原先生や湯浅先生などはアナロジーとかメタファー(比喩)とかを使って不正確でもいいからとにかく概念を理解させようとするけど、大堀先生はそういうことを避けて正確な説明に拘るのでどうしても説明が難しくなる
- 大堀先生は理論だけでなく実際に自分で実装するプログラマ
- SML/NJ を実装
- Hole のある型を持たせることによって、SQL を ML の型システムでうまく使えるようにするという仕組みを実際に実装
- Simon Peython-Johns も GHC の細かいデバッグに煩わされなければ、そうできるだろうに……
- Java とか C とかはある程度まで理解を先延ばしする呪文が多くて、子供に学ばせるのには向かない
- 再帰の概念は、フラクタル図形を使うとわりとすんなりと理解してもらえる
- 再帰とループはどっちが難しいか?
- 再帰を理解してもらうというのを、初心者へのプログラミングコースの目的としている
- 最初に学ぶ言語の重要さ
- プログラミング言語編
- 最初にフレームとかそういうことを考えてしまうアセンブラを学ばない方がいいんじゃないか?
- いや、アセンブラの哲学でも役立つ部分はある。例えば継続なんか、そういうことを知っていた方が分かりやすい
- 自然言語編
- 実社会で使えるスキルを身につけさせるために、 子供に一般の国語ではなく文語を学ばせることによって法律文を読めるように教育する親もいる
- フランスの政治家を目指すコースでは、数学を必須とすることで論理的な考え方を学ばせようとしている