🤷♂️ Снова мы сегодня об оптимизации.
❓ Позавчера Гвидо Ван Россум поднял вопрос над ускорением метода s.startswith("foo")
🦥 Он отметил, что проверка на то, начинается ли строка с заданной подстроки, происходит медленнее при использовании s.startswith("foo"), чем при использовании s[:3] == "foo".
👥 После обсуждения, ускорили за счет макроса METH_FASTCALL. Когда метод определен с помощью этого макроса, CPython генерирует специальный байт-код для более эффективного вызова функции, чем METH_VARARGS, который был до этого, за счет того, что он принимает определенное количество позиционных аргументов.
👉 Например, при использовании METH_VARARGS, CPython должен создать кортеж из всех переданных аргументов, а затем выполнить проверку типов и преобразование каждого аргумента в соответствующий PyObject. С METH_FASTCALL, это становится ненужным, поскольку он предполагает фиксированное количество позиционных аргументов и не требует создания кортежа.
❗️ Однако важно отметить, что использов