Method call on imported definition differs inside of a list comprehension
オープン
まだ誰も着手していません。
interpreter-core
performance
type-bug
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 35.9k
- PR マージ指標
- PR 指標を取得中
説明
Bug report
Bug description:
import re
[x for x in [] if re.match(".*", x)]
vs:
import re
re.match(".*", x)
When you disassemble these you'll see the inlined one will be doing a LOAD_ATTR 3 (match + NULL|self) while the one outside of the comprehension will be doing a PUSH_NULL/CALL which is to disable the method call optimization on things which are likely not methods.
These should both have the same byte code. There's no perceivable code execution difference other than performance though.
CPython versions tested on:
3.12, CPython main branch
Operating systems tested on:
Linux
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、CPython 3.12 または main 上でレポートにある 2 つの Python の例を逆アセンブルし、次に list-comprehension とトップレベル呼び出しのパスがどのようにコンパイルされるかを追跡します。完了条件は、観測可能な動作を変更せずに、どちらの形式もインポートされた定義の呼び出しに一貫したバイトコードを使用することです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- compilers
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 42/100