Как стать автором
Обновить
132
2.3
Никита Соболев @sobolevn

Fulltime OpenSource разработчик

Отправить сообщение

Сразу возникает вопрос: а такую структуру как обрабатывать? [[[1], [2]], [3]], что вернет .flat? Кажется, что itertools дает полную гибкость в решении данной задачи.

Еще раз спасибо. Сел разбирать отчет. Вот результаты:

  • Все проблемы в _hacl уже исправлены в main (3.14.0a7+)

  • Убрать if (fut->fut_state != STATE_PENDING) нельзя, потому что перед второй проверкой идет потенциальный вызов Python кода PyObject_CallNoArgs(exc); – он может изменить весь C стейт

  • Аналогично с `start_state != deque->state` – там идет вызов `PyObject_RichCompareBool`

  • В целом можно заменить if (error_handler == PyERROR_UNKNOWN) на `assert(errors != PyERROR_UNKNOWN);`, но не могу назвать данное поведение ошибкой. get_error_handler_wide может начать возвращать PyERROR_UNKNOWN в любой момент

  • Нельзя назвать ошибкой и get_datetime_capi();, потому что сейчас там скорее хак, который не совсем корректно работает. Будет в скором временем более сложная конструкция, которая сможет вернуть NULL, но позже. Заранее иметь проверку – норм

  • PyXIFreeNamespace(_PyXI_namespace *ns) – можно отрефакторить, да. Но там нет ошибки, обычно PRы с просто рефакторингом - не очень охотно принимают

  • FStar_UInt128_u32_combine_ – не является часть CPython, а частью HACL. можно открыть багу туда. Но опять же, ошибки нет :(

  • `val = -1;` можно удалить, но опять же – не ошибка. Просто лишняя строка :)

  • А вот i < input_length – реальная ошибка, спасибо. Поправил https://github.com/python/cpython/issues/132769

  • Файл pyshellext.cpp говорит, что поддерживает Vista. https://github.com/python/cpython/blob/132b6bc98f47a4d897dead8635b5a50a0baee485/PC/pyshellext.cpp#L1 Но тут я не знаю, не шарю за винду, первый раз вижу данный файл :) Можно открыть обсуждение.

В итоге – действительно проблемных кусков кода, вроде бы, к счастью не было :)

Добрый день, спасибо за анализ. Забрал в работу.

Сергей, отличные PRы, мое уважение :)

Кирилл – красавчик! Желаю успехов в карьере :)

PyList_New и Py_BuildValue оба могут вернуть NULL. Лучше использовать PyList_SET_ITEM вместо PyList_SetItem в данном случае.

Список ошибок:

  • `skip-magic-trailing-comma=false` по умолчанию https://docs.astral.sh/ruff/settings/#format_skip-magic-trailing-comma не нужно указывать дефолты

  • Вместо exclude используйте extend-exclude, опять же: не нужно переписывать дефолты https://docs.astral.sh/ruff/settings/#extend-exclude

  • py38 уже умер, минимальная версия поддержки - py39. Но вы еще почему-то устанавливаете другую версию питона для поддержки проекта тут: python = "^3.12"; так какая в итоге верная?

  • Указание ruff в [tool.poetry.dependencies] – плохая практика, сделайте [tool.poetry.group.dev.dependencies] для таких зависимостей

  • [lint] и [format] – не являются правильными ключами для настройки ruff, смотрите на [tool.ruff.lint] и [tool.ruff.format] , кажется, что вы перепутали ruff.toml и pyproject.toml

  • Вы почти ничего не включили: select = ["E4", "E7", "E9", "F"]

  • Методы вида def generate_structure(self): – не будут по дефолту проверяться mypy, потому что у них нет аннотаций (можно включить --check-untyped-defs

Есть еще множество ошибок, но мне лень разбирать дальше. В качестве вдохновения советую глянуть: https://github.com/wemake-services/wemake-python-styleguide

Добрый день! Спасибо за вопрос, очень интересно. Кажется, что нельзя; по крайней мере я сходу не могу придумать.

Нет, потому что уже большая кодовая база на С, многие авторы не знают C++. Сейчас код очень простой и понятный, введение C++ его усложнит, но не очень понимаю, какие плюсы (!) добавит.

Спасибо за развернутую обратную связь!

Ответ тянет на полноценную статью :)

Просто нужно рассказать про:

  • Возможность отключать gc

  • ob_refcnt в 3.13 с free-threading

  • Историю вопроса

  • Встраиваемые версии Python

  • Скорость работы

На ютюбе такого много, например: https://www.youtube.com/watch?v=LLq7oQOIJZQ&list=PLbr8rVGhPD0WQgO97Ao67Q-QVuSbm_Zpz&index=4&t=971s А на хабре с каждым годом все меньше, потому что сложно продвигать такой контент.

Пользуйтесь `flake8`: flake8.codes/WPS419

Плагины, которые такое проверяют:
github.com/wemake-services/wemake-python-styleguide
github.com/PyCQA/flake8-bugbear `B012`
Данная статья будет неполной без упоминания, что в Питоне тоже есть `Result`, `Maybe` и тд.
И типизация замечательно работает: github.com/dry-python/returns
Не нужно таким людей пугать. Тем более на собеседованиях.
Нужно использовать хороший статический анализатор, который не допустит ни одной ситуации из списка: github.com/wemake-services/wemake-python-styleguide

Информация

В рейтинге
1 345-й
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность