cpython/Objects
Guido van Rossum 488512bf49
A (very) slight speed improvement for iterating over bytes (#21705)
My mentee @xvxvxvxvxv noticed that iterating over array.array is
slightly faster than iterating over bytes.  Looking at the source I
observed that arrayiter_next() calls `getitem(ao, it->index++)` wheras
striter_next() uses the idiom (paraphrased)

    item = PyLong_FromLong(seq->ob_sval[it->it_index]);
    if (item != NULL)
        ++it->it_next;
    return item;

I'm not 100% sure but I think that the second version has fewer
opportunity for the CPU to overlap the `index++` operation with the
rest of the code (which in both cases involves a call).  So here I am
optimistically incrementing the index -- if the PyLong_FromLong() call
fails, this will leave the iterator pointing at the next byte, but
honestly I doubt that anyone would seriously consider resuming use of
the iterator after that kind of failure (it would have to be a
MemoryError).  And the author of arrayiter_next() made the same
consideration (or never ever gave it a thought :-).

With this, a loop like

    for _ in b: pass

is now slightly *faster* than the same thing over an equivalent array,
rather than slightly *slower* (in both cases a few percent).
2020-08-03 09:04:13 -07:00
..
clinic bpo-41342: Convert int.__round__ to Argument Clinic (GH-21549) 2020-07-20 15:57:37 +03:00
stringlib bpo-40521: Make empty Unicode string per interpreter (GH-21096) 2020-06-24 00:10:40 +02:00
abstract.c bpo-39573: Use the Py_TYPE() macro (GH-21433) 2020-07-10 12:40:38 +02:00
accu.c bpo-35081: Move accu.h to Include/internal/pycore_accu.h (GH-10271) 2018-11-01 02:30:36 +01:00
boolobject.c bpo-36974: tp_print -> tp_vectorcall_offset and tp_reserved -> tp_as_async (GH-13464) 2019-05-30 19:13:39 -07:00
bytearrayobject.c bpo-41334: Convert constructors of str, bytes and bytearray to Argument Clinic (GH-21535) 2020-07-20 15:53:55 +03:00
bytes_methods.c bpo-40170: Add _PyIndex_Check() internal function (GH-19426) 2020-04-08 02:01:56 +02:00
bytesobject.c A (very) slight speed improvement for iterating over bytes (#21705) 2020-08-03 09:04:13 -07:00
call.c bpo-41078: Rename pycore_tupleobject.h to pycore_tuple.h (GH-21056) 2020-06-22 17:27:35 +02:00
capsule.c bpo-40170: PyObject_NEW() becomes an alias to PyObject_New() (GH-19379) 2020-04-08 00:38:15 +02:00
cellobject.c bpo-40268: Remove unused pycore_pymem.h includes (GH-19531) 2020-04-15 02:57:50 +02:00
classobject.c bpo-40268: Remove unused pycore_pymem.h includes (GH-19531) 2020-04-15 02:57:50 +02:00
codeobject.c bpo-41263: Convert code.__new__ to Argument Clinic (GH-21426) 2020-07-10 10:12:04 +03:00
complexobject.c bpo-41343: Convert methods of complex to Argument Clinic (GH-21550) 2020-07-20 15:53:29 +03:00
descrobject.c bpo-41078: Rename pycore_tupleobject.h to pycore_tuple.h (GH-21056) 2020-06-22 17:27:35 +02:00
dict-common.h bpo-33312: Fix clang ubsan out of bounds warnings in dict. (GH-6537) 2018-04-19 22:41:19 -07:00
dictnotes.txt Issue #15055: update dictnotes.txt. Patch by Mark Shannon. 2012-06-24 21:03:45 +02:00
dictobject.c bpo-41333: Convert OrderedDict.pop() to Argument Clinic (GH-21534) 2020-07-19 09:18:55 +03:00
enumobject.c bpo-39481: PEP 585 for enumerate, AsyncGeneratorType, mmap (GH-19421) 2020-04-09 21:25:53 -07:00
exceptions.c bpo-40521: Make MemoryError free list per interpreter (GH-21086) 2020-06-23 22:55:46 +02:00
fileobject.c bpo-40268: Remove a few pycore_pystate.h includes (GH-19510) 2020-04-14 17:52:15 +02:00
floatobject.c bpo-40521: Cleanup code of free lists (GH-21082) 2020-06-23 16:40:40 +02:00
frameobject.c bpo-40941: Unify implicit and explicit state in the frame and generator objects into a single value. (GH-20803) 2020-07-17 11:44:23 +01:00
funcobject.c bpo-41078: Rename pycore_tupleobject.h to pycore_tuple.h (GH-21056) 2020-06-22 17:27:35 +02:00
genericaliasobject.c bpo-39573: Use the Py_TYPE() macro (GH-21433) 2020-07-10 12:40:38 +02:00
genobject.c bpo-40941: Unify implicit and explicit state in the frame and generator objects into a single value. (GH-20803) 2020-07-17 11:44:23 +01:00
interpreteridobject.c bpo-40302: Replace PY_INT64_T with int64_t (GH-19573) 2020-04-17 19:13:06 +02:00
iterobject.c bpo-40268: Remove unused pycore_pymem.h includes (GH-19531) 2020-04-15 02:57:50 +02:00
listobject.c Fix typo in Object/listobject.c (GH-21079) 2020-06-29 21:56:56 +03:00
listsort.txt Fixes in sorting descriptions (GH-18317) 2020-02-03 08:47:20 -08:00
lnotab_notes.txt bpo-38115: Deal with invalid bytecode offsets in lnotab (GH-16079) 2019-09-28 07:49:15 -07:00
longobject.c bpo-41342: Convert int.__round__ to Argument Clinic (GH-21549) 2020-07-20 15:57:37 +03:00
memoryobject.c bpo-41262: Convert memoryview to Argument Clinic. (GH-21421) 2020-07-18 11:12:05 +03:00
methodobject.c bpo-38787: C API for module state access from extension methods (PEP 573) (GH-19936) 2020-05-07 15:39:59 +02:00
moduleobject.c bpo-40268: Remove unused structmember.h includes (GH-19530) 2020-04-15 02:35:41 +02:00
namespaceobject.c bpo-39075: types.SimpleNamespace no longer sorts attributes in its repr (GH-19430) 2020-05-15 18:27:54 -07:00
object.c Fix a small grammatical mistake in a comment (GH-21526) 2020-07-17 13:09:21 -07:00
obmalloc.c bpo-40943: Replace PY_FORMAT_SIZE_T with "z" (GH-20781) 2020-06-10 18:38:05 +02:00
odictobject.c bpo-41333: Convert OrderedDict.pop() to Argument Clinic (GH-21534) 2020-07-19 09:18:55 +03:00
picklebufobject.c bpo-36785: PEP 574 implementation (GH-7076) 2019-05-26 17:10:09 +02:00
rangeobject.c bpo-41078: Rename pycore_tupleobject.h to pycore_tuple.h (GH-21056) 2020-06-22 17:27:35 +02:00
README Issue #18093: Factor out the programs that embed the runtime 2014-07-25 21:52:14 +10:00
setobject.c bpo-40521: Empty frozenset is no longer a singleton (GH-21085) 2020-06-23 17:42:55 +02:00
sliceobject.c bpo-40521: Cleanup code of free lists (GH-21082) 2020-06-23 16:40:40 +02:00
structseq.c bpo-41078: Rename pycore_tupleobject.h to pycore_tuple.h (GH-21056) 2020-06-22 17:27:35 +02:00
tupleobject.c bpo-40521: Always create the empty tuple singleton (GH-21116) 2020-06-24 15:21:54 +02:00
typeobject.c bpo-41295: Reimplement the Carlo Verre "hackcheck" (GH-21528) 2020-07-18 14:19:50 -07:00
typeslots.inc bpo-40724: Support setting buffer slots from type specs (GH-20648) 2020-06-06 21:35:10 +02:00
typeslots.py Issue #26662: Set PYTHON_FOR_GEN in configure 2016-07-26 12:48:08 +02:00
unicodectype.c Removed unintentional trailing spaces in non-external and non-generated C files. 2015-03-18 21:53:15 +02:00
unicodeobject.c bpo-41334: Convert constructors of str, bytes and bytearray to Argument Clinic (GH-21535) 2020-07-20 15:53:55 +03:00
unicodetype_db.h closes bpo-39926: Update Unicode to 13.0.0. (GH-18910) 2020-03-10 20:41:34 -07:00
weakrefobject.c bpo-40523: Add pass-throughs for hash() and reversed() to weakref.proxy objects (GH-19946) 2020-05-05 22:58:19 +01:00

Source files for various builtin objects