New submission from STINNER Victor:

Attached patch adds a new bytecode instruction: RETURN_NONE. It is similar to 
"LOAD_CONST; RETURN_VALUE" but it avoids the need of adding None to constants 
of the code object. For function with an empty body, it reduces the stack size 
from 1 to 0.


Example on reference Python 3.7:

>>> def func(): return
... 
>>> import dis; dis.dis(func)
  1           0 LOAD_CONST               0 (None)
              2 RETURN_VALUE
>>> func.__code__.co_stacksize
1



Example on patched Python 3.7:

>>> def func(): return
... 
>>> import dis; dis.dis(func)
  1           0 RETURN_CONST
>>> func.__code__.co_stacksize
0


If the function has a docstring, RETURN_CONST avoids adding None to code 
constants:

>>> def func():
...  "docstring"
...  return
... 
>>> func.__code__.co_consts
('docstring',)


I will now run benchmarks on the patch.

----------
files: return_none.patch
keywords: patch
messages: 281696
nosy: haypo, matrixise, serhiy.storchaka
priority: normal
severity: normal
status: open
title: Add RETURN_NONE
versions: Python 3.7
Added file: http://bugs.python.org/file45640/return_none.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue28800>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to