LINUX.ORG.RU

Почему PHP7 быстрее чем Python3?

 , , ,


2

3

Раньше было же наоборот когда PHP был на 5 версии? Есть ли смысл дальше учить Python для веба? Сейчас последние годы замечаю Django/Flask не очень активны в отличии от других технологий как Node.js, PHP/Laravel. Python в основном зациклился в машин лёрнинг.

UPD. Быстрее я имел ввиду производительнее. JS для ноды конечно круто, но беспорядочный синтаксис js не нравится в нём писать, и c php тоже такая проблема. Но как бы они есть, как laravel и nodejs. Их производительность намного превосходит чем питон.

Deleted

Последнее исправление: Deleted (всего исправлений: 4)
Ответ на: комментарий от no-such-file

Так этот объект не для того чтобы делать замыкания, а для того чтобы их ковырять - менять область связывания. Я с ходу чёт не припомню есть ли вообще такое в питоне.

Есть. Называется «явная передача аргумента конструктору класса». Собсна, то же самое, что и в PHP, только никто это замыканием не пытается называть.

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

Это вообще две не связанные друг с другом вещи.

Я просто писал о том, что ты приводил в пример совершенно мертвого языка (диалекта) в оправдание того, что якобы «пхп - он как лисп».

Они там есть в исключительно учебных целях. Поэтому совершенно не практичны. Тут один чувак недавно негодовал про a[100500]=42 которое не работает в питоне, и про кортежи которые вообще бесполезны.

Настолько бесполезны, что используются при вызове каждой функции. И кстати да, я неправ, потому что к 2015 году в PHP таки завезли типы.

Похожие на питон классы были в php 4, но их давно закопали и забыли, ибо страшный костыль.

Да, потому что без функций первого класса тяжело делать униформный доступ к полям объекта. Как бы они и в пятерке были костылем, просто костыль сделали по-другому, с мягкой подушечкой.

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

никто это замыканием не пытается называть

Потому что это не через замыкания сделано, а явно, параметром.

Настолько бесполезны, что используются при вызове каждой функции

А что нельзя использовать для этого списки? Иммутабельность к матчингу результатов не имеет вообще никакого отношения и отлично работает на списках/массивах в т.ч. в js и пыхе. Кортежи - совершенно ненужный тип данных введённый просто для иллюстрации иммутабельности, которая в питоне нахрен никому не упёрлась.

Да, потому что

Нет, закопали потому что public/private/static было через жопу. Ну как сейчас в питоне.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Питон, внезапно, дает возможность строить разные модели обработки запросов

Пых, внезапно тоже. И что?

Не пых, а расширения, которые убирают пых от важных функций, и за счет этого позволяют в самых оптимальных сценариях прямого доступа получать производительность, сравнимую с производительностью си. Потому что это и есть си, эдакая каша из топора: чтобы написать хороший сервер PHP, нужно взять PHP, построить вокруг него высокопроизводительный сервер на C, выкинуть оттуда PHP - пользоваться.
В отличие от питона, у которого, например, asyncio - это полностью питоновая библиотека: https://github.com/python/cpython/tree/master/Lib/asyncio .

https://www.techempower.com/benchmarks/ Четвертый по скорости php. Лучший питон на 107 месте.

Ты хоть эти бенчмарки смотрел полностью вообще? Можешь тогда мне объяснить, почему на «JSON serialization» PyPy и PHP идут ноздря в ноздрю, а на «Plain Text» PyPy уделывает пых в хлам?
Тут вон ребята месяц сидели и пытались придумать, как заставить swoole работать быстро на тестах, а то не получалось, особенно на постгресе беда получалась: https://github.com/swoole/swoole-src/issues/1594
Причем, почему-то самые быстрые питоны работали именно с постгресом, а не мускулем хотя всем давно известно, что MySQL работает быстрее базы данных.
По крайней мере, теперь-то я знаю, что если тесты производительности станут моими клиентами, то я буду обслуживать их на PHP.

byko3y ★★★★
()
Ответ на: комментарий от no-such-file

Потому что это не через замыкания сделано, а явно, параметром.

Я тебе напомню, что я изначался пытался пояснить, что в PHP нет функций первого класса. Я совершенно согласен, что это не через замыкание сделано.

Нет, закопали потому что public/private/static было через жопу. Ну как сейчас в питоне.

public/private - это тупо комментарий «можно использовать»/«не используй», никакой более пользы разрабу они не несут. В PHP в них есть необходимость, потому что у тебя единый неймспейс и убогие типы - private тупо позволяет неймспейс разгрузить. Static нужно в PHP потому, что методы класса являются не тем же самым, что и просто функция. В питоне для этих целей можно использовать просто функцию, потому как все функции одинаковы и полноправны.
То есть, это опять рассказы про то, что «у вашего питона таких костылей нет, а у нашего пыха - есть».

Иммутабельность к матчингу результатов не имеет вообще никакого отношения и отлично работает на списках/массивах в т.ч. в js и пыхе. Кортежи - совершенно ненужный тип данных введённый просто для иллюстрации иммутабельности, которая в питоне нахрен никому не упёрлась.

Кортежи работают быстрее и имеют особую обработку, по крайней мере мелкие. Крупные - да, как обычные массивы работают.

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

В отличие от питона

Что за странная привычка спорить, вообще не разбираясь в вопросе? В пыхе нет никакого отличия от питона, точно такие же привязки к libev/uv. Вот что async/await это минус, но при нормальном ООП терпимый.

Можешь тогда мне объяснить

Потому что в этом тесте многое зависит от настроек. Вообще пых обычно не отдаёт статику, для этого nginx есть, но видимо это было бы читом в контексте соревнования.

no-such-file ★★★★★
()
Ответ на: комментарий от byko3y

Я тебе напомню, что я изначался пытался пояснить, что в PHP нет функций первого класса

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

public/private - это тупо комментарий «можно использовать»/«не используй»

И что, это наверное «нинужна» да? Потому что в питоне нету. И что значит «можно»? Ну сделай мне в питоне такое.

В PHP в них есть необходимость, потому что у тебя единый неймспейс и убогие типы - private тупо позволяет неймспейс разгрузить

Нет, оно не про это.

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

Не можно, а приходится.

Кортежи работают быстрее и имеют особую обработку, по крайней мере мелкие

Что мешало сделать быстрые маленькие списки?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Я тебе напомню, что я изначался пытался пояснить, что в PHP нет функций первого класса

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

Приводя в пример аналог костыля в питоне, которым, естественно, никто не пользуется, потому что в питоне есть замыкания.

И что, это наверное «нинужна» да? Потому что в питоне нету. И что значит «можно»? Ну сделай мне в питоне такое.

https://linux.die.net/diveintopython/html/object_oriented_framework/private_f... Сделал, проверяй. Но все равно не нужны. Пишу как человек, который настрадался от закрытых объявлений в миллионнике.

В PHP в них есть необходимость, потому что у тебя единый неймспейс и убогие типы - private тупо позволяет неймспейс разгрузить

Нет, оно не про это.

А вот для этого?
https://habr.com/ru/post/23268/ - А так ли нужен static?
Мне просто интересно самому. По просьбе трудящихся в питоне сделали декораторы @classmethod и @staticmethod, но у меня есть сомнения в полезности этих вещей. А ты вот вдруг сейчас блестнешь соображалкой и расскажешь, когда и зачем нужны методы класса без самого экземпляра объекта, если есть точно такие же, но с экземпляром объекта.

Кортежи работают быстрее и имеют особую обработку, по крайней мере мелкие

Что мешало сделать быстрые маленькие списки?

https://habr.com/ru/post/417783/ - Оптимизации, используемые в Python: список и кортеж
Модифицируемость же. Вон, у хаскеля горы кортежей выдаются в процессе работы, а работает шустро. При присвоении их не нужно копировать, потому что они не изменятся, у них минус один слой доступа, пустые кортежи ссылаются на единственную константу.

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

А так ли нужен static?

Вопрос из области «а так ли нужен ООП». В голанге вон ООП тоже такое себе и авторы советуют использовать свободные функции по-максимуму. Ну так как бы изначально такая концепция. А питон претендует на ООП язык, причём в классическом понимании, но при этом нет ни сообщений a la smalltalk, ни static/private/public a la java.

При присвоении их не нужно копировать, потому что они не изменятся

В нормальных языках и массивы не нужно копировать ибо COW.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Вопрос из области «а так ли нужен ООП»... А питон претендует на ООП язык, причём в классическом понимании, но при этом нет ни сообщений a la smalltalk, ни static/private/public a la java.

Да, это вопрос из области «так ли нужен ООП». Или даже скорее «нужно ли ограничивать кодера ООП?». Если в языке есть более удобные инструменты, то есть смысл пользоваться ими. В академическом мире не так давно продвигалось ООП, как панацея ото всех проблем. Сейчас помешательство спало, и мир уходит обратно в процедурное и функциональное программирование. В теории иерархия классов очень красивая и замечательно описывает задачу, на практике классы оказываются третьей ногой: https://www.reddit.com/r/ProgrammerHumor/comments/418x95/theory_vs_reality/
Отсюда и модель dispatcher, и dependency injection, и inversion of control, и многие другие, которые на самом деле решают очень простую задачу, но ООП диктует создание целой группы классов для ее решения.
В Java и C# классы - это единственный фундамент реализации, вы просто не можете создать глобальную переменную или функцию, потому static выполняет роль глобальных переменных и функций, отсюда возникают код вроде

static class Globals
    {
        // global int
        public static int counter;

        // global function
        public static string HelloWorld()
        {
            return "Hello World";
        }
    }

Но нахрена это в PHP, у которого есть глобальные функции и переменные?

В нормальных языках и массивы не нужно копировать ибо COW.

Эффективно работать с памятью намного проще, когда рантайм точно знает, что содержимое и размер памяти не будет изменен, и ему даже не нужно следить за ссылками. Вот ты берешь часть массива, что должен делать рантайм?
- оставить copy-on-write ссылку на исходный массив?
- просто скопировать часть необходимых элементов?
Прежде чем ты ответишь, я подчеркну такую особенность работы copy-on-write конкретно питона: допустим, у тебя есть две ссылки на один и тот же объект, то есть id(object1) == id(object2); ты меняешь один из объектов, object1.prop = 'asd', происходит copy-on-write; тогда id(object1) != id(object2); усложняем пример, и обе ссылки на объект находятся в ссылках на один массив, то есть a1 == a2 == [object1] == [object2]. Как теперь с ними работать? Кого копировать и когда копировать?
В кортежах этой проблемы просто нет, потому что никто не отслеживает измененность объекта, можно спокойно брать ссылки на части кортежа, причем, даже в разных потоках. Это в том числе минус один слой операций доступа и возможность плотно упаковывать кортежи в памяти, не создавая фрагментации онной.
Вообще, в питоне довольно солидное кол-во неизменяемых типов, например, строки и frozenset (неизменяемые множества). И аналогичные им изменяемые bytearray и set.
Важными эти вещи становятся, когда программа долго работает и начинает кушать много памяти, а проход сборщика мусора становится дорогостоящим. Конечно, подобной проблемы нет у PHP, и его разрабы работают над тем, чтобы сферы применения у языка не расширялись.

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

Да, обычно это заканчивается тем, что чел приходит ко мне с вопросом «посмотри плз, где у меня на сайте бекдор стоит». А исходники ведь не были изменены, просто by-design у сайта дыра, размером с мамкину.

byko3y ★★★★
()
11 января 2020 г.

Потому, что у PHP иной способ передвижения в отличии от Python.

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

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

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

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

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