Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PyRe: еще один type checker

PyRe: еще один type checker

Григорий Петров (Технический евангелист Voximplant и MoscowPython) @ Moscow Python Meetup 58

"Этот доклад — обзор новой утилиты для проверки типов в Python, сделанной и продвигаемой Facebook. Зачем им понадобилась еще одна программа при имеющейся mypy, чем они отличаются друг от друга и насколько удобнее (или нет?) стала поддержка опциональной типизации с момента ее релиза в конце 2015 года для Python 3.5".

Видео: http://www.moscowpython.ru/meetup/58/pyre-type-checker/

Moscow Python Meetup
PRO

July 20, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Pyre: еще один type checker
    https://twitter.com/grigoryvp
    Moscow Python Meetup, Moscow, 2018.07.20
    Григорий Петров
    Voximplant

    View Slide

  2. Что сейчас будет?
    Рассказывает Григорий Петров
    Специализация Руководство разработкой
    Чем занимается DevRel (Технический евангелист)
    Опыт Более 15 лет
    Время выступления 20 минут
    Вопросы В конце выступления, до 10 минут
    Twitter https://twitter.com/grigoryvp

    View Slide

  3. 3 года назад в Python 3.5 завезли типы
    Зачем?

    View Slide

  4. Проблема сложности
    Кошелек Миллера ограничивает наше внимание цифрой 5.
    Мы пишем код, держа в фокусе внимания не более 5 штук.
    Ожидая, как будут работать остальные 10'000 строк кода.
    Разница между нашими ожиданиями и выполнением - ошибки.

    View Slide

  5. Мы пишем код через замочную скважину

    View Slide

  6. Есть разные способы борьбы с ошибками

    View Slide

  7. Есть разные способы борьбы с ошибками
    - Запустил - Заплакал - Зачинил

    View Slide

  8. Есть разные способы борьбы с ошибками
    - Запустил - Заплакал - Зачинил
    - Правильная архитектура "больше 5 не собираемся"

    View Slide

  9. Есть разные способы борьбы с ошибками
    - Запустил - Заплакал - Зачинил
    - Правильная архитектура "больше 5 не собираемся"
    - Линтеры

    View Slide

  10. Есть разные способы борьбы с ошибками
    - Запустил - Заплакал - Зачинил
    - Правильная архитектура "больше 5 не собираемся"
    - Линтеры
    - Приносят больше всего пользы во время написания кода

    View Slide

  11. Есть разные способы борьбы с ошибками
    - Запустил - Заплакал - Зачинил
    - Правильная архитектура "больше 5 не собираемся"
    - Линтеры
    - Приносят больше всего пользы во время написания кода
    - pylint, flake8

    View Slide

  12. Есть разные способы борьбы с ошибками
    - Запустил - Заплакал - Зачинил
    - Правильная архитектура "больше 5 не собираемся"
    - Линтеры
    - Приносят больше всего пользы во время написания кода
    - pylint, flake8
    - Пытаются угадать, что мы имели в виду

    View Slide

  13. Есть разные способы борьбы с ошибками
    - Запустил - Заплакал - Зачинил
    - Правильная архитектура "больше 5 не собираемся"
    - Линтеры
    - Приносят больше всего пользы во время написания кода
    - pylint, flake8
    - Пытаются угадать, что мы имели в виду
    - С помощью типов мы можем прямо об этом сказать

    View Slide

  14. Типы
    Ловушки для ошибок, которые мы расставляем, пока пишем код через
    замочную скважину нашего внимания.

    View Slide

  15. Типы
    Ловушки для ошибок, которые мы расставляем, пока пишем код через
    замочную скважину нашего внимания.
    Ловушка срабатывает через полчаса, неделю или год, когда мы уже забыли
    про то место, где ее поставили.

    View Slide

  16. Типы
    Ловушки для ошибок, которые мы расставляем, пока пишем код через
    замочную скважину нашего внимания.
    Ловушка срабатывает через полчаса, неделю или год, когда мы уже забыли
    про то место, где ее поставили.
    Type Checker обеспечивает срабатывание ловушек.

    View Slide

  17. Кто проверяет типы в Python?

    View Slide

  18. Кто проверяет типы в Python?
    - mypy, приложение и интеграция в IDE

    View Slide

  19. Кто проверяет типы в Python?
    - mypy, приложение и интеграция в IDE
    - PyCharm встроенный type checker

    View Slide

  20. Кто проверяет типы в Python?
    - mypy, приложение и интеграция в IDE
    - PyCharm встроенный type checker
    - pylint, "мы обязательно это сделаем! но времени нету :("

    View Slide

  21. Кто проверяет типы в Python?
    - mypy, приложение и интеграция в IDE
    - PyCharm встроенный type checker
    - pylint, "мы обязательно это сделаем! но времени нету :("
    - pytype от Google, "сделаем mypy для кода без типов"

    View Slide

  22. Кто проверяет типы в Python?
    - mypy, приложение и интеграция в IDE
    - PyCharm встроенный type checker
    - pylint, "мы обязательно это сделаем! но времени нету :("
    - pytype от Google, "сделаем mypy для кода без типов"
    - Pyre от Facebook

    View Slide

  23. Кто проверяет типы в Python?
    - mypy, приложение и интеграция в IDE
    - PyCharm встроенный type checker
    - pylint, "мы обязательно это сделаем! но времени нету :("
    - pytype от Google, "сделаем mypy для кода без типов"
    - Pyre от Facebook
    - От создателей "hack" для PHP

    View Slide

  24. Кто проверяет типы в Python?
    - mypy, приложение и интеграция в IDE
    - PyCharm встроенный type checker
    - pylint, "мы обязательно это сделаем! но времени нету :("
    - pytype от Google, "сделаем mypy для кода без типов"
    - Pyre от Facebook
    - От создателей "hack" для PHP
    - OCaml, параллелизм

    View Slide

  25. Зачем еще один Type Checker?

    View Slide

  26. Зачем еще один Type Checker?
    - Быстрая проверка при изменении кода (incremental mode)

    View Slide

  27. Зачем еще один Type Checker?
    - Быстрая проверка при изменении кода (incremental mode)
    - Работа с большими объемами кода (миллионы строк)

    View Slide

  28. Зачем еще один Type Checker?
    - Быстрая проверка при изменении кода (incremental mode)
    - Работа с большими объемами кода (миллионы строк)
    - Интеграция в редакторы "из коробки"

    View Slide

  29. Интеграция в редакторы и IDE

    View Slide

  30. Интеграция в редакторы и IDE
    LSP, "Language Server Protocol", создан MS, чтобы добавить TypeScript
    не только в VSCode, но и в другие популярные редакторы и IDE.

    View Slide

  31. Интеграция в редакторы и IDE
    LSP, "Language Server Protocol", создан MS, чтобы добавить TypeScript
    не только в VSCode, но и в другие популярные редакторы и IDE.
    Расширение к VSCode запускает "language server" процесс и общается с ним
    (по stdio, сокетам или еще как).

    View Slide

  32. Интеграция в редакторы и IDE
    LSP, "Language Server Protocol", создан MS, чтобы добавить TypeScript
    не только в VSCode, но и в другие популярные редакторы и IDE.
    Расширение к VSCode запускает "language server" процесс и общается с ним
    (по stdio, сокетам или еще как).
    VSCode передает информацию о файлах и их изменениях, language server
    передает информацию об автокомплите, go to definition и ошибках в коде.

    View Slide

  33. Интеграция в редакторы и IDE
    LSP, "Language Server Protocol", создан MS, чтобы добавить TypeScript
    не только в VSCode, но и в другие популярные редакторы и IDE.
    Расширение к VSCode запускает "language server" процесс и общается с ним
    (по stdio, сокетам или еще как).
    VSCode передает информацию о файлах и их изменениях, language server
    передает информацию об автокомплите, go to definition и ошибках в коде.
    Pyre "из коробки" умеет LSP.

    View Slide

  34. LSP - это киллер фича?
    Проверка типов встроена в PyCharm от рождения.
    Пока Facebook пилила Pyre, в mypy добавили поддержку LSP,
    https://microsoft.github.io/language-server-protocol/implementors/servers/

    View Slide

  35. Может, киллер фича - это скорость?
    PyCharm от рождения проверяет типы в инкрементальном режиме.
    Пока Facebook пилила Pyre, в mypy добавили инкрементальный режим.

    View Slide

  36. А в остальном Type Checker'ы очень похожи

    View Slide

  37. А в остальном Type Checker'ы очень похожи
    Репозиторий typeshed для типов стандартных библиотек.

    View Slide

  38. А в остальном Type Checker'ы очень похожи
    Репозиторий typeshed для типов стандартных библиотек.
    Файлы с расширением .pyi для указания типов в чужом коде.

    View Slide

  39. А в остальном Type Checker'ы очень похожи
    Репозиторий typeshed для типов стандартных библиотек.
    Файлы с расширением .pyi для указания типов в чужом коде.
    Настраиваемые через специальные комментарии режимы проверки.

    View Slide

  40. А в остальном Type Checker'ы очень похожи
    Репозиторий typeshed для типов стандартных библиотек.
    Файлы с расширением .pyi для указания типов в чужом коде.
    Настраиваемые через специальные комментарии режимы проверки.
    Немного по-разному относятся к тому, что считать "ошибкой".

    View Slide

  41. Что можно сказать про Pyre?

    View Slide

  42. Что можно сказать про Pyre?
    Не работает под Windows. Можно заставить через WSL, но реализация
    language server сойдет с ума от разных путей к файлам.

    View Slide

  43. Что можно сказать про Pyre?
    Не работает под Windows. Можно заставить через WSL, но реализация
    language server сойдет с ума от разных путей к файлам.
    Работает только с Python 3.5 или выше.

    View Slide

  44. Что можно сказать про Pyre?
    Не работает под Windows. Можно заставить через WSL, но реализация
    language server сойдет с ума от разных путей к файлам.
    Работает только с Python 3.5 или выше.
    Обижается на relative imports.

    View Slide

  45. Что можно сказать про Pyre?
    Не работает под Windows. Можно заставить через WSL, но реализация
    language server сойдет с ума от разных путей к файлам.
    Работает только с Python 3.5 или выше.
    Обижается на relative imports.
    Реализация Language Server крешится при запросе hover.

    View Slide

  46. Выводы
    Language Server Protocol - это круто.

    View Slide

  47. Выводы
    Language Server Protocol - это круто.
    Разные Type Checker'ы по-разному относятся к тому, что считать ошибкой.
    Если вы попробовали два-три года назад и "не зашло", то самое время
    посмотреть какие еще есть.

    View Slide

  48. Выводы
    Language Server Protocol - это круто.
    Разные Type Checker'ы по-разному относятся к тому, что считать ошибкой.
    Если вы попробовали два-три года назад и "не зашло", то самое время
    посмотреть какие еще есть.
    Попробуйте использовать типы при написании нового кода. Расставьте себе
    немного ловушек и оцените, насколько часто они будут срабатывать!

    View Slide

  49. Вопросы?
    Григорий Петров
    [email protected]
    https://twitter.com/grigoryvp
    https://facebook.com/grigoryvp
    Это всё!

    View Slide