Project

General

Profile

最適化 #1315

filterの戻り値を加工しない場合、配列よりもアロケートのコストが軽いオブジェクトで代用する

Added by toshi_a 初音 5 months ago. Updated 5 months ago.

Status:
新規
Priority:
通常
Target version:
Start date:
2019-02-10
Due date:
% Done:

0%

プラグイン名:

Description

動機

メモリプロファイルを取ったところ、以下のようなコードで作成される配列が大量にあった。フィルタを過剰に呼び出さない工夫も必要だが、大抵のフィルタは値を加工しないので、値を加工しなかったことを示すキーワードを代わりに返すことで、ほとんどのフィルタ呼び出しで配列の作成を1回削減できる。

対応

値を加工しなかったことを示す値には以下の候補がある:

- nil : やりやすいが見慣れていないと何のことかわからない
- 何らかのSymbolや定数: オブジェクトを作成しない。意図が明確になる。
- 何らかのメソッド: 今もフィルタを強制的にキャンセルするために Filter.cancel とか書いてるので、 Filter.pass とか書いたら帯域脱出した上でパスできると良いかも。
- filter_xxxの引数に加工しないという宣言を与える: 戻り値が偶然衝突することはないが融通は効かない

History

#1

Updated by toshi_a 初音 5 months ago

  • Subject changed from filterの戻り値を加工しない場合、配列よりもアロケートのコストが軽いオブジェクトで可能代用する to filterの戻り値を加工しない場合、配列よりもアロケートのコストが軽いオブジェクトで代用する

Also available in: Atom PDF