LINUX.ORG.RU

Объектная модель питона

 , ,


2

4

- Сколько нужно архитекторов, чтобы создать язык программирования?
- Сто. Один будет писать язык, а 99 - говорить, что могут сделать лучше.

Так скажем, я решил вспомнить обсуждение по теме треда: Generics в Python или помогите победить mypy

Да, наркоманский питон захватывает мир, и с этим нужно что-то делать. Нет, я не намерен делать питон 4 - я вижу свет в конце тоннеля в рамках третьей версии. Но мне нужна ваша помощь: какие фундаментальные фичи, по-вашему, в питоне вообще не нужны, а какие - должны быть переработаны?

Прежде всего, я хотел бы вспомнить про RPython ( https://rpython.readthedocs.io/en/latest/rpython.html ).
Смысл особенностей языка прост - поддержка вывода типов. В частности, из языка убраны динамические определения классов и функций, динамическая типизация переменных, глобальные переменные стали константами, функции-генераторы транслируются в классы-итераторы и потеряли большую часть своих фич. У RPython есть большой минус - эти его ограничения сильно раздувают код, затрудняют писание и читание.
Итак, мои соображения:

1. Множественное наследование. Его нет даже на уровне C-функций в реализации питона и API расширений. «Но как же интерфейсы?» - возразите вы. Интерфейсы в C++ и Java нужны в роли объявления протоколов вызова методов объекта с целью последующей статической проверки этих протоколов при компиляции, а также для формирования таблиц методов, которые можно использовать независимо от объекта во время выполнения. Эти роли полностью потеряны в питоне, потому нет никакого оправдания их существованию. Мне нравится то, как сделаны интерфейсы в Go - это очень похоже на питоновые ABC: https://www.python.org/dev/peps/pep-3119

2. Генераторы - зло. Это прямо-таки запущенный случай GoTo, когда выполнение не просто бесконтрольно прыгает по коду - оно прыгает по стэкам. Особенно лютая дичь происходит, когда генераторы пересекаются с менеджерами контекста (привет PEP 567). В треде, скорее всего, опишу веселости реализации генераторов в PyPy/RPython. В питоне есть общая тенденция запутывать приложение в тесный клубок связанных изменяемых состояний, что не дает возможности параллелить и оптимизировать выполнение программы, а генераторы - вишенка на этом торте.

3. Изменение классов для существующих экземпляров объектов. Не, я понимаю, что класс в питоне объявляется во время выполнения. Но, блин, зачем в него совать изменяемые переменные? Зачем в старые объекты добавлять новые методы? Причем, попрошу обратить внимание на то, как нужно нагибаться раком для того, чтобы добавить аналогичные методы в сам объект, а не в класс - для этого нужны types.MethodType, function.__get__, functools.partial, и так далее. Методы в питоне вообще понадобились по простой причине - гвидо не придумал других способов сделать короткие имена функций (чтобы не было gtk_button_set_focus_on_click), поскольку не ясно, как выбирать из кучи похожих функций с коротким именем нужную под этот конкретный объект. Так в питоне появились len, iter, next, isinstance, slice, dict, dir, str, repr, hash, type - сейчас это обертки над соответствующими методами классов с подчеркиваниями в имени, а когда-то встроенные простые типы не являлись классами и работали только через эти функции. Так-то, я не вижу особой разницы между записью method(object) и object.method - особенно если method является статичной функцией, которой, в общем-то, все равно, какой первый аргумент (self) принимать.

Вот. Прошу дополнять. Да, я знаю, что у питона основные проблемы две: отсутствие статической типизации и многопоточности - но это черезчур абстрактные требования. К тому же, Javascript безо всяких типизаций достиг производительности Java, при том, что жавамакакам постоянно приходится гнуться под язык, а JS-кодеры испытывают удовольствие от говнокодинга.

★★★★
Ответ на: комментарий от Liz812

Справедливости ради, в том примере (10 урлов, 10 потоков), что приводила ты — одно и то же, ибо при io гил так же преехватится и потоки будут делать запрос практически одновременно, ведь с сетью работает ядро. Но в любом случае — да, потоки в питоне — фейк.

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

Ядер много, на дворе 16-ядерные процы с гипертредингом на десктопе. Это если не вспоминать про всякие тредрипперы, где ядре уже 32 (и скоро 64). Чего там на серверах мне уже даже не интересно, ведь чтобы утилизировать не самый свежий Xeon Gold мне приходится запускать одно приложение в нескольких контейнерах отлючая отдельные компоненты. И нет, у меня не рога и копыта, сервер исключительно моё приложение крутит, БД, Кролик и прочее крутятся на отдельном железе.

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

2020 на носу, «гендер — социальный конструкт», все дела. Ты отстал от жизни. Говорит, что баба, значит баба, и не важно какой длины у неё борода.

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

Ты отстал от жизни.

Не, я просто не из этих самых

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

Отрицание одного социального конструкта путем навешивания на себя другого - это как в целях профилактики ВИЧ подцепить сифилис.

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

Нет, это я понял.

Отрицание одного социального конструкта путем навешивания на себя другого

что есть один социальный конструкт и что есть другой?

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

И баба, и мужик в отрыве от половых признаков суть есть социальные конструкты, которые определяют их поведение. Грубо говоря, если бородатый дядька лупит жену, пьет пиво и перебирает в гараже рыболовные снасти - это традиционная ролевая модель, если готовит ужин, ходит на балет и смотрит мультики про розовых пони - нет. Ради бога, собственно, но когда они самоидентифицируют себя как мужчину или женщину, они сами же на себя навешивают определенный ярлык, что в случае ортодоксального мужика в семейниках еще может быть естественно, а в остальных уже странно, ведь если ты признаешь право отойти от принятой модели поведения, то должен понимать и всю нелепость высказываний «я мужчина», «я женщина», «я хоббит». В таком случае каждый из нас просто человек, ни больше, ни меньше.

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

отойти от принятой модели поведения

Собственно, а кем принятой? Что выделяет эту модель среди прочих? Почему, отказываясь от каких то заскорузлых понятий я также должен отказаться от всем понятных обозначений?

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

Собственно, а кем принятой?

Обществом.

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

Потому что глупо, отказываясь от заскорузлых понятий, заменять одни условности другими, а без привязки к ожидаемому поведению определения женщины и мужчины теряют любой смысл, кроме физиологического.

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

ожидаемому поведению

Опять же, кем ожидаемому? Почему чьи то ожидания должны как то на меня влиять?

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

Ты упускаешь один момент - как в анекдоте - «я всегда о них думаю». «сильная половая конституция», например, от социума не зависит.

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