Gauche Night ― 2007年06月29日 06時04分48秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
Gauche Nightのこと。ちょー遅くなったけど、もう、これくらいでケリをつ
けてアップします。キリがないんだもん。^^;
http://iiyu.asablo.jp/blog/2007/04/06/1374459
Shiroさんが作ったScheme、Gaucheに関するお知らせ
http://iiyu.asablo.jp/blog/2007/05/06/1488584
Lispにやさしい新宿ジュンク堂書店\(^O^)/
で、紹介したGauche Night。盛り上がったみたいですね。
http://itpro.nikkeibp.co.jp/article/NEWS/20070510/270600/
【GaucheNight】日本人が作ったScheme処理系Gaucheのお祭りが開催,Lisper
の熱気で夜中まで盛り上がる
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?GaucheNight
http://www.kahua.org/cgi-bin/khead.cgi/kahua-s5/view/11
イベントで、悪役?を演じて人気だったらしい黒田さんからもメールが来て、
川合shiroさんとマクロについてやりとりしていますね。
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/scheme
About Scheme
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3A%E3%83
%9E%E3%82%AF%E3%83%AD%3ACommonLisp%E3%81%A8%E3%81%AE%E6%AF%94%E8%BC%83
Scheme:マクロ:CommonLispとの比較
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/gauche-night
GaucheNight (About Scheme cont.)
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3a%e3%83
%9e%e3%82%af%e3%83%ad%3aCommonLisp%e3%81%a8%e3%81%ae%e6%af%94%e8%bc%83
%3a%e6%84%8f%e5%91%b3%e8%ab%96
Scheme:マクロ:CommonLispとの比較:意味論
おれ、バカだから、黒田さんのいってること、最初、無理筋で何をいってる
んだと思ってたの。
だって、所詮SchemeだってS式なんだから、マクロが書けないわけがない。
問題は変数名の衝突でしょ。Common Lisp(以下、CL)と違って、変数と関数の
名前空間が分離してないから、衝突しやすい。
CLのgensymのように一意性をシステムが保証するものを作ればいいだけ。CL
は現場の実践的な知恵、長い間に培われたものをまとめ上げたものなので、
gensymは実践的には「あり」なんだけど、Schemeとしては、そういう汚いもの
は入れたくない。せっかく、ここまできれいにしようきれいにしょうとがんば
ってきたんだから、初志貫徹。だから、Schemeでマクロが書けないんじゃなく
て、CLとは違ったきれいな形のマクロをどう入れるかもめていて、マクロがな
かなか入らなかったと、おれは理解しているわけ。
だから、黒田さんがいってる、Schemeの仕様がBNFで書いてあって文字列に
対して仕様が決まっているけど、CLの仕様はreadのアルゴリズムが書いてあっ
て、以後はLispオブジェクトに対して仕様が決まっているなんて、Schemeだっ
て、readしてLispオブジェクトにするに決まっているんだから、そんなもん、
大した違いじゃないだろ。黒田さん、筋が悪いよ。言いがかりだろうと。
大体さ、CLでreadのアルゴリズムを書かないといけないのは、readtableや
リーダーマクロといった、普通の言語ではあり得ないものを持ち込んでいるか
らでしょ。
黒田さん、どうしてそんなにScheme、嫌うかなぁ。近親相姦か、もとい、近
親憎悪か。
こういう理解だったんです。
でも、違うのね。Schemeのマクロ仕様は、Lispオブジェクトの木じゃなくて、
プログラムの字面に対しての変形を許している。だから、Lispの本物のマクロ
じゃないと。
XMLでいうと、XMLをパーサが読み込んで、でき上がったDOM木に対して、木
の変形として処理するのが、XSLT。一方、XMLとしてパージングせず、字面だ
けのテキストとして処理するのは、sed, AWK, PerlやRubyなどで正規表現を使
ってパターンマッチして変形するみたいなもの。Perlのソースフィルタはまさ
にそんな感じですよね。
CLのマクロは前者だけど、Schemeのマクロは後者も許している。
それじゃ、Lispの本物のマクロじゃないだろう。こういうことなのね。
readtableとリーダーマクロを知らない人のために補足しておくと、おれも
知らないんだけどさ(爆)。
コンパイラやインタープリタといった言語処理系における字句解析部(トー
クナイザやスキャナといわれるもの)をプログラマが操作できるものです。こ
んな言語仕様、フツー、あり得えんでしょう、\(^O^)/
おれ、これを、どう理解しているかというと、レストランや料理屋で、まか
ない飯ってありますよね。客には出さず、厨房でコックや板前が自分たちのた
めに、ありあわせの材料で作って食うもの。でも、うまいという。
おれは、readtableやリーダーマクロは、まかない飯を客(プログラマ)が勝
手にキッチン・厨房に入って作っていいというものなんだと理解しています。\(^O^)/
関連して、readとevalの分離の話が出てましたよね。Lispはreadとevalが分
離しているけど、他の言語はそうじゃないと。
でも、仕様の書き方はどうあれ、おれの感覚では逆で、CLは、readとevalが
いっしょくたになってるんです。なんといっても、リーダーマクロや
readtableで入力から文字を読み込むときに、好きに入力を評価したり、変形
できるんだもん。
もっというと、コンパイラマクロというのもあります。これ、コンパイル時
に有効なマクロで(つまり、インタープリタのときは無効)、コンパイラがS式
をコンパイルするとき、プログラマがS式を変形してもっと効率的、強烈な最
適化ができるように介入手段を与えるものです。
なんか、まかない飯じゃなくて、出入国の検査で、勝手に整形・変装してい
い場所があって、テロリストが善良な市民に化けて入国したり、その逆をやっ
ていい。しかも、身長、体重、肌の色はおろか、性まで勝手に変えていいと。\(^O^)/
フツー、言語にそんなことができるように要求するか。
するんです、Lisp屋は。\(^O^)/
あーん、こわいよー。\(^O^)/
リーダーマクロやコンパイラマクロで、あれこれ、探したら、こんなん出ま
した。\(^O^)/
http://lispuser.net/memo/lisp/2006-03-30-23-58.html
最高にキモい Lisp コードを書いてみよう with 100 行リーダーマクロ
http://lispuser.net/memo/misc/2007-04-01-14-57.html
自力で最適化コンパイル -- コンパイラマクロ
lispuser.netはすごいですね。勉強になるなあ。前者は、笑いました。CL-
Yaccのちゃんとした解説になっていますが、LispとAlgol(Pascal)の合体みた
いな構文で、和洋折衷的な言語仕様になっていて、楽しいですね。
おれ、CL-Yaccって知らなかったんですが、パーサ関係でScheme側に脱線す
ると、
http://www.informatik.uni-freiburg.de/proglang/software/essence/
Essence
というのがありますね。おれが、へぇと思ったのは、JSONをやってたとき、つ
まり、
http://iiyu.asablo.jp/blog/2006/11/07/690487
JSON in Javaのバグ修正
のころ、
http://www.json.org/
で、Lispの実装もみてみたわけ。そしたら、Schemeは面白いパーサ使ってるん
です。詳しくは、
http://www.call-with-current-continuation.org/eggs/packrat.html
http://www.lshift.net/blog/2005/08/11/extensible-parsing-systems
http://pdos.csail.mit.edu/~baford/packrat/
The Packrat Parsing and Parsing Expression Grammars Page
をどうぞ。
それにしても、call-with-current-continuation.orgは、いままでみた中で
最長のドメイン名じゃないか。Schemeの継続呼び出し(call-with-current-
continuation, フツーcall/ccと略します)そのままだもんね。\(^O^)/
コンパイラといえば、以前、弾さんに「Perlはコンパイラがないもんね」な
んていったら、「バイトコードにコンパイルして実行してますよ」なんていう
から、びっくり。
おれらの語感だと、コンパイラといえば、フツー、機械語にコンパイルする
ネイティブコンパイラ。バイトコードにコンパイルして仮想マシンで実行する
のは、コンパイラ・インタプリタであって、コンパイラじゃないんですよね。
じゃ、Javaはどうなの? バイトコードの仮想マシンで実行するのに、コン
パイラがついてるじゃないかと。あれはインチキ、トリックですね。\(^O^)/
バイトコードコンパイラと仮想マシンを明確に分けてあるから、バイトコー
ドにする部分はコンパイラといわざるを得ない。\(^O^)/
Schemeはネイティブコンパイラがないという話を黒田さん書いてたけど、
Lisp(CL)にはインタープリタしかなく、ネイティブコンパイラがないという、
かつての誤解と似てますね。
もちろん、CLはほぼ必ずコンパイラとインタープリタが備わった処理系にな
ってますし、CLには、コンパイラしかない処理系もあります。コンパイルが速
いのでインタープリタの必要なしということです。たとえば、
http://www.cormanlisp.com/
CormanLisp
がそうです。
でも、Schemeにも、ネイティブコンパイラはありますね。長い歴史のあるCL
ほど成熟してないかもしれないし、call/ccがあるから、面倒そうですよね。
大域脱出だけならフツーだけど、飛び込んでくるもんね。やっぱり、ネイティ
ブコードでやるより、仮想マシンを作ってそこでやる方向に流れやすいんじゃ
ないかな。
以下のChez Schemeも、インクリメンタル・ネイティブ・コンパイラだから、
インタープリタなしみたいですね。
http://www.scheme.com/index.html
Chez Scheme
http://www-sop.inria.fr/mimosa/fp/Bigloo/
Bigloo
http://www.call-with-current-continuation.org/index.html
CHICKEN
Chez Schemeはコンパイラを使うバージョンでこれが有料。Petite Chez
Schemeは無料で、インタープリタ。そういうレベル分けですね。
Scheme 5つの誤解
・黒板でしか使えないオモチャである
・仕様が貧弱である
・本当のマクロは書けない
・パッケージシステムがない
・Schemeではメシが食えない
http://karetta.jp/blog/gauche-night
では、さらに2つ追加。
・便利なライブラリが少ない
・S式は異星人の言葉
だそうです。
「S式は異星人の言葉」というのは、S式が森羅万象ってことが理解できない
人が多いってことね。プログラムばっかりやってるから、わからないんだよ。
文学と哲学を勉強しましょう。\(^O^)/
(と)の間に全宇宙があるんです。\(^O^)/
(と)の間に何を入れてもいいし、それをどう解釈してもいいのがLispの基本。
ただし、無限の自由は人を不安にするから、CLやSchemeの標準では、デフォ
ルトではこういうものを入れて、こういう解釈をしますよと決めてるだけ。そ
れだけわかれば、あとは所詮プログラムという下世話な話。\(^O^)/
http://blog.livedoor.jp/dankogai/archives/50815759.html
をみると、弾さん、いま、仏教にはまってるのね。
「『ブッダの教えはLisp』なのではないか、ということ。動的、というのはま
さに諸行無常だし、S式は色即是空だ」
やっと、Lispが何かわかってきたな。\(^O^)/
おれは、心の科学としての仏教や生き方の部分はほとんど興味がなく、宇宙
観が非常に面白い。意味が現れるのは関係性によってだし、刹那は、時間の量
子化だからループ量子重力理論だし(爆)、唯識論は量子力学の観測問題への解
でもあるし、宇宙はすべて情報であるという著名物理学者ホイーラー(ブラッ
クホールの命名者でもある)の考え方(it from bit)に通じるし。\(^O^)/
あ、宇宙の真理が降ってきた。\(^O^)/
超弦理論(超ひも理論)の弦(ひも)って、実はプランク長さのS式だよ。
なんだ、そうか。それもマクロだね。マクロのパラメータがちょろっと変わ
ると展開形が変わって、いろんな素粒子ができるんだな。
なんだ、宇宙の根源はLispだったんだ。\(^O^)/
(と)の間に全宇宙があるのも当然だね。
おれは、最先端物理学、最先端宇宙論のその先に突き抜けちゃったね。\(^O^)/
http://iiyu.asablo.jp/blog/2006/11/22/964309
Re: Lispセミナー
http://www.asahi-net.or.jp/%7Eki4s-nkmr/lisp20061121/lisp.html
Lispとは何か
を参照。
もうちょっと真面目な話をすると、S式は、言語処理系が字句解析をして構
文解析をして作る抽象構文木そのものなんです。
「すべてのプログラミング言語は、Lispの構文糖衣に過ぎない」といわれる
のは、そのためです(なお、構文糖衣は、シンタックスシュガーとか、シンタ
クティックシュガーなどといわれるもの。英語的にはsytactic sugarのほうだ
と思うけど、日本語的にはシンタックスシュガーのほうがよく使われると思う)
。
抽象構文木で直接プログラムするところが、Lispがずるいというか偉いとこ
ろで、他の言語だと、その言語の文法があってそれを言語処理系が抽象構文木
にしますが、Lispは、最初から抽象構文木で書くから、余計なステップがない。
無駄がない。もう直接なんだもん。
Lispの達人たちが、他の言語で書く気がしないというのは、なんで、その言
語の構文規則にそったプログラムなどという余分なものに一旦人間が変換して、
そこから抽象構文木を生成しなきゃならないのか。最初から、直接、抽象構文
木で書けるならそっちのほうがいいじゃんということなんです。
たとえていうと、他の言語は、薬を調合して病気を治す感じ。Lispは、直接
DNAを切った貼ったして遺伝子を操作して治療する感じじゃないか。\(^O^)/
なにより、将棋の渡辺竜王にコンピュータ将棋ソフトのボナンザが挑戦する
ようになっても、人間ほど優れた言語処理系はコンピュータ上には存在しない。\(^O^)/
コンピュータの言語処理系と違って、人間なら、言語ですらない、あいまい、
適当なものからでも、抽象構文木を生成できる。\(^O^)/
よって、抽象構文木を生成できるように人間をプログラムして(鍛錬して)、
それをコンピュータの言語処理系の入力とするようなハイブリッドシステムが
一番いい。\(^O^)/
まさに人馬一体。\(^O^)/
ということで、Lipserは、抽象構文木を切った貼ったする強力なツールであ
るマクロが好きなんです。マクロがないLispなんてLispじゃないなんていう人
が多いのも、わかるでしょ?
Rubyも抽象構文木をいじれるようにするかどうかという話があるようですが、
Javaはいま、コンパイラツリーAPIが公開されていて、プログラマがいじれる
ようになっています。詳しくは、
http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/javac/index.html
javac - Java プログラミング言語コンパイラ
http://java.sun.com/javase/ja/6/docs/ja/jdk/api/javac/tree/index.html
Compiler Tree API
をどうぞ。
検索していたら、
http://www.amazon.co.jp/exec/obidos/ASIN/4894714078/showshotcorne-22/
スティーブン・ジョン メツカー著, スリーエーシステムズ訳「Javaによるパ
ーサ構築技法」
にぶつかったけど、コンパイラツリーAPIと関係ないみたいね。でも、目次を
みると、いろんな言語のパーサを作ってコツを教える本みたいでうsね。
脱線するけど、
http://www.javareading.com/bof/index.html
Java勉強会
なんてのがありますね。ちゃんとやってる人はやってますね。
http://www.javareading.com/bof/mesa.html
にmesaの話がありますね。
懐かしいなあ。使ったことないけど、Interlisp-Dのマシンなどとともに、
ショーなどでみるXeroxのワークステーションは未来がありましたよね。ビジ
ネス的には未来がなくなったけどね。^^;
あちこちのブログに、Gauche Nightの感想が出ていたけど、scinfaxiさんの
http://d.hatena.ne.jp/scinfaxi/20070511/1178867390
が長大かつ面白い。
--- ここから ---
黒田さんの「 Lisp マシンで暮らしたい」との発言には強く同意。「実現する
ならどうしても VM になる」とのことでしたが、そうではなく CPU レベルで
「 Lisp だったらなぁ」と思ってしまう(そうすれば x86 アセンブリなんて勉
強しなくていいのにね)。黒田さんは「現実的でないけれど」とおっしゃられ
ていましたが、世界は抽象化の方向に向かっているので CPU レベルにもそれ
が波及して「少なくともマイクロプログラムでインタプリタが書かれるくらい
にはなるのではないか」と妄想していたりします。
--- ここまで ---
とあるけど、scinfaxiさんはまだ若いから知らないんでしょうかね。
LispマシンはSymbolicsやLMIやXeroxやTIやNTTのマシンなど20、30年前に実
際に作られて売られたんです。
NTTの竹内さんのマシンTAO ELISでは、竹内さんたちは、LispでLispマシン
のマイクロプログラムを書いてたんです。この辺の話は、
http://www.asahi-net.or.jp/~ki4s-nkmr/wabijo85.html
乳の詫び状(2004/11/27) 標題: Lispミーハー猿、しょの2
http://www.nue.org/nue/index.html
NUE(New Unified Environment)
http://ll.jus.or.jp/llw2004/program/takeuchi-ikuo-LLW.pdf
Light-weight Language
http://www.asahi-net.or.jp/~ki4s-nkmr/wabijo81.html
乳の詫び状(2004/07/19) 標題: Lispミーハー猿
乳の詫び状(2004/07/27) 標題: Schemeは「実用的なものを書くのに力不足」
か?
http://iiyu.asablo.jp/blog/2005/11/17/145926
Lisp特別イベント
http://iiyu.asablo.jp/blog/2005/11/22/151472
Lisp特別イベントその2
をどうぞ。
和書でScheme本を紹介しましょう。
http://www.amazon.co.jp/exec/obidos/ASIN/489471163X/showshotcorne-22/
Harold Abelson, Gerald Jay Sussman, Julie Sussman著、和田英一訳「計算
機プログラムの構造と解釈」
は、別格として、
http://www.amazon.co.jp/exec/obidos/ASIN/4894712261/showshotcorne-22/
R.ケント ディヴィグ著「プログラミング言語SCHEME」
が、いまんとこ、はうあ!!\(^O^)/
なんじゃ、こりゃ。品切れなのか。しかも、古本で6000円以上する。たしか
おれが買ったときって、3000円だったと思う。
http://www.biwa.ne.jp/~mmura/scheme/tspl.html
をみると、たしかにそうですね。それと原書の第2版の訳ですね。
いま原書は第3版で、MIT Pressから出ていますが、上記、Chez Schemeのサ
イトでは、それが読めるようになっています。本になる前の草稿かもしれませ
んが。
http://www.scheme.com/tspl3/
The Scheme Programming Language
Third Edition
R. Kent Dybvig
Illustrations by Jean-Pierre H?bert
をどうぞ。
あれ? 似た話、どこかで読んだぞ。おれ、自分で書いてるじゃん。\(^O^)/
http://iiyu.asablo.jp/blog/2005/09/26/88383
ネットで読めるLisp本
http://iiyu.asablo.jp/blog/2005/09/27/89520
Re: ネットで読めるLisp本
をどうぞ。
湯淺(湯浅)先生の
http://www.amazon.co.jp/exec/obidos/ASIN/4000077015/showshotcorne-22/
湯浅太一著
「Scheme入門」
も、古本で5000円以上になっている。
いや、ほんと。この前、
http://iiyu.asablo.jp/blog/2007/05/11/1501516
本の品切れ。Lispの古本はバブル? 入門書紹介も兼ねたつもり。
でも書いたけど、Lisp関連本は、在庫がないからどんどん値上がりしているん
だ。そんなに人気があるのかな。Lisp、どうしたんだ。ほんとにバブルか。\(^O^)/
この本、湯浅先生にサインしてもらって、そのサインに、「showさん、この
本は貴重です。死ぬまで売るな」と書いてある。\(^O^)/
しかし、Lisp本バブルで、かつてのチューリップバブルみたいになって、湯
浅先生の本1冊が1億円なんてなると、きっと売っちゃうなあ。\(^O^)/
---
Gauche Nightのこと。ちょー遅くなったけど、もう、これくらいでケリをつ
けてアップします。キリがないんだもん。^^;
http://iiyu.asablo.jp/blog/2007/04/06/1374459
Shiroさんが作ったScheme、Gaucheに関するお知らせ
http://iiyu.asablo.jp/blog/2007/05/06/1488584
Lispにやさしい新宿ジュンク堂書店\(^O^)/
で、紹介したGauche Night。盛り上がったみたいですね。
http://itpro.nikkeibp.co.jp/article/NEWS/20070510/270600/
【GaucheNight】日本人が作ったScheme処理系Gaucheのお祭りが開催,Lisper
の熱気で夜中まで盛り上がる
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?GaucheNight
http://www.kahua.org/cgi-bin/khead.cgi/kahua-s5/view/11
イベントで、悪役?を演じて人気だったらしい黒田さんからもメールが来て、
川合shiroさんとマクロについてやりとりしていますね。
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/scheme
About Scheme
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3A%E3%83
%9E%E3%82%AF%E3%83%AD%3ACommonLisp%E3%81%A8%E3%81%AE%E6%AF%94%E8%BC%83
Scheme:マクロ:CommonLispとの比較
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/gauche-night
GaucheNight (About Scheme cont.)
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3a%e3%83
%9e%e3%82%af%e3%83%ad%3aCommonLisp%e3%81%a8%e3%81%ae%e6%af%94%e8%bc%83
%3a%e6%84%8f%e5%91%b3%e8%ab%96
Scheme:マクロ:CommonLispとの比較:意味論
おれ、バカだから、黒田さんのいってること、最初、無理筋で何をいってる
んだと思ってたの。
だって、所詮SchemeだってS式なんだから、マクロが書けないわけがない。
問題は変数名の衝突でしょ。Common Lisp(以下、CL)と違って、変数と関数の
名前空間が分離してないから、衝突しやすい。
CLのgensymのように一意性をシステムが保証するものを作ればいいだけ。CL
は現場の実践的な知恵、長い間に培われたものをまとめ上げたものなので、
gensymは実践的には「あり」なんだけど、Schemeとしては、そういう汚いもの
は入れたくない。せっかく、ここまできれいにしようきれいにしょうとがんば
ってきたんだから、初志貫徹。だから、Schemeでマクロが書けないんじゃなく
て、CLとは違ったきれいな形のマクロをどう入れるかもめていて、マクロがな
かなか入らなかったと、おれは理解しているわけ。
だから、黒田さんがいってる、Schemeの仕様がBNFで書いてあって文字列に
対して仕様が決まっているけど、CLの仕様はreadのアルゴリズムが書いてあっ
て、以後はLispオブジェクトに対して仕様が決まっているなんて、Schemeだっ
て、readしてLispオブジェクトにするに決まっているんだから、そんなもん、
大した違いじゃないだろ。黒田さん、筋が悪いよ。言いがかりだろうと。
大体さ、CLでreadのアルゴリズムを書かないといけないのは、readtableや
リーダーマクロといった、普通の言語ではあり得ないものを持ち込んでいるか
らでしょ。
黒田さん、どうしてそんなにScheme、嫌うかなぁ。近親相姦か、もとい、近
親憎悪か。
こういう理解だったんです。
でも、違うのね。Schemeのマクロ仕様は、Lispオブジェクトの木じゃなくて、
プログラムの字面に対しての変形を許している。だから、Lispの本物のマクロ
じゃないと。
XMLでいうと、XMLをパーサが読み込んで、でき上がったDOM木に対して、木
の変形として処理するのが、XSLT。一方、XMLとしてパージングせず、字面だ
けのテキストとして処理するのは、sed, AWK, PerlやRubyなどで正規表現を使
ってパターンマッチして変形するみたいなもの。Perlのソースフィルタはまさ
にそんな感じですよね。
CLのマクロは前者だけど、Schemeのマクロは後者も許している。
それじゃ、Lispの本物のマクロじゃないだろう。こういうことなのね。
readtableとリーダーマクロを知らない人のために補足しておくと、おれも
知らないんだけどさ(爆)。
コンパイラやインタープリタといった言語処理系における字句解析部(トー
クナイザやスキャナといわれるもの)をプログラマが操作できるものです。こ
んな言語仕様、フツー、あり得えんでしょう、\(^O^)/
おれ、これを、どう理解しているかというと、レストランや料理屋で、まか
ない飯ってありますよね。客には出さず、厨房でコックや板前が自分たちのた
めに、ありあわせの材料で作って食うもの。でも、うまいという。
おれは、readtableやリーダーマクロは、まかない飯を客(プログラマ)が勝
手にキッチン・厨房に入って作っていいというものなんだと理解しています。\(^O^)/
関連して、readとevalの分離の話が出てましたよね。Lispはreadとevalが分
離しているけど、他の言語はそうじゃないと。
でも、仕様の書き方はどうあれ、おれの感覚では逆で、CLは、readとevalが
いっしょくたになってるんです。なんといっても、リーダーマクロや
readtableで入力から文字を読み込むときに、好きに入力を評価したり、変形
できるんだもん。
もっというと、コンパイラマクロというのもあります。これ、コンパイル時
に有効なマクロで(つまり、インタープリタのときは無効)、コンパイラがS式
をコンパイルするとき、プログラマがS式を変形してもっと効率的、強烈な最
適化ができるように介入手段を与えるものです。
なんか、まかない飯じゃなくて、出入国の検査で、勝手に整形・変装してい
い場所があって、テロリストが善良な市民に化けて入国したり、その逆をやっ
ていい。しかも、身長、体重、肌の色はおろか、性まで勝手に変えていいと。\(^O^)/
フツー、言語にそんなことができるように要求するか。
するんです、Lisp屋は。\(^O^)/
あーん、こわいよー。\(^O^)/
リーダーマクロやコンパイラマクロで、あれこれ、探したら、こんなん出ま
した。\(^O^)/
http://lispuser.net/memo/lisp/2006-03-30-23-58.html
最高にキモい Lisp コードを書いてみよう with 100 行リーダーマクロ
http://lispuser.net/memo/misc/2007-04-01-14-57.html
自力で最適化コンパイル -- コンパイラマクロ
lispuser.netはすごいですね。勉強になるなあ。前者は、笑いました。CL-
Yaccのちゃんとした解説になっていますが、LispとAlgol(Pascal)の合体みた
いな構文で、和洋折衷的な言語仕様になっていて、楽しいですね。
おれ、CL-Yaccって知らなかったんですが、パーサ関係でScheme側に脱線す
ると、
http://www.informatik.uni-freiburg.de/proglang/software/essence/
Essence
というのがありますね。おれが、へぇと思ったのは、JSONをやってたとき、つ
まり、
http://iiyu.asablo.jp/blog/2006/11/07/690487
JSON in Javaのバグ修正
のころ、
http://www.json.org/
で、Lispの実装もみてみたわけ。そしたら、Schemeは面白いパーサ使ってるん
です。詳しくは、
http://www.call-with-current-continuation.org/eggs/packrat.html
http://www.lshift.net/blog/2005/08/11/extensible-parsing-systems
http://pdos.csail.mit.edu/~baford/packrat/
The Packrat Parsing and Parsing Expression Grammars Page
をどうぞ。
それにしても、call-with-current-continuation.orgは、いままでみた中で
最長のドメイン名じゃないか。Schemeの継続呼び出し(call-with-current-
continuation, フツーcall/ccと略します)そのままだもんね。\(^O^)/
コンパイラといえば、以前、弾さんに「Perlはコンパイラがないもんね」な
んていったら、「バイトコードにコンパイルして実行してますよ」なんていう
から、びっくり。
おれらの語感だと、コンパイラといえば、フツー、機械語にコンパイルする
ネイティブコンパイラ。バイトコードにコンパイルして仮想マシンで実行する
のは、コンパイラ・インタプリタであって、コンパイラじゃないんですよね。
じゃ、Javaはどうなの? バイトコードの仮想マシンで実行するのに、コン
パイラがついてるじゃないかと。あれはインチキ、トリックですね。\(^O^)/
バイトコードコンパイラと仮想マシンを明確に分けてあるから、バイトコー
ドにする部分はコンパイラといわざるを得ない。\(^O^)/
Schemeはネイティブコンパイラがないという話を黒田さん書いてたけど、
Lisp(CL)にはインタープリタしかなく、ネイティブコンパイラがないという、
かつての誤解と似てますね。
もちろん、CLはほぼ必ずコンパイラとインタープリタが備わった処理系にな
ってますし、CLには、コンパイラしかない処理系もあります。コンパイルが速
いのでインタープリタの必要なしということです。たとえば、
http://www.cormanlisp.com/
CormanLisp
がそうです。
でも、Schemeにも、ネイティブコンパイラはありますね。長い歴史のあるCL
ほど成熟してないかもしれないし、call/ccがあるから、面倒そうですよね。
大域脱出だけならフツーだけど、飛び込んでくるもんね。やっぱり、ネイティ
ブコードでやるより、仮想マシンを作ってそこでやる方向に流れやすいんじゃ
ないかな。
以下のChez Schemeも、インクリメンタル・ネイティブ・コンパイラだから、
インタープリタなしみたいですね。
http://www.scheme.com/index.html
Chez Scheme
http://www-sop.inria.fr/mimosa/fp/Bigloo/
Bigloo
http://www.call-with-current-continuation.org/index.html
CHICKEN
Chez Schemeはコンパイラを使うバージョンでこれが有料。Petite Chez
Schemeは無料で、インタープリタ。そういうレベル分けですね。
Scheme 5つの誤解
・黒板でしか使えないオモチャである
・仕様が貧弱である
・本当のマクロは書けない
・パッケージシステムがない
・Schemeではメシが食えない
http://karetta.jp/blog/gauche-night
では、さらに2つ追加。
・便利なライブラリが少ない
・S式は異星人の言葉
だそうです。
「S式は異星人の言葉」というのは、S式が森羅万象ってことが理解できない
人が多いってことね。プログラムばっかりやってるから、わからないんだよ。
文学と哲学を勉強しましょう。\(^O^)/
(と)の間に全宇宙があるんです。\(^O^)/
(と)の間に何を入れてもいいし、それをどう解釈してもいいのがLispの基本。
ただし、無限の自由は人を不安にするから、CLやSchemeの標準では、デフォ
ルトではこういうものを入れて、こういう解釈をしますよと決めてるだけ。そ
れだけわかれば、あとは所詮プログラムという下世話な話。\(^O^)/
http://blog.livedoor.jp/dankogai/archives/50815759.html
をみると、弾さん、いま、仏教にはまってるのね。
「『ブッダの教えはLisp』なのではないか、ということ。動的、というのはま
さに諸行無常だし、S式は色即是空だ」
やっと、Lispが何かわかってきたな。\(^O^)/
おれは、心の科学としての仏教や生き方の部分はほとんど興味がなく、宇宙
観が非常に面白い。意味が現れるのは関係性によってだし、刹那は、時間の量
子化だからループ量子重力理論だし(爆)、唯識論は量子力学の観測問題への解
でもあるし、宇宙はすべて情報であるという著名物理学者ホイーラー(ブラッ
クホールの命名者でもある)の考え方(it from bit)に通じるし。\(^O^)/
あ、宇宙の真理が降ってきた。\(^O^)/
超弦理論(超ひも理論)の弦(ひも)って、実はプランク長さのS式だよ。
なんだ、そうか。それもマクロだね。マクロのパラメータがちょろっと変わ
ると展開形が変わって、いろんな素粒子ができるんだな。
なんだ、宇宙の根源はLispだったんだ。\(^O^)/
(と)の間に全宇宙があるのも当然だね。
おれは、最先端物理学、最先端宇宙論のその先に突き抜けちゃったね。\(^O^)/
http://iiyu.asablo.jp/blog/2006/11/22/964309
Re: Lispセミナー
http://www.asahi-net.or.jp/%7Eki4s-nkmr/lisp20061121/lisp.html
Lispとは何か
を参照。
もうちょっと真面目な話をすると、S式は、言語処理系が字句解析をして構
文解析をして作る抽象構文木そのものなんです。
「すべてのプログラミング言語は、Lispの構文糖衣に過ぎない」といわれる
のは、そのためです(なお、構文糖衣は、シンタックスシュガーとか、シンタ
クティックシュガーなどといわれるもの。英語的にはsytactic sugarのほうだ
と思うけど、日本語的にはシンタックスシュガーのほうがよく使われると思う)
。
抽象構文木で直接プログラムするところが、Lispがずるいというか偉いとこ
ろで、他の言語だと、その言語の文法があってそれを言語処理系が抽象構文木
にしますが、Lispは、最初から抽象構文木で書くから、余計なステップがない。
無駄がない。もう直接なんだもん。
Lispの達人たちが、他の言語で書く気がしないというのは、なんで、その言
語の構文規則にそったプログラムなどという余分なものに一旦人間が変換して、
そこから抽象構文木を生成しなきゃならないのか。最初から、直接、抽象構文
木で書けるならそっちのほうがいいじゃんということなんです。
たとえていうと、他の言語は、薬を調合して病気を治す感じ。Lispは、直接
DNAを切った貼ったして遺伝子を操作して治療する感じじゃないか。\(^O^)/
なにより、将棋の渡辺竜王にコンピュータ将棋ソフトのボナンザが挑戦する
ようになっても、人間ほど優れた言語処理系はコンピュータ上には存在しない。\(^O^)/
コンピュータの言語処理系と違って、人間なら、言語ですらない、あいまい、
適当なものからでも、抽象構文木を生成できる。\(^O^)/
よって、抽象構文木を生成できるように人間をプログラムして(鍛錬して)、
それをコンピュータの言語処理系の入力とするようなハイブリッドシステムが
一番いい。\(^O^)/
まさに人馬一体。\(^O^)/
ということで、Lipserは、抽象構文木を切った貼ったする強力なツールであ
るマクロが好きなんです。マクロがないLispなんてLispじゃないなんていう人
が多いのも、わかるでしょ?
Rubyも抽象構文木をいじれるようにするかどうかという話があるようですが、
Javaはいま、コンパイラツリーAPIが公開されていて、プログラマがいじれる
ようになっています。詳しくは、
http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/javac/index.html
javac - Java プログラミング言語コンパイラ
http://java.sun.com/javase/ja/6/docs/ja/jdk/api/javac/tree/index.html
Compiler Tree API
をどうぞ。
検索していたら、
http://www.amazon.co.jp/exec/obidos/ASIN/4894714078/showshotcorne-22/
スティーブン・ジョン メツカー著, スリーエーシステムズ訳「Javaによるパ
ーサ構築技法」
にぶつかったけど、コンパイラツリーAPIと関係ないみたいね。でも、目次を
みると、いろんな言語のパーサを作ってコツを教える本みたいでうsね。
脱線するけど、
http://www.javareading.com/bof/index.html
Java勉強会
なんてのがありますね。ちゃんとやってる人はやってますね。
http://www.javareading.com/bof/mesa.html
にmesaの話がありますね。
懐かしいなあ。使ったことないけど、Interlisp-Dのマシンなどとともに、
ショーなどでみるXeroxのワークステーションは未来がありましたよね。ビジ
ネス的には未来がなくなったけどね。^^;
あちこちのブログに、Gauche Nightの感想が出ていたけど、scinfaxiさんの
http://d.hatena.ne.jp/scinfaxi/20070511/1178867390
が長大かつ面白い。
--- ここから ---
黒田さんの「 Lisp マシンで暮らしたい」との発言には強く同意。「実現する
ならどうしても VM になる」とのことでしたが、そうではなく CPU レベルで
「 Lisp だったらなぁ」と思ってしまう(そうすれば x86 アセンブリなんて勉
強しなくていいのにね)。黒田さんは「現実的でないけれど」とおっしゃられ
ていましたが、世界は抽象化の方向に向かっているので CPU レベルにもそれ
が波及して「少なくともマイクロプログラムでインタプリタが書かれるくらい
にはなるのではないか」と妄想していたりします。
--- ここまで ---
とあるけど、scinfaxiさんはまだ若いから知らないんでしょうかね。
LispマシンはSymbolicsやLMIやXeroxやTIやNTTのマシンなど20、30年前に実
際に作られて売られたんです。
NTTの竹内さんのマシンTAO ELISでは、竹内さんたちは、LispでLispマシン
のマイクロプログラムを書いてたんです。この辺の話は、
http://www.asahi-net.or.jp/~ki4s-nkmr/wabijo85.html
乳の詫び状(2004/11/27) 標題: Lispミーハー猿、しょの2
http://www.nue.org/nue/index.html
NUE(New Unified Environment)
http://ll.jus.or.jp/llw2004/program/takeuchi-ikuo-LLW.pdf
Light-weight Language
http://www.asahi-net.or.jp/~ki4s-nkmr/wabijo81.html
乳の詫び状(2004/07/19) 標題: Lispミーハー猿
乳の詫び状(2004/07/27) 標題: Schemeは「実用的なものを書くのに力不足」
か?
http://iiyu.asablo.jp/blog/2005/11/17/145926
Lisp特別イベント
http://iiyu.asablo.jp/blog/2005/11/22/151472
Lisp特別イベントその2
をどうぞ。
和書でScheme本を紹介しましょう。
http://www.amazon.co.jp/exec/obidos/ASIN/489471163X/showshotcorne-22/
Harold Abelson, Gerald Jay Sussman, Julie Sussman著、和田英一訳「計算
機プログラムの構造と解釈」
は、別格として、
http://www.amazon.co.jp/exec/obidos/ASIN/4894712261/showshotcorne-22/
R.ケント ディヴィグ著「プログラミング言語SCHEME」
が、いまんとこ、はうあ!!\(^O^)/
なんじゃ、こりゃ。品切れなのか。しかも、古本で6000円以上する。たしか
おれが買ったときって、3000円だったと思う。
http://www.biwa.ne.jp/~mmura/scheme/tspl.html
をみると、たしかにそうですね。それと原書の第2版の訳ですね。
いま原書は第3版で、MIT Pressから出ていますが、上記、Chez Schemeのサ
イトでは、それが読めるようになっています。本になる前の草稿かもしれませ
んが。
http://www.scheme.com/tspl3/
The Scheme Programming Language
Third Edition
R. Kent Dybvig
Illustrations by Jean-Pierre H?bert
をどうぞ。
あれ? 似た話、どこかで読んだぞ。おれ、自分で書いてるじゃん。\(^O^)/
http://iiyu.asablo.jp/blog/2005/09/26/88383
ネットで読めるLisp本
http://iiyu.asablo.jp/blog/2005/09/27/89520
Re: ネットで読めるLisp本
をどうぞ。
湯淺(湯浅)先生の
http://www.amazon.co.jp/exec/obidos/ASIN/4000077015/showshotcorne-22/
湯浅太一著
「Scheme入門」
も、古本で5000円以上になっている。
いや、ほんと。この前、
http://iiyu.asablo.jp/blog/2007/05/11/1501516
本の品切れ。Lispの古本はバブル? 入門書紹介も兼ねたつもり。
でも書いたけど、Lisp関連本は、在庫がないからどんどん値上がりしているん
だ。そんなに人気があるのかな。Lisp、どうしたんだ。ほんとにバブルか。\(^O^)/
この本、湯浅先生にサインしてもらって、そのサインに、「showさん、この
本は貴重です。死ぬまで売るな」と書いてある。\(^O^)/
しかし、Lisp本バブルで、かつてのチューリップバブルみたいになって、湯
浅先生の本1冊が1億円なんてなると、きっと売っちゃうなあ。\(^O^)/
コメント
トラックバック
_ ホットコーナーの舞台裏 - 2008年03月23日 00時39分38秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
http://iiyu.asablo.jp/blog/2008/03/22/2810715
日本のコンピュータ博物館
で
---
http://iiyu.asablo.jp/blog/2008/03/22/2810715
日本のコンピュータ博物館
で
_ ホットコーナーの舞台裏 - 2009年10月23日 08時46分56秒
ASAHIネット(http://www.asahi-net.or.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
http://iiyu.asablo.jp/blog/2009/02/13/4115774
プログラミング言語本
で、名
---
http://iiyu.asablo.jp/blog/2009/02/13/4115774
プログラミング言語本
で、名
_ ホットコーナーの舞台裏 - 2010年02月27日 07時37分36秒
ASAHIネット(http://www.asahi-net.or.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
http://www.amazon.co.jp/exec/obidos/ASIN/4130624512/showshotcorne-22/
情報 (東京大
---
http://www.amazon.co.jp/exec/obidos/ASIN/4130624512/showshotcorne-22/
情報 (東京大
_ ホットコーナーの舞台裏 - 2010年04月02日 01時04分08秒
ASAHIネット(http://www.asahi-net.or.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
100万年ぶりに、
http://www.nue.org/nue/index.html
NUE
に行ったら、一
---
100万年ぶりに、
http://www.nue.org/nue/index.html
NUE
に行ったら、一
_ ホットコーナーの舞台裏 - 2010年10月06日 23時47分13秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
往年のScheme入門の定番、「Scheme手習い」が新しくなって出ますね。
---
往年のScheme入門の定番、「Scheme手習い」が新しくなって出ますね。
_ ホットコーナー - 2020年01月13日 02時21分46秒
ASAHIネット(http://asahi-net.jp )のブログサービス、アサブロ(https://asahi-net.jp/asablo/ )を使っています。
---
C++14でジェネリックラムダが入ったから、こんなに簡単にクロージャが書けて、ク
---
C++14でジェネリックラムダが入ったから、こんなに簡単にクロージャが書けて、ク
_ ホットコーナー - 2021年03月27日 03時18分00秒
ASAHIネット(http://asahi-net.jp )のブログサービス、アサブロ(https://asahi-net.jp/asablo/ )を使っています。
---
ぼくがちょくちょく本を買うManningは、今日は何の日?をやっている。3月15日に、
---
ぼくがちょくちょく本を買うManningは、今日は何の日?をやっている。3月15日に、
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。