犬も猫も空想も扱っておりません。(旧・エト記)この広告は、90日以上更新していないブログに表示しています。Nerd朝起きると神のお告げがあり,etolispはまたも邪悪な「俺仕様」に陥らずに済んだ。イヤ,結局,仕様に当たったわけではないんだけど,私の好ましい方を支持する指摘があったので,そっちを信じることにした(『神のお告げ』たる所以・笑)。棄てることができて,少なくとも実装はとてもスッキリしたものになった。残骸を整理していて,我ながら,間違った仕様であっても何とか実装して動かしてしまう自分を誉めてあげたいと思った(幸せな奴だ)。あるということである。ランタイムの状態を変化させうる命令は,パースされた直後に実行しなければならない。パースの単位って何だろうと考えてみたが,それは恐らく,コッカで最初に開いたカッコが閉じるまでなんだろう。今日の修正で,今までファイル全体をパースしてから実行していたのを,カッコ&コッカ単位で実行して使い捨てるようになった。お陰でメモリも節約できた。ゆーか明らかに以前の方法は無駄遣いだった。仕様はよく実装のことを考えてる気がするよ,仕様に則るだけで処理系の実装が綺麗になるよ,と自分のミスを他人のファインプレーに転嫁してみる。双手を上げて完璧であると誉めているわけではない。この結果はたんに関数を手でインラインに書き下したものとは異なる結果を与えるという,気持ち悪い現象が起こる。これは名前空間の仕組みを,プログラムの静的な構造ではなくて,動的なLispの命令で実現してしまったところに原因があるのだと思う。プログラムの静的な構造で実現するとしても,Lispでやるとしたらカッコとコッカしかないわけで,パッケージ全体を巨大な1つのカッコ&コッカで括るか,あるpackageに属することを,各パース単位毎に指示しなければならず,コード自体のみやすさが損なわれる可能性がある。構造を読み解いていくということ。コッカは編集対象の構造の先頭が閉じるまで,あとづけで足していくに過ぎない。その際,ファイルの先頭ででっかくカッコが開いているとそれだけスタックを無駄遣いすることになるわけで,プログラマはそれを嫌うかも知れない(たんなる想像)。更なる妄想だが,Common-Lispが少しずつ発展してきたことを想像すると,packageの機能が新たに付け加えられたとき,既存のコードの先頭に1行足すだけでpackage化でき,名前空間で保護できるという利点は,過去の資産を引き継ぐ上で都合が良かったことだろう。以上のように考えると,この仕様は現実的な妥協ラインのように思える。問題Archiveはてなブログをはじめよう!xoinuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。