- 10.1 Use Declarations
- 宣言によるコンパイラの振舞いの違い。新しい知見は無いが、こういう話は面白く感じる。
- 10.2 Avoid Generic Functions
- 表題のとおり。半ページしかない。
- 10.3 Avoid Complex Argument Lists
- えっと、まず、効率化を考えるときはdisassembleをいろいろしてみて、コンパイラの振舞いをしることが重要そうだ。
- そしてこの節では、関数の引数リストは結構ハイコストよ、ということ。
- keyword parameterがもっともコストが高い。しかしkeyword parameterを使いたいときもある。そういうときは、keywordパラメータをもったものはフロントエンドとして、処理本体は別関数にするなどの手法があるよ。
- 10.4 Avoid Unnecessary Consing
- 要点をピックアップ
- nondestructiveではなくdestructiveな関数を使って対処。
- appendは非効率的。accumulatorを使って書き直せる。経験豊かなLisperはこういうのに慣れてる。
- GC機構によって何が速いかはかわってくる。場合によっては、nreverseよりもreverseの方が速い。timeせよ。
- ※P330〜P331のvectorの例は、aclでは、:adjustable tをつけないとエラーになる。
- *uniq-cons-table*をつくって、consをreuseする。(ここまでするのか)
- 多値で返すということは、consなどの構造を作らないので節約になる。
- リソース(プール)を作る。
- nondestructiveではなくdestructiveな関数を使って対処。
とりあえず、ここまで。平日に少し進めた。。。
次回は、10.5 Use the Right Data Structures から。
0 件のコメント:
コメントを投稿