После года разработки представлен релиз языка программирования PHP 8.1. Новая ветка включает серию новых возможностей, а также несколько изменений, нарушающих совместимость...Подробнее: https://www.opennet.ru/opennews/art.shtml?num=56232
Fibers - это вкусно и полезно. Особенно для сложных кооперативных тасков.
Производительность правда ожидаемо хуже линейных тасков на генераторах. Накладные расходы на переключение контекста выше в два раза по факту, что в общем и логично, контекст генератора собственного стека не имеет, в отличие от файбера.
> .. кооперативных тасков... линейных тасков на генераторах.... контекст генератора ... в отличие от файбера.Шоб с тобой дети на Brainfuck общались!
Ачотакова? Мы же не говорим "нити", мы говорим "треды" (ну, иногда "потоки"). Здесь то же самое.
"тасков", здесь однозначно есть русскоязычный аналог.
"Анатолий Борисович, ну зачем вот это вот «ваучер», ведь есть же хорошее русское слово - «приватизационный чек»" (ц)
Ну я могу полностью на английский перейти, но половина ж не всё поймёт.
Всегда говорим потоки.
Ну сорян, гуманитариям просьба не беспокоить.
А можешь пояснить за файберы? Это асинхронность завозят?PS: я не похапешник просто. Расскажу, с чем сталкивался
В python корутины -- это по факту генераторы. Прикольно, что простейшую корутину можно await-нуть вне event loop. Ржачно, что await и yield from -- это на уровне байткода одно и то же, и поэтому нельзя сделать yield from в асинхронном генераторе. Впрочем, устранимо -- нужно только на уровне байткода окончательно развязать корутины с генераторами
В JS асинхронность на промисах -- суть коллбэки. Питонячья асинхронность выглядит чуток костыльной на фоне промисов, но она работает и работает хорошо
Ну вот раньше да, кооперативные таски (которые в отдельных местах обозвали coroutine) приходилось лепить на генераторах. Минус - невозможность прервать исполнение в вызываемых процедурах/методах, потому что yield доступен только из процедуры/метода самого генератора.Разница в том, что в отличие от генератора у Fiber есть свой сохраняемый стек вызовов, и соответственно Fiber можно прервать откуда угодно, ну и чуть более логичные названия служебных методов, не просто там next() от перечисления, а явное resume(), и явный старт через start(), с генераторными тасками надо current() вызывать, выглядит жутко уныло :D
Остальное по сути всё то же самое, всё так же из resume возвращается значение, всё та же инициализация, etc. Ещё можно внутрь Fiber'а Exception бросить, но применения этой шляпе я не придумал пока.
попробуйте также swoole/openswoole - более полноценная штука чем просто одни файберы
Laravel вдохновлялась Рельсами, теперь вот еще Fiber завезли из Ruby'07. Бххх.
Ruby'17, конечно. Опечатка.
Winapi, скорее.
там они чуть с первой версии ос появились.
Laravel сбоку, а Fiber завезли в кору.
Никита в контрибьюторах или уже нет?
> Добавлена поддержка перечислений,
>enum Status {
case Pending;
case Active;
case Archived;
}
Это рейволюция, ребяты!
Ждём добавление указателей. Хачу на пэхе: *++d[&i++] = (volatile const * void __restrict *)&(s++[**++j]);
Зачем?
> Зачем?Чтоб был Тьюринг-полный пздц.
Не дождешься. ПХП с 1 декабря закрывается.
Не закрывается, просто по QT кодам будет.
*QR
Что ж тебя так корячит? Ну сделали энамы, тебе то что? Хлеб отобрали? Мяса недоложили? Не дают глупость писать?
> Не дают глупость писать?Ох, если бы ...
Меня одного мучает вопрос зачем там case внутри enum? Нельзя было просто без case через запятую сделать?
Ты не один задаешься этим вопросом.
Там switch не хватает ешо. Какой case без swtich?
> case внутри enum?Это ответ на вопрос, что курят пыхпыхи...
enum хорошо, раньше приходилось const'ами лепить.
Вы в java указатели сколько десятилетий ждете? Там тоже enum есть, почти 20 лет как.
в php и раньше было расширение SplEnum
Так усложнили синтаксис, что java выучить уже легче чем php...
Коту делать нечего, так он бубенцы лижет!!! Так и в современном ОйТи обновления ради обновлений.
Не ИТ это породило, а маркетинг. Нельзя теперь сидеть на строй версии айфона это не модно.
Вот и тут нужно обязательно взять новую версию и "купить" ...
> маркетингСамая жесть, это когда обновления плановые и привязаны к определенной дате.
У java очень простой синтаксис. Особенно у java 8
Зарплата пхпшника - 50р/час
Зарплата джависта - 50$/час
Выбор очевиден
Потому что жабист выдаёт в час продукции на $100, а пыхпыхарь - на 100 руб.
Так изначально было ... PHP был язык для быстрого старта компаний
сейчас кто мог отуда выбрался, а осталбьные там продолжают страдатьЧто мешает изучить джаву или пайтон или голанг и двинуть дальше?
вы живете в мире иллюзий. и путаете "дальше" со "сбоку".
php - рабочая лошадка, и именно он двигает прогресс. а смузихлебы просто кочуют по волнам хайпа порожденного глупостью и маркетологами от ИТ.
> php - рабочая лошадка, и именно он двигает прогрессКлепание сайтов на wordpress'е - двигать прогресс?
В чем прогресс то заключается? И когда юникод завезут в твоём "прогрессивном" языке?
$ cat lol.php
<?php
if (extension_loaded('mbstring')) {
echo "я умею в юникод! 👍 \n";
} else {
echo "unikod ne zavezli :( \n";
exit(1);
}$rust = "🤮";
if ($rust == "💩") {
echo "пых сила, раст могила";
} else {
echo "раст = $rust \n";
}$ php lol.php
я умею в юникод! 👍
раст = 🤮
$ cat lol2.php
<?php
$ютф🤔="☑️";echo "нуко ща проверим кириллицу и еможы в названиях переменных... \n";
echo $ютф🤔 ;
echo "\n";$ php lol2.php
нуко ща проверим кириллицу и еможы в названиях переменных...
☑️
Вот это лучше бы он не умел!
К сожалению, частично умеет. Не потому, что хотел уметь, а потому, что ему пох на уникод.Variable names follow the same rules as other labels in PHP. A valid variable name starts with a letter or underscore, followed by any number of letters, numbers, or underscores. As a regular expression, it would be expressed thus: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
Т.е. кодпоинты, все символы которых под эту маску попадают - пройдут.
А должно быть вот так ^[a-zA-Z_][a-zA-Z0-9_]*$, причём регистрозависимо!
Для меня, как и большинства, это и так так, но если запустить хипстера в проект то будет беда.
Вообще да, я сам давно удивляюсь - на фига 0x80-0xff в этом зоопарке.
дотнет еще
Семантически php сложней java уже с 5.* версии
Просто можно и сейчас писать по старому, как на 3.*, Хотя, варнингов уже будет пачка
Самый лучший язык из всех!
"Самый лучший язык из всех для WordPress!"fixed
> для WordPressПонятно тогда, почему во вротпрессе столько дыр.
Мне жаль тебя расстраивать...
Что ты говоришь у Пыха есть сообщество говнарей такое же как и JavaScript так что не надо тут ...
Сидят делают типовые сайты для магазинов зоотоваров и пусть радуються.
NodeJS/JS ближе к пользователю и фронту, а на PHP нормальный клиентский опыт не реализовать.
Избушка-избушка, повернись к лесу передом, а к пользователю задом. (Фронт на бэк, оверхед на фронт у SPA)
Казалось бы причем тут js
Что можно написать на пхп 8 чего нельзя было на пхп 4? К чему все эти обновления ради обновлений? Жизнь слишком коротка чтобы отслеживать всё это.
повышение призводительности в новых версиях имеет смысл всегдаа вот сахарок не особо нужен - все больше какойтой с++ франкенштейн получается
> повышение призводительности в новых версияхДа вот только на практике новые версии ВСЕГДА тормознее старых и требовательнее к железу. Запусти четвертую пыху на современном железе и офигеешь от производительности.
Конечно, я уже молчу что код просто не будет работать, там php-fpm просто нет.
> fpmНе нужно.
Вы тут сильно ошибаетесь. То же добавление JIT ускорить работу PHP в разы. И вообще новые мажорные версии (начиная м 5ой) идут на ускорение, а не на замедление.
а нам тут врут - что не в разы а на 40% в ненужно синтетическом тесте и 5-15% в реальном применении по результатам свежезапиленного для arm64. Но мы конечно верим анониму-ускоряльцу.
в специфических ситуациях именно в разы.
Не нужно не кому верить: проверьте сами. Я вот проверял.
*никому
PHP 8.1 на много голов быстрее, чем PHP4.
> PHP 8.1 на много голов быстрее, чем PHP4.Ты хоть в глаза видел 4 пыху, прежде чем писать подобный высер?
Я начинал с PHP3.
В старых php было жутко не эффективное представление array - т.е. всего. В PHP7 это поправили так, что он без JIT сравнялся с фейсбучным HipHopVM (которая была с JIT).Так что не надо ля-ля про скорость четвёрки. Тормоз был ещё тот.
Просто во времена четвёрки ни кто не заморачивался с фреймворками. Не было подъёма и интерпретации сотен файлов.
Так а что вам мешает так же на восьмёрке писать? Напишите эквивалентный код и замерьте.
> Тормоз был ещё тот.Однако вэб летал на 2-3 пнях, а сейчас вкладки хрома даже на моём i9 тормозят. Конечно, это не беда пыхи, но общая тенденция на лицо.
Написали глупость и сами ее опровергли.
Это достойный поступок. :)
Мозга не хватает понять заложенного смысла?
там одна из первых радикальных оптимизаций еще в 5.2 случилась, когда капитально переработали структуру внутреннего стека, дало махом прирост производительности раза в два как минимум. Давно это было, год 2010-2011 вроде, йа тогда как раз по работе в их core копался, очень веселые баги отлавливал и репортил. И мордокнига уже тогда со своим первым компилятором вылезла, тоже интересно было. Так что не надо на них балон крошить, кое-то там под капотом постоянно оптимируется. Синтаксис другее дело, постоянно их куда-то заносит, но этим у них другие ребята занимаются.
Дофига всего. Взять те же namespace, как вспомню все эти длинющие названия классов в Zend Framework, так вздрогну.
> namespaceНе нужно, как и всё ООП. Для сайтов в 99% случаев хватает процедурного программирования, а всё остальное усложнение ради усложнения.
Надо сказать, менее длиннющими они от неймспейсов не стали.
зато удобно
Не спорю, можно подтаскивать несколько разнородных проектов в один в виде библиотек.
Делалось-то конечно не для этого, а для возможности тянуть в рот продукты жизнедеятельности говнокомпозера, не задумываясь о содержимом, но всё равно удобно, да.
Еще добавили JIT на arm64
Когда-то Расмус Лердорф создал Personal Homepage Tools, чтобы дети и пенсионеры с рудиментарными знаниями в программировании могли создавать себе странички. За простоту использования они платили производительностью. Простота уже давно исчезла. За что платят производительностью пользователи PHP ?Ну, и чтобы два раза не вставать: когда уже его перепишут на Rust ? Доколе мы будем страдать от багов ?
В php очень быстрый интерпретатор.
Кгм... когда-то (ещё во времена 5-го пыха) пришлось покопаться в коде корп. сайта, доставшегося мне по наследству. Так вот, там на каждое обращение к мускулу устанавливалось соединение, скрипт авторизовывался, выполнял запрос, получал результат и отключался. И так много раз при генерации одной страницы. На каждый пук - полный цикл. Тут никакой "быстрый интерпретатор" не поможет.
Просвещайся:
https://en.wikipedia.org/wiki/Common_Gateway_Interface
https://httpd.apache.org/docs/2.4/mod/prefork.html
На жабе тоже можно написать подобное - будет жаба виновата?
> На жабе тоже можно написать подобное - будет жаба виновата?Емнип, жаба никогда не позиционировалась как язык, на котором сможет писать любой пионер и пенсионер. Она создавалась как язык для любых устройств, а не для любых неучей. А вот пых создавался именно как язык, на котором может писать кто угодно (это само по себе не есть что-то плохое), причём, что намного хуже, не включая мозг. И это уже проблема именно языка - не в узком смысле (проблема синтаксиса, который такое позволяет), а языка в целом - его экосистемы и его позиционирования его создателем.
Пых на данный момент - очень удобная JIT-обёртка вокруг сишечки и библиотек на оной.
Я не удивлюсь, если он ещё лет через 10 начнёт с жабой тягаться за сегмент.
а как бы ты это сделал на C++? или другом любимом языке программирования.
На плюсах - никак, ибо я не пишу на плюсах. На чём бы я сделал поддержание пула открытых соединений к БД в те времена - хз. Сейчас для своего любимого языка я просто возьму poolboy.
https://www.php.net/manual/en/function.mysql-pconnect.phphttps://www.php.net/manual/en/mysqli.configuration.php#ini.m...
Почитай про persistent connection в PHP, специалист херов.
Прочитай ещё раз пост, на который отвечаешь, комментатор херов.
Неиспользование "persistent connection" - это не ко мне претензия. Использовать "persistent connection в PHP" - этим как раз должен был заниматься тот пыхо-г..нокодер, чьё тормозное поделие оказалось в моём ведении, и с косяками которого мне пришлось тогда разбираться.
> Прочитай ещё раз пост, на который отвечаешь, комментатор херов.
> Неиспользование "persistent connection" - это не ко мне претензия. Использовать "persistent
> connection в PHP" - этим как раз должен был заниматься тот
> пыхо-г..нокодер, чьё тормозное поделие оказалось в моём ведении, и с косяками
> которого мне пришлось тогда разбираться.то есть в говнокодинге виноват язык программирования, а не говнокодер.
А ты не пробовал, прежде чем бежать все это ломать - выяснить, сколько времени занимает такая установка соединения - а сколько выполнялся запрос к базе?Обычно подобные оптимизации никак не влияли на видимую пользователем скорость отдачи страницы - вообще. Единственное, от чего они помогали - отвал базы из-за превышения лимита на число одновременных соединений при каких-то (опять же никак не связанных с этой технологией) проблемах - моргание канала, когда разом приходит пачка где-то подзастрявших запросов, хаброэффекты или наезды ддосеров. (То есть слегка жизнь облегчали но проблема не исчезала и ее все равно приходилось решать другими способами.)
При том что сам тогдашний mysql мало что умел, и написать на нем долго работающий запрос так чтобы сразу же не получить по рукам было непросто.
Это я тебе как человек, видевший сотни подобных сайтов, говорю.
А где я написал, что что-то сломал? Я тогда обошёлся паллиативными экстенсивными мерами - добавил мощи и подкрутил настройки.
На будущее, когда этого может оказаться недостаточно, попытался поискать кому можно было бы заказать новый сайт, но все несколько веб-студий, которые тогда были в нашем городе, были способны сделать только такое же г..но, какое у нас уже было.
Это в теории. А на практике поверх этого быстрого интерпретатора будет висеть Laravel, Yii или какой-то другой популярный фреймворк с кучей абстракций. А с учетом того что на PHP приложение собирается с нуля для каждого запроса и потом полностью уничтожается, то даже с включенным opcache всё это сливает в производительности, например, питоновской Джанге.
Угу, вот только оно целиком не упадёт, когда какой-нибудь запрос сделает что-нибудь не так.
На жабе это костылят через ловлю блохоисключений, но это такой костылинг, что лучше бы падало.
Сама прелесть independent per-request handling в том, что оно действительно independent.
Увы, кости в мозге смену парадигмы осилить многим не позволяют, отсюда и вот это всё.С другой стороны - на пыхе можно и жабоподобные всё-в-одном-комбайны ныне кропать, но оно нужно только там, где реально нужно.
> Ну, и чтобы два раза не вставать: когда уже его перепишут на Rust ? Доколе мы будем страдать от багов ?Кто именно перепишет? Растамэны, которые все вместе пока ничего кроме grep не переписали, или сами разрабы, которые, будучи способными писать подобные проекты на Си, к Rust скорее всего относятся без энтузиазма (это мягко говоря)?
С чего бы она исчезла? Ни встроенный шаблонизатор, ни встроенные глобальные функции никуда не делись. Если хочешь, можешь писать код в стиле 2005 года.> За что платят производительностью пользователи PHP?
Какой производительностью? У PHP есть неплохой JIT и кеш байткода — это всякие Ruby, Javascript и прочие хипстоподелия страдают по сравнению с PHP.
Из навесных шаблонизаторов очень хорош Blitz от Alexey Rybak, он идёт как модуль, и прост в доску, хотя конечно нюансов у него полно. Поскольку у PHP появился JIT, подумываю собственно переписать его Blitz на собственно PHP, сохраняя совместимость с шаблонами, по производительности теперь должно выйти не хуже. Всякие монструозные Smarty из 100500 классов на инициализацию тратят больше, чем на вывод шаблона.
в свое время ctpp был хорош, забросили
Пацаны, а вас не смущает, что вы на шаблонизаторе пишете шаблонизатор ?
> Пацаны, а вас не смущает, что вы на шаблонизаторе пишете шаблонизатор ?есть такое, но свои средства пхп далеки от понятия шаблонизатора. Но указанные как и мной, так и выше шаблонизаторы - написаны в виде модуля пхп (на С), не на самом языке пхп.
PHP уже лет сто не шаблонизатор.
тссс, не раскрывайте Великий Секрет вечным школьникам. пусть думают что
PHP, расшифровывающийся как "PHP: Hypertext Preprocessor", как то написано в первой строчке предисловия к докумнтации.
Его же Ще ковырял? Так ему некогда с айрисом-то =)
> Его же Ще ковырял? Так ему некогда с айрисом-то =):) Ше, тах пхп модуль перестал работать после версии 5.3
[комментарий про юникод и пхп]
Ничем не лучше комментария про юникод и сишечку.
> За простоту использования они платили производительностьюИ дырявостью. Сукербергу даже пришлось свой собственный пых написать, настолько плох был тогдашний пых.
мотивация там была - производительность. в связи с этим появился php 7 с переработанными структурами данных, за сет этого серьезно подняв производительность оригинала. hack, на данный момент, не нужен.
И традиционно ограниченной совместимостью - "нам ЭТО ненужно - значит, не будет реализовано". Получилось нечто что только сцукенбергу и полезно - за что макаку второй раз премировали, потомучто молодец.То же самое с их клоном hg. Бесполезное ненужно неработающее вне закрытой сеточки сцукенберга. И даже не собирающееся. Нате жрите.
скорость разработки даже с самыми строгими правилами, со всеми фишками на php по прежнему выше чем на Java/C#
а тем более чем на С++/RustПоэтому - никогда на Rust не перепищется то что написано и пишется на php.
Программистов понадобится раз в 10 больше. А их, на php - дефицитГде столько на Rust'е возьмутся?
Кстати - кто есче не попробовал - очень рекомендую попробовать екстеншн к пхп - свул, ( swoole / openswoole ).
Очень классная штука - добавляет корутины, параллелизацию, евент луп и тд и тп.
тье в нод переписывать вообсче больше ничего не надо.
пилиться китайскими камрадами
>СвулШвуле, судя по твоим заигрываниям с нодойжс.
я предпочитаю adblock+ и noscript
Ну я попробовал, не зашло, . В итоге нарисовал свой кооперативный тасклуп, универсальный для различных вариантов имплементации - генераторы, файберы, просто state-machine routines, который расширенный эвентлуп с кучей сахара, и не требует никаких расширений.Конкретно не зашла event model, вот эти вот все ->on, который превращают любой мало-мальски сложный код в nesting hell.
Более адекватной выглядит линейная модель задач, когда кооперативный таск выполняется линейно, как любой нормальный код, но может в любой момент сказать "я idle", и отдать управление планировщику. Или сказать "управление отдаю, но хочу вызваться на следующем цикле" - контроль за latency.Потому что все эти event-модели в один поток сталкиваются с одним и тем же: любой тяжёлый код внутри эвента, и ваши эвенты больше за разумное время не обрабатываются. И как раз Fiber на линейную организацию кооперативных задач ложится очень хорошо.
Ожидание же эвентов, возможно более одного эвента, решается возможностью порождать дочерние задачи (промисы), которые что-то делают, например ждут этого самого ->on коллбэка, или поллят, или кофе варят, и дальше отдают исполнение основной задаче, как только что-то изменилось. Банальный WaitOn()/WaitOnAny() для набора промисов.
>>>function foo(int $a, int $b) { /* … */ }Микола, диви, який смутний смайлик!
Уродливый франкенштейн c $enum Status {
case Pending;
case Active;
case Archived;
}Зачем тут case?
В ихавом enum могут быть не только enum
enum Status
{
case DRAFT;
case PUBLISHED;
case ARCHIVED;
public function color(): string
{
return match($this)
{
Status::DRAFT => 'grey',
Status::PUBLISHED => 'green',
Status::ARCHIVED => 'red',
};
}
}юзать так:
$status = Status::ARCHIVED;$status->color(); // 'red'
https://stitcher.io/blog/php-enums
#[allow(dead_code)]
enum Status {
Draft,
Published,
Archived,
}impl Status {
#[must_use]
pub fn color(&self) -> &'static str {
match self {
Self::Draft => "grey",
Self::Published => "green",
Self::Archived => "red",
}
}
}fn main() {
let status = Status::Archived;
println!("{}", status.color()); // 'red'
}
А зачем нужны "allow(dead_code)" и "must_use"? Выглядит как какая-то ненужная магия.
Дак растаманы! же писали! В здравом уме такое! не придумать!
Лично меня вполне устраивает объяснение ниже.
> А зачем нужны "allow(dead_code)" и "must_use"? Выглядит как какая-то ненужная магия.allow(dead_code) действительно не нужен, он заглушает предупреждения, что не все варианты enum'a используются.
А вот must_use довольно крут. Он добавляет предупреждение на такой код:
status.color();
То есть возвращаемое значение должно быть использовано (как минимум присвоено в переменную).
let _ = status.color();
Понятно. Makes sense.
abstract class News
{
public const status =
[
'draft' => 'grey',
'published' => 'green',
'arcived' => 'red',
];public static function test()
{
...
self::status['arcived']; // 'red'
...
}}
News::status['arcived']; // 'red'
Зачем добавили эти enum-ы с таким синтаксисом вообще не понятно.
Даже от match была польза, а зачем нужны такие enum-ы не представляю.
Окей, а теперь расширь это на два признака. И получишь шляпку в два массива.
А теперь расширь на вычисляемое.Кстати для просто одиночного типозначения метод с match не нужен, есть value(), который можно задать в case.
Так-то нынешний Enum - это по сути сахар вокруг специфичного класса.
Я ни черта не понял из того что Вы написали.
Да и ф-ии value() в php нет.
Функции нет, есть свойство. Если значения присвоены, их можно получить через ->value
Это не отменяет вопроса зачем там case. Ведь "DRAFT;" отличается от "public function x(...)" если уж так хочется добавить методы.
Потому что я могу захотеть назвать значение enum «public».
До такого разве что растаманы могут додуматься.
> До такого разве что растаманы могут додуматься.Вполне законное желание для enum. Допустим у тебя в приложении есть публичные и приватные данные. Тут сам бог велел присобачить к ним (к данным) соотв флажок перечислимого типа. Раст тут ни при чем.
> Потому что я могу захотеть назвать значение enum «public».Не "public function x(...)" же.
А чё, 5.6 больше не в моде?
Ну что за новость на коленке?
Тут https://www.php.net/releases/8.1/ru.php даже больше описано.
А сюда https://www.php.net/manual/ru/migration81.php даже и не заглядывали.
>> https://www.php.net/releases/8.1/ru.php
> Ускорение WordPress на 3.5%Все, пошел обновляться
И зачем все это нужно, реально какой то с++ получился.
Вайтишников пугать. И поделом.
Ваш вывод говорит что вы на пыхе сложней калькулятора ни чего не делали.
Ну пых так-то изначально сильно плюсы-подобен, поэтому не удивительно.
Перегрузку операторов вот никак, но вроде RFC есть уже.
> реально какой то с++ получилсяМожет, веб-программисты от этого поумнеют хоть немного?
Если будут писать на пыхе, то точно не поумнеют
Ломать - не строить
И снова ломают совместимость :(
Это удел современных программистов :( php, Qt, раст...
а кто заставляет переходить если не надо определенных плюшек?
end of life and is no longer supported
и правильно делают. дебилы, которые $GLOBALS удаляют (да и вообще используют) должны страдать
$GLOBALS надо было ещё в пятёрке выкинуть.
Вот просто взять, и выкинуть. Мучений и нытья было бы гораздо меньше.
php - personal home page
emacs - editor macrosNickto ne zabyt. Nichto ne zabyto.