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

July 20, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Что сейчас будет? Рассказывает Григорий Петров Специализация Руководство разработкой Чем

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

    пишем код, держа в фокусе внимания не более 5 штук. Ожидая, как будут работать остальные 10'000 строк кода. Разница между нашими ожиданиями и выполнением - ошибки.
  3. Есть разные способы борьбы с ошибками - Запустил - Заплакал

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

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

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

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

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

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

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

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

    через замочную скважину нашего внимания. Ловушка срабатывает через полчаса, неделю или год, когда мы уже забыли про то место, где ее поставили. Type Checker обеспечивает срабатывание ловушек.
  12. Кто проверяет типы в Python? - mypy, приложение и интеграция

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

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

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

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

    в IDE - PyCharm встроенный type checker - pylint, "мы обязательно это сделаем! но времени нету :(" - pytype от Google, "сделаем mypy для кода без типов" - Pyre от Facebook - От создателей "hack" для PHP - OCaml, параллелизм
  17. Зачем еще один Type Checker? - Быстрая проверка при изменении

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

    кода (incremental mode) - Работа с большими объемами кода (миллионы строк) - Интеграция в редакторы "из коробки"
  19. Интеграция в редакторы и IDE LSP, "Language Server Protocol", создан

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

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

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

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

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

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

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

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

    типов стандартных библиотек. Файлы с расширением .pyi для указания типов в чужом коде. Настраиваемые через специальные комментарии режимы проверки. Немного по-разному относятся к тому, что считать "ошибкой".
  28. Что можно сказать про Pyre? Не работает под Windows. Можно

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

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

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

    заставить через WSL, но реализация language server сойдет с ума от разных путей к файлам. Работает только с Python 3.5 или выше. Обижается на relative imports. Реализация Language Server крешится при запросе hover.
  32. Выводы Language Server Protocol - это круто. Разные Type Checker'ы

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

    по-разному относятся к тому, что считать ошибкой. Если вы попробовали два-три года назад и "не зашло", то самое время посмотреть какие еще есть. Попробуйте использовать типы при написании нового кода. Расставьте себе немного ловушек и оцените, насколько часто они будут срабатывать!