LINUX.ORG.RU

Вышел Mypy 0.4

 ,


2

2

5 мая тихо и незаметно вышел Mypy 0.4. Mypy — это экспериментальный статический тайпчекер, проверяющий программы на Python 2 или Python 3, аннотированные в соответствии с PEP 484. Деятельное участие участие в разработке Mypy принимает Dropbox (в частности, над проектом работает Гвидо ван Россум).

Новое в Mypy 0.4:

>>> Подробности

Еще добавлю, что Mypy - не единственный статический тайпчекер для Python, есть еще что-то от Google (полагаю, что это PySonar2).

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

А сам Python не обновлялся с декабря, и следующие обновления ожидаются только в июне. В то время как Perl 5/6 и Ruby уже обновились по нескольку раз.

saahriktu ★★★ ()
Ответ на: комментарий от saahriktu

А сам Python не обновлялся с декабря

Потому что разрабы ответственно относятся к работе.

Perl 5/6 и Ruby

Штоэто? Впрочем, не отвечай - понятно, что это что-то ненужное и оффтопик.

tailgunner ★★★★★ ()

Статическая типизация без вывода типов нинужна же.

anonymous ()

Ну и какой смысл был в динамической типизации, чтобы потом скотчем прикручивать вот это все?

Im_not_a_robot ()
Ответ на: комментарий от anonymous

Хотя это я что-то загнул. Пока в библиотеках ничего не аннотировано, польза от этого тайпчекера в принципе стремится к нулю.

anonymous ()
Ответ на: комментарий от Im_not_a_robot

Ну и какой смысл был в динамической типизации

Такой же, как и всегда - она удобнее для быстрого прототипирования и скриптухи.

anonymous ()
Ответ на: комментарий от anonymous

Мне кажется, ты не читал новость. Или пропустил упоминание typeshed.

tailgunner ★★★★★ ()
Ответ на: комментарий от Im_not_a_robot

Ну и какой смысл был в динамической типизации

Никакого. И никогда не было.

tailgunner ★★★★★ ()
Ответ на: комментарий от Im_not_a_robot

Чтобы легко и ненапряжно захватить мир. А как было заставить быдлокодеров полюбить ЯП и подсесть на него, если бы нужно было типы придумывать да расставлять?

Virtuos86 ★★★★★ ()

typeshed
.pyi

Это что-то типа заголовочных файлов что ли?

Virtuos86 ★★★★★ ()
Ответ на: комментарий от tailgunner

typeshed

Набор всё равно не очень впечатляющий.

Объясни, плиз, ещё одну вещь - как я понимаю, аннотируются только функции, а для переменных используется вывод типов, или как?

anonymous ()
Ответ на: комментарий от anonymous

Набор всё равно не очень впечатляющий.

Да. Но общее место для хранения аннотаций есть, и если они нужны сообществу - они будут. А если не нужны... печально.

как я понимаю, аннотируются только функции, а для переменных используется вывод типов, или как?

Переменные тоже можно аннотировать. Если они не аннотированы, тип выводится.

tailgunner ★★★★★ ()
Ответ на: комментарий от Virtuos86

как было заставить быдлокодеров полюбить ЯП и подсесть на него, если бы нужно было типы придумывать да расставлять?

Но ведь динамический яп эту «проблему» никак не решает...

true_admin ★★★★★ ()
Ответ на: комментарий от Virtuos86

типы придумывать

нужно даже при динамической типизации.

типы расставлять

в наш просвещённый век необязательно даже во всяких крестах.

anonymous ()
Ответ на: комментарий от anonymous

Объясни, плиз, ещё одну вещь - как я понимаю, аннотируются только функции, а для переменных используется вывод типов, или как?

Сходить по ссылке на PEP 484 и просветиться никак?

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Virtuos86

Сходить по ссылке на PEP 484 и просветиться никак?

Я читал этот PEP, ещё когда про этот тайпчекер на ЛОРе ещё никто не писал. И если бы ты сходил и просветился, то знал бы, что про аннотации переменных там ничего нет, и вообще описывается только синтаксис.

anonymous ()
Ответ на: комментарий от tailgunner

Есть

Ну ладно, есть. Я читал упрощённую версию и не обратил внимания. Впрочем, с первого взгляда кажется, что лучше бы и дальше не обращал - ужос какой-то.

anonymous ()

смешные вы питонополонники. берете динамическийтипизированный ЯП и пишете всякие костыли для проверки типов.

а могли бы использовать Go. тогда и костыли в виде этого вашего Mypy не нужны были бы.

anonymous ()
Ответ на: комментарий от anonymous

пишете всякие костыли для проверки типов
а могли бы использовать Go

Потому что свои костыли умеют в генерики и перегрузку операторов, а эти ваши говна - нет.

anonymous ()

Интересная новость. Вижу эту муру первый раз в жизни.

Vudod ★★★★★ ()
Ответ на: комментарий от anonymous

Ответ на: комментарий от Virtuos86 11.05.2016 10:56:34

Сходить по ссылке на PEP 484 и просветиться никак?

Я читал этот PEP, ещё когда про этот тайпчекер на ЛОРе ещё никто не писал. И если бы ты сходил и просветился, то знал бы, что про аннотации переменных там ничего нет, и вообще описывается только синтаксис.

anonymous (11.05.2016 11:06:14)

про аннотации переменных там ничего нет

Есть: https://www.python.org/dev/peps/pep-0484/#type-comments

tailgunner ★★★★★ (11.05.2016 11:09:30)

Смешно получилось, да? Я именно этот параграф PEP'а имел в виду.

Virtuos86 ★★★★★ ()

В очередной раз с надеждой попробовал это чудо:

  • aiohttp, flask и django не умеет;
  • tornado, redis, sqlalchemy умеет только частично и только с python 2;
  • async/await не умеет.

В общем даже typescript как-то лучше выглядит.

holuiitipun ()
Ответ на: комментарий от holuiitipun

Что заставило тебя подумать, что он может уметь flask и django?

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Что заставило тебя подумать, что он может уметь flask и django?

То что из коробки не умеет это понятно, стабов нет.

Но тут даже генерилка стабов не корректно работает. Хотя должна как минимум генерить все с Any.

holuiitipun ()
Последнее исправление: holuiitipun (всего исправлений: 1)
Ответ на: комментарий от Virtuos86

Я именно этот параграф PEP'а имел в виду.

Я написал, что давно читал. Впрочем, у моего вопроса была вторая часть:

а для переменных используется вывод типов, или как?

И на неё PEP никак не отвечает.

Смешно получилось, да?

Получилось, что время идёт, а парень с поездом на аве всё никак не научится в сложные предложения. Смешно? Не знаю.

anonymous ()
Ответ на: комментарий от holuiitipun

То что из коробки не умеет это понятно

Не из коробки тоже может не суметь. Да и в Django, AFAIK, уже используются аннотации, причём как-то по-извращенски.

anonymous ()
Ответ на: комментарий от holuiitipun

Да ладно


def get(fn):
    if os.path.exists(fn):
       try:
          return open(fn, 'r').read()
       except:
          pass
    return None

Ну и какой тип у функции?

dmxrand ()
Ответ на: комментарий от Im_not_a_robot

Так у нас или динамическая типизация или сотни перегруженных функций и велосипеды с списками которые могут хранить ЛЮБОЙ тип и даже в одном списке разные. Отсюда всякие веселые RTTI бешеное количество интерфейсов и шаблонов. Это было хорошо у метакласса.

dmxrand ()
Ответ на: комментарий от anonymous

Давайте не будем считать Джангу совершенством. Я еще года 4-5 назад за свои посты с критикой джанги отгреб. А тут нате... Прозрел пипл.

dmxrand ()
Ответ на: комментарий от tailgunner

read это или string или byteкак там в 3-м.

Но это не сишный Int. Тут None это null. Я конечно не большой спец, но выводилка такого - это уже сложно.

dmxrand ()

Ну и динамик хейтерам: http://metaclass.livejournal.com/735575.html

И обратите внимание почти во ВСЕХ статически типизированных языках народ все равно педалирует динамику (от ссылочных типов, до dynamic http://metaclass.livejournal.com/851348.html)

Так, что почемуб если кто то в статику педалирует динамику не сделать обратно...

dmxrand ()
Ответ на: комментарий от dmxrand

Пусть Union[buffer, NoneType], не принципиально. И вывести это не трудно (хотя, наверное, есть и сложные случаи, но их можно разруливать аннотациями переменных).

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от anonymous

Получилось, что время идёт, а парень с поездом на аве всё никак не научится в сложные предложения. Смешно? Не знаю.

ОК, а когда ты научишься находить ответы на свои вопросы сам? Потенциал-то есть, вон, PEP'ы самостоятельно изучаешь. Не ровен час, скормят тебе дезу на голубом глазу.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от tailgunner

ну как пример которого делать не надо - это exec. Я к чему. Для динамических языков мы не можем гарантировать 100% вывод. Если аффтар аннотировал свой код, то да - это хорошо. Но и в статике. Я в 90-х читал на экране выхлоп FoxPro, чтонибудь из серии file not found (это понять можно), а если я сейчас читаю выхлоп C# поделия. С СТАТИКОЙ library xyz.dll cant be loaded. Оно конечно статика прямо помогает шо аж я рад...

dmxrand ()
Ответ на: комментарий от dmxrand

Для динамических языков мы не можем гарантировать 100%

Можем. Другое дело, что это может не окупиться, но мы можем.

я сейчас читаю выхлоп C# поделия. С СТАТИКОЙ library xyz.dll cant be loaded. Оно конечно статика прямо помогает шо аж я рад...

И претензия твоя к статике... в чем?

tailgunner ★★★★★ ()
Ответ на: комментарий от dmxrand

Ну и какой тип у функции?

Да хоть `(Any) -> Any`, генерилка для flask и django создает стабы с которыми mypy тупо не идет дальше импортов?

holuiitipun ()
Ответ на: комментарий от tailgunner

И претензия твоя к статике... в чем?

А в том, что я за 16 лет программирования на динамике читаю, что статика это панацея, но вижу падающие C++ (кстати редко), Delphi, C# приложения с ошибками типа тайп кастинг эррор или еще что. Или просто нет файла или нет сети - это никак не относится к типизации. При этом я написал код на Python за 2 дня и он пашет, а переписывал его на C# недели три. И я проклял эти перегрузки и прочее. Хотя можно возразить - что причина во мне. Но статическая типизация это не панацея. Скорее вам отрубили руки и ноги и вы теперь должны описать на чем вы передвигаетесь.

dmxrand ()
Ответ на: комментарий от holuiitipun

Еще раз для тех, кто в танке - телепаты в отпуске. Генерилка не влезет в мозг разрабу

dmxrand ()
Ответ на: комментарий от tailgunner

Кстати одни из первых подвижек к статике это маркировка данных пришедших с экстернал в перле.

dmxrand ()
Ответ на: комментарий от dmxrand

Еще раз для тех, кто в танке - телепаты в отпуске. Генерилка не влезет в мозг разрабу

Для тех кто не читает, мне достаточно если она везде Any (любой тип, без проверки) поставит и тайпчекаться будет только код, где я сам аннотации проставлю.

holuiitipun ()
Ответ на: комментарий от holuiitipun

Так чего споришь? Тебе и говорят, что она ПЫТАЕТСЯ вывести строгий тип. Ну ошибается. Может при вероятности вывода меньше 80% ее надо ограничить?

dmxrand ()
Ответ на: комментарий от dmxrand

Я про другое, оно генерирует не стабы с неправильными типами, а не работающие стабы, при использовании которых mypy вылетает с чем-то таким:

Module has no attribute '_ctx'
holuiitipun ()
Ответ на: комментарий от holuiitipun

Этой хрени сколько лет? У меня Оракл постоянно срется что tnsnames.ora нет. А Это 70 какого, то года СУБД

dmxrand ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.