После года разработки представлен релиз языка программирования PHP 8.2. Новая ветка включает серию новых возможностей, а также несколько изменений, нарушающих совместимость...Подробнее: https://www.opennet.ru/opennews/art.shtml?num=58288
PHP становиться все лучше и лучше. Постепенно избавляется от динамической типизации и становится строгим с жесткой типизацией. Это плюс.
>Постепенно избавляется от динамической типизации и становится строгим с жесткой типизацией.Ну как жёсткой, сверху тайпскрипт, снизу anytype.
А поклонники тайпскрипта, конечно, наяривают - чому-то на настоящую статическую типизацию их не берут, вот и изгаляются над и так уже изуродованным франкенштейном.
Даже не знаешь, на чём лучше писать: то ли на пыхпыхе, то ли на расте...
https://docs.rs/phper/latest/phper/
там что-то с сертификатом (традиционная "безопасность" в духе раста), лучше не открывать
Где ты там увидел строгость, болезный? Язык как был галимой динамической императивщиной, таким и помирает. Чтобы узнать, что такое строгость надо Clean потыкать.
PHP не умирает, его доля почти 80% веба. Был динамическим, становится статическим со строгой типизацией. Что такое стогость, я лучше тебя знаю, эникейшик. Выздоравливай.
>становится статическим со строгой типизациейИзвиняюсь, ткните носом где в новости вы такое увидели?
Ну есть же скрепное intval(), чего тебе еще надо? ))
>> public function bar((A&B)|null $entity)догоним и перегоним Rust/C++ по говнокоду?
Хруст и плюсы точно приятнее
Плюсы и похапе примерно одного уровня шлак, только последний столько вреда не принёс ввиду ограниченности области применения.
Ну-ка, умник, а как же будет не говнокод?
struct A {};
struct B {};
union C
{
A a;
B b;
};
void foo(C * c);и вcё, не надо никаких невнятных символов, умных терминов, код максимально читаем, ошибку в нём сделать просто невозможно. А вы продолжайте писать на пыхыпэ.
у тебя малюююсенькая ошибка: невозможно определить, что же лежит в Цэ.
ты пытался сделать function bar(A|B|null $entity)
но даже это не получилось.
Можешь не пытаться делать Intersection Types в языке без интерфейсов и наследования, учитывая что даже простое объединение не смог
using namespace std;variant<int, string, float> x;
x = "foo";/*....*/
if(holds_alternative<string>(x)) { /* в x -- строка */
cout << get<string>(x) << endl;
}
Какой ужас!
Ужас -- это пых, в котором прога свалится в рантайме, если в функцию попадет значение не того типа.
php компилирует пофайлово, и понятия не имеет о взаимосвязях между кодом, расположенном в разных файлах. Так что кроме как в райтайме, вариантов и нет.Впрочем, если пришлось связаться с php, статические анализаторы спасают.
Опеннет эксперт по программированию первый раз в жизни увидел объединение и пересечении типов и сделал единственный, доступный на его уровне компетенции вывод.
пора его переименовать из personal в corporate home pages.
хотя на счёт home тоже подумать можно
Так его уже переименовали в "PHP: Hypertext Processor". Но в данном случае для первой буквы могли бы что нибудь поприкольней придумать, "professional", например, и пофиг что к многих бомбанёт с этого ))
Painful
Parody))
Pandemonium
Pride
CP получается, мне это нравится
> добавлены новые функции
> sodium_crypto_stream_xchacha20_xor_icКакое красивое и лаконичное название. Очень продуманно, как и весь язык в целом.
содиум крипто стрим икс чача двадцать ксорик
PHP он такой, берёт функцию из сырцов, добавляет префикс и готово.
Хотя постойте, выходит так назвали функцию в священном .., о боги!
https://github.com/jedisct1/libsodium/blob/master/src/libsod...
> добавляет префиксНа кой лад тогда в язык добавляли пространства имён, если все скидывают в глобальную область?
Это перескок на другую тему
А вот это вопрос по существу. Новые функции называют для единообразия, но ничто не мешало вынести в отдельное пространство имён их изначально. Как с этим позже поступл, например, создатель модуля RdKafka.
Так пошло с тех времён, когда неймспейсов не было. Да и по psr нецмспейс первого уровня - это vendor.
Шоб было.
Это называется самодокументированный код.
вы наверно GTK и традиции некрософта не знаете?
Просвети, ты же эксперт
Это он Qt ещё не видел
в Qt хотя бы объекты группируют, что не надо писать еще и префикс объекта.
GTK2:
void g_signal_handlers_unblock_by_func( gpointer object, GCallback func, gpointer data);
button = gtk_button_new_with_label ("button,");
NTDLL:
NtAdjustTokenClaimsAndDeviceGroups
NtAlpcImpersonateClientContainerOfPort
NtWaitForWorkViaWorkerFactory
Так этот GTK2 спокойно маршалируется с помощью GI в пердсставление с делимитерами в тех языках, которые их поддерживают.
Зря ты так про эксперта, я не теоретик, у меня стаж с детства, интернетов в моем детстве не было, я вместо анимэ уже пытался программировать на VBA/VBS и батники делал, что было в винде 95, а затем XP, и на макроассемблере с WINAPI тоже, и на делфи. Это все еще во время школы лишь, без нормального инета.
Поскольку корни названий заходят в сишечку, на библиотеках на которой пых и собран, а в сишечке с названиями в силу жёсткой естественной фрагментации с именованием полнейший бардак, удивляться тут нечему. И ни у кого, кроме хипстеров, привыкших к полсотне однострочников в зависимостях, это особого баттхёрта не вызывает. Заглянуть в хэндбук в случае чего - дело 5 секунд, дальше часто встречаемое запоминается.
>Поскольку корни названий заходят в сишечку, на библиотеках на которой пых и собран, а в сишечке с названиями в силу жёсткой естественной фрагментации с именованием полнейший бардак, удивляться тут нечему.Можно удивиться долбанутости мейтейнера привязок.
php движется в сторону java где принято давать длинные идентификаторы объектам. Ограничения типов вводят, магические методы отключают.
Уху, и поэтому берёшь какой-нибудь там Hibernate, заглядываешь внутрь, и о***неваешь.
ну, теперь всех новичков точно можно будет отпугивать синтаксисом. Столько сахарку сыпят с каждым релизом...
Какие новички на похапе? Похапэ это только лютое легаси.
Ага, учитывая что 90% всего вэба это вордпресс.
Не 90%, а 43%.
Будто вордпрес не легаси. Там код ппц.
> 90% всего вэба это вордпресспричём появляется этот вротпресс в новостях исключительно в негативном смысле.
Систематическая ошибка выжившего. Хорошие новости не постят.
Либо их кто-то очень особенный не читает.
Человек хорошее воспринимает как должное. Поэтому большинство отзывов о товарах и услугах - негативные. Туда же и новости. Открой любой новостной телеграм канал - сплошной негатив.
И какое отношение имеет вордпресс к новичкам в пхп? Вордпресс это софт, который пилит кучка наркоманов, "программистов на вордпресс" не существует.
> Столько сахарку сыпятЭто уже не сахар, а лимон с перцем.
> Добавлены отдельные типы "true", "false" и "null"Я на пхп никогда не писал, но это выглядит как достижение века!
>>> как достижение века! <<<В язык Си (C23) вон тоже добавили полноценный bool, false, true, - больше не надо использовать <stdbool.h>, а false и true это больше не макросы, - вот это я понимаю достижение:)
>>>> как достижение века! <<<
> В язык Си (C23) вон тоже добавили полноценный bool, false, true, -
> больше не надо использовать <stdbool.h>, а false и true это больше
> не макросы, - вот это я понимаю достижение:)Блин точняк! Я и забыл, как сам подключал stdbool на сишечке...
Вам, кто называет "сишечкой" не понятно, что Си создавался для того, чтобы не писать на ассемблере, и чтобы можно было компилить более менее кросс-железно. Его правильней называть языком среднего уровня. В железе нет типа bool, там есть 8/16/32/64-битные регистры, в которых хранятся числа или адреса, а также битовые флаги в регистрах не общего назначения, которые меняются через загрузку в регистр общего назначения и выгрузку обратно, и больше ничего. Задача Си преобразовать алгоритмические читаемые глазами операции в машинный код конкретного процессора. Rust же неоправданно перегружен кучей всяких спецсимволов, осложняющих чтение, что приведёт к ошибкам по невнимательности.
>>> Rust же неоправданно перегружен кучей всяких спецсимволов, осложняющих чтение <<<ИМХО, скоро в Си будет не лучше, - ибо товарищи стандартизаторы они такие:)
в Си хотя бы стандарты есть.
Меня до сих пор изумляет слепота разработчиков, выдумавших в нем совершенно лишние платформозависимые типы, завязавших ВСЕ на sizeof(char) из-за которого нельзя было перейти на юникод без адского трэша, просто объявив что в этом компиляторе char двухбайтный (задуман он тоже, разумеется, был как платформозависимый), и выбросивших тип byte - единственный тип в bcpl, который как раз был в этом месте сделан правильно.> Rust же неоправданно перегружен кучей всяких спецсимволов, осложняющих чтение, что приведёт к
> ошибкам по невнимательности.Не приведет. Там и внимательно написанный код не всегда компилируется, пока не обвешают unsafe.
>объявив что в этом компиляторе char двухбайтныйwchar_t к вашим услугам. Но лучше не надо. Используйте utf-8 и не выпендривайтесь.
Я бы сказал иначе, - если вам нужно работать "по-серьёзному" со строками?, - выбирайте другой язык программирования!
Энтерпрайзно одобренный способ вызывать malloc()
Попутал char с трамвайной ручкой. :-)sizeof(char) == 1 по определению. Да, уместнее его было назвать byte, но в 71-м году как-то про юникод не подумали :-)
sizeof('c') - тут, да, ерунда получилась, в С++ исправили. Но это не char, это character literal.
> sizeof(char) == 1 по определению.Чьему блжад определению?
> Да, уместнее его было назвать byte
Нет. Байт - это байт. А char- тип для хранения символов. Так же как int тип для хранения неведомо какого размера чисел. Который в результате ни для какого непригоден в программках сложнее хеловрот, поскольку совершенно непонятно ни как считать в числах неведомой размерности, ни как их потом сохранять на диск для последующего чтения или в сеть отдать, и приходится заменять его уродливыми uint64t
Зачем тот и другой мусор в языке для управления памятью и работы с устройствами - боюсь, сегодня даже сами Керниган с Томсоном не могли бы ответить. (Но я подозреваю что из-за того что space travel была на фортране каком-нибудь, а потом уже некогда было думать, кодить надо)
В bcpl от которого они отпочковались, все было правильно. А *a++ завязанного на занятную но бесполезную детальку реализации одного специфического процессора мертвого сорок лет как - не было.
(потому что он под interdata делался, где такого нет)
When sizeof is applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1.”- C11 (ISO/IEC 9899–2011) Section 6.5.3.4
Ох, уж эти стандарты:)
Немного оффтопик. Я кстати, был приятно удивлён что в С23 накоцец таки теперь представление целых чисел это only 2's complement:) Хм... такими темпами может скоро и CHAR_BIT сделают only 8:))
> Вам, кто называет "сишечкой" не понятно, что Си создавался для того, чтобы
> не писать на ассемблере, и чтобы можно было компилить более менее
> кросс-железно. Его правильней называть языком среднего уровня. В железе нет типа
> bool, там есть 8/16/32/64-битные регистры, в которых хранятся числа или адреса,
> а также битовые флаги в регистрах не общего назначения, которые меняются
> через загрузку в регистр общего назначения и выгрузку обратно, и больше
> ничего. Задача Си преобразовать алгоритмические читаемые глазами операции в машинный код
> конкретного процессора. Rust же неоправданно перегружен кучей всяких спецсимволов, осложняющих
> чтение, что приведёт к ошибкам по невнимательности.Тип bool однозначно и очевидно переводится в машинное число. Но не это главное. В Си есть логические операции, но работают они с числами! Вот это поначалу обескураживает. По-моему, не было ни единой причины так долго не вводить bool.
А если начнёте говорить, что это, мол, уже абстракция над машинным числом, то я отвечу, что в Си есть структуры. И это, согласитесь, куда более высокоуровневая штука, чем этот бедный bool.
>>Си есть структуры. И это, согласитесь, куда более высокоуровневая штука,Нет, структуры как и базовые типы, это самая основа, и они ближе к железу.
Даже древние процессоры, хоть как нибудь, аппаратно поддерживали работу со структурами,
ибо они требовались изначально для работы с периферией.
Абстракциия от аппаратной части - это Json и аналоги.
>>>Си есть структуры. И это, согласитесь, куда более высокоуровневая штука,
> Нет, структуры как и базовые типы, это самая основа, и они ближе
> к железу.
> Даже древние процессоры, хоть как нибудь, аппаратно поддерживали работу со структурами,
> ибо они требовались изначально для работы с периферией.
> Абстракциия от аппаратной части - это Json и аналоги.Если структуры -- это самая основа, то bool -- это основа основ, потому что это просто число. А работу с числами поддерживают любые процессоры, которые только можно представить.
Bool это не просто число, он может быть только единицей.
Почему структуры в Си не равно этим вашим JSON и объектам напримере порта микроконтроллера:
у порта как любого физического устройства есть адрес, по которому физический механизм памяти определяет, куда мультиплексировать (грубо говоря соединить как телефонная станция) сигнальные линии шины с устройством передачи — регистром АЛУ, физических линий. Условно, 0x00001000;
железно, порт внутри содержит регистры, они адресуются инкрементом базового адреса регистра. т.о. шагая вперед с интервалом в 32 бита, 0x00001020, мы можем пройти по каждому регистру.
Структура же просто повторяет физическую структуру порта. И поле регистра структуры сразу адресует в нужное место в рамках адресов регистра.
Про выравнивание в курсе?
В число - однозначно. В машинное - вообще не однозначно и не очевидно.
Что такое ваш конкретный bool - 8 бит, 16 бит, 32 бита, 64 бита?
Или быть может оно вообще побитово в слово упаковано по 64 штуки в слове?
> В число - однозначно. В машинное - вообще не однозначно и не
> очевидно.
> Что такое ваш конкретный bool - 8 бит, 16 бит, 32 бита,
> 64 бита?
> Или быть может оно вообще побитово в слово упаковано по 64 штуки
> в слове?А какая разница программисту? Пусть компилятор решает. А на счёт упаковывать -- это уже что-то более сложное. Я говорю про самый примитивный bool, который может хранить два значения. Причём в числовом виде обычно 0 -- это false, а любое другое значение -- true. Это ведь не что-то высокоуровневое, не так ли?
Самый примитивный bool - это и есть любой бит в слове произвольной длины. Соответственно можно и упаковать :)
> Тип bool однозначно и очевидно переводится в машинное число. Но не этотолько в твоих фантазиях. В машине нет никакого bool.
> главное. В Си есть логические операции, но работают они с числами!
потому что в процессоре есть логические операции, и работают они - вот удивительно - с числами. jz и jnz совершенно все равно какое там число, если оно не ноль.
> Вот это поначалу обескураживает.
Тебе лучше программировать на php.
> то я отвечу, что в Си есть структуры. И это, согласитесь,
> куда более высокоуровневая штука, чем этот бедный bool.Нет, ни разу. Это просто набор смещений для указателя на область памяти. Т.е. вполне отображаемый на архитектуру компьютера синтаксический сахарок.
В отличие от "bool", которого не существует в принципе.Если эти вещи тебе не очевидны еще со школьных уроков информатики - продолжай программировать на php. js боюсь покажется тебе слишком сложным и непонятным с его 1+1.
Если для тебя структура является синтаксическим сахарком над смещениями указателя, то синтаксическим же сахарком для тебя должен являться и тип bool (гораздо более простым и очевидным сахарком кстати). Но если для тебя bool -- это что-то из области ООП, то продолжай программировать на сишечке. До более серьёзных языков ты пока не дорос.
Еще раз: "структура" твоя - просто кусок памяти, в котором есть оффсеты его внутренних кусков.
Ничего такого чего нет физически в процессоре.
Большинство современных ассемблеров даже умеют эти структуры почти как в си, потому что это просто арифметика на адресах.Никакого bool в процессоре - нет.
Не лопни от серьезности, твой удел - php.
Си придумали те кто совершенно не собирались абстрагироваться от аппаратных реализаций.
Просто сделали себе язык чуть поудобнее в написании чем макроассемблер. Поэтому bool им был без надобности. Вот зачем они притащили char вместо byte - действительно загадка. Полагаю таки именно по причине того, что самая первая версия языка была не для системной, а для прикладной задачи.
Структура -- кусок памяти. Значение bool -- тоже кусок памяти. И эти куски жёстко определены на этапе компиляции. Так где ты разглядел отличие одного от другого?А ещё, довожу до твоего сведения, что язык C появился как раз для того, что бы "абстрагироваться от аппаратных реализаций". Что бы можно было писать программу на абстрактном языке, а потом компилировать для любой архитектуры, а не писать программы отдельно под каждый компьютер.
> Структура -- кусок памяти.все ясно с тобой. Я же говорил - продолжай программировать на своем пехепе. Си ты даже на уровне кое-как наспех прочитанной K&R не знаешь.
struct a
{
int b;
char c[100];
};где тут кусок памяти?
> А ещё, довожу до твоего сведения, что язык C появился как раз для того, что бы
> "абстрагироваться от аппаратных реализаций".довожу до твоего сведения: нет, ни разу. Астральное знание (ибо книжек ты не читал) тебя опять подвело.
*(a++) это прямо вот аппаратная реализация. Причем - одного конкретного процессора DEC.
Причем a++, но --a. И только так (спроси у инженеров DEC почему - ты ж астральное знание имеешь, значит можешь с ними связаться).Язык появился чтоб поменьше по кнопкам колотить. pdp7 уже вполне могла автоматизировать расстановку оффсетов по именам, но тогдашний ассемблер у нее был совсем уныл.
Более того - модный потом c++ ТОЖЕ появился в первую очередь чтоб поменьше по кнопкам колотить. От ассемблеров уже ушли, и захотели уйти от ctrl-c/ctrl-v, переложив его на компилятор. Оно именно это и делало на начальном этапе.
>> Структура -- кусок памяти.
> все ясно с тобой. Я же говорил - продолжай программировать на своем
> пехепе. Си ты даже на уровне кое-как наспех прочитанной K&R не
> знаешь.Напоминаю, что "структура -- кусок памяти" -- это было твоё утверждение. Я всего лишь снизошёл до твоего уровня лексики, что бы попробовать объяснить на понятном тебе языке. Но, видать, не судьба. Трудно что-то объяснить человеку с настолько короткой памятью.
Далее, про "абстрагирование от железа". Не знаю, какие ты книжки читал (и читал ли вообще), но начать стоило хотябы с вики: [https://ru.wikipedia.org/wiki/История_языка_Си]. И там для тебя написано вот такое:
> Было вынесено предложение использовать какой-нибудь высокоуровневый портируемый язык, чтобы можно было легко переносить ОС с одного компьютера на другой. Язык Би, который они хотели сначала задействовать для этого, оказался лишён функциональности, способной использовать новые возможности PDP-11. Поэтому они и остановились на разработке языка Си.
Если написанное пока ещё не понятно (ничего страшного, ведь это посложнее комментиков на опеннете), позволю себе присовокупить ещё вот такое опеределение понятия "абстракция", найденное на просторах интернета (именно оно подходит сюда по контексту):
> Абстракция — результат абстрагирования. Абстрагирование — отвлечение в процессе познания от несущественных сторон, свойств, связей объекта (предмета или явления) с целью выделения их существенных, закономерных признаков. Результат абстрагирования — абстрактные понятия, например: цвет, кривизна, красота и т.д.
А теперь поясняю конкретно на твоём примере. Создатели Си посчитали, что программисту неважно, какие конкретно опкоды будут, к примеру, у операции сложения в PDP-7 и PDP-11. То есть это несущественное свойство архитектуры, которое можно абстрагировать. Так в C появился оператор сложения, который является абстракций над опкодами сложения в любых поддерживаемых компилятором архитектурах.
А от себя добавлю, что "абстракция от железа" -- это главный смысл вообще любого языка программирования, кроме ассемблеров.
Если дочитал досюда, молодец! Это было сложно. Возьми конфетку, заряди мозг. И постарайся хоть что-то запомнить. Если ты действительно пишешь на си, то тебе будет полезно знать такие вещи.
> Напоминаю, что "структура -- кусок памяти" -- это было твоё утверждениеты ни читать не умеешь, ни си не знаешь.
> не знаю, какие ты книжки читал (и читал ли вообще), но начать стоило хотябы
> с вики: [https://ru.точно. опеннетовский му/\лан не знающий что вообще читают за книжки про язык, получил все знания из викивранья да еще рашковского.
Нет, твой бред читать дальше мне незачем.
На самом деле у того же x86 есть операция bt (да и в z80 даже уже была - bit), которая проверяет конкретный бит. Поэтому насчёт отсутствия в машине я бы так огульно не того.
> На самом деле у того же x86 есть операция bt (да и
> в z80 даже уже была - bit), которая проверяет конкретный бит._произвольный_.
Т.е. никакого bool в нем по прежнему нет. Есть операции с битами.
Не путай булеву алгебру и примитивный bool.
А как же stc или просто какой-нибудь xor/add/test итп?
Это все простейшие операции, которые разрулит компилятор. Другое дело там, где нужно параллелить, работать с векторами. Например, операции DSP, делающие несколько арифметических действий за один такт.
- "там есть 8/16/32/64-битные регистры, в которых хранятся числа или адреса"Удивительно, но адреса это тоже число, не путайте "сишечников", а то подумают что принципа однородности не существует по Нейману ... пардон ... фон Нейману
Это чтобы хоть маленько донести инфу
Есть еще гарвардская архитектура, где адреса вообще отдельно. И физически адреса подчинены выравниванию памяти под удобство мультиплексирования бит по битности шины.
> Есть еще гарвардская архитектура, где адреса вообще отдельно.Только компьютеров нет. Странно, почему.
(нет, совсем не странно)
Микроконтроллеры. Cortex M3, M4, M7
Мне самому непонятно, зачем изобретать (всё равно тормозные и жрущие ОЗУ) GNOME 4x на языке среднего уровня, а также писать криптографические функции, где акцент на математическом алгоритме, ассемблерные вставки же под инструкции процов вроде AES256, SSE4 в нормальных языках можно организовать тоже (но я не в курсе, используются ли они вообще во всяких openssl/libcrypto).
Слушай, языку с узкой жестко определённой применимостью (ядра ОС и драйверы) это простительно. А вот языку высокого уровня для ламеров - нет, это позор.
Что такое «жестко определенная применимость» кем это она жестко определенна? Пишите на чем удобно и всего делов. Главное ж результат
Вот из-за "главное результат" имеем электрон на десктопе и нижайшее качество софта за всю историю индустрии. Потому что вот такие с подходом "пилю на чем хочу законом не запрещено" не умеют в проектирование.
> C23Не нужно. Си ценят именно как стабильный язык, его реализацию "ISO/IEC 9899:1990" используют в военке, космонавтике, атомных станциях, прочих критически важных и отказоустойчивых системах. Говорю как человек, который знает об этом не по наслышке.
>>> Не нужно. <<<Ну, что вы так сразу:( Например, там в <limits.h> добавили полезные макросы, - мелочь а приятно:)
В Common Lisp'е nil и t всегда были типами. И одновременно значениями своих типов. nil так ваще был единственным значением типа nil, а вот тип t, помимо t, включал в себя значения всех других типов. Но это лисп, ему можно, потому что там nil и t заодно ещё и символы, и каждый evalится в себя. Да и вообще это прям таки философия лиспа, засунуть лисп в лисп, чтобы можно было evalить, evalя, он заточен под это. А вот как php переживёт это безумие...Но я к тому, что нет ничего нового под Луной.
Кто-то может объяснить чего именно не хватало в пхп что он мутировал в такую мерзоту? Он же прекрасно выполнял всё для чего был создан.
Ему не хватало пхпфондейшен и внесения изменений ради изменений
Вот точно, похоже со стартом фондейшна всё и крякнулось.
Хотелось, видимо, чтобы он таки был языком программирования, а не недошаблончиком.
Т.е. 20 лет писали на недоязыке и сейчас пришло время?
С разморозкой! Время пришло ещё 15 лет назад и все изменения поступательные.
но так он же и создавался для того чтобы шаблончики разворачивать. Давайте блин из стула язык программирования делать
>Кто-то может объяснить чего именно не хватало в пхпОтпинывателя тайпскриптеров.
Никогда не выполнял и сейчас не выполняет. Говно присыпали пудрой. Всегда были альтернативы лучше.
ну не соглашусь. когда появился модуль к апачу, альтернатив, чтобы наляпать по быстрому говносайт, на сколько я помню, небыло приличных
Cgi был задолго до.
Чем перл не альтернатива?
В эти времена все нормальные люди использовали Perl. Тот же ModPerl под Apache.
> Кто-то может объяснить чего именно не хватало в пхп что он мутировал в такую мерзоту?Языка программирования.
> Он же прекрасно выполнял всё для чего был создан.
Да, но шаблоны страничек на адовой смеси html и интерпретируемого скрипта уже лет двадцать как вышли из моды.
Можно подумать, что на PHP 8.2 нельзя написать адовую смесь html и интерпретируемого скрипта...
> Можно подумать, что на PHP 8.2 нельзя написать адовую смесь html и
> интерпретируемого скрипта...можно (правда, уже сложнее) но речь о том что на нем еще можно просто программы писать, довольно большие и сложные - а вот на любимом тобой php4 - невозможно, увы.
При этом хомпейджи с котенком уже мало кому нужны, котиков принято постить в мордокнижечку. А вот мордокнижечка - это уже та самая сложная и большая программа, ни разу не шаблон вперемешку с кодом.
Пачимму невозможно то?
Как на классических сях, без всяких объектов, процедурами и передачей структур (ООП так-то по сути всего лишь мелкий сахар над этим щщастьем).
Просто многие разучились.
> Пачимму невозможно то?
> Как на классических сях, без всяких объектов, процедурами и передачей структур (ООП
> так-то по сути всего лишь мелкий сахар над этим щщастьем).
> Просто многие разучились.просто проекты стали - большие. У той pdp7 оперативной памяти было 32k (правда, не байт а двухбайт по-моему)
Для нее процедур и передачи структур хватало.
А для какой QT6 - уже нет.
напоминаю, что ПХП ("персональная домашняя страничка") - это не язык программирования, а шаблонизатор. Доказательство: как и в любом другом шаблонизаторе, "исходный код" по умолчанию просто выводится в stdout или похожий стрим. А чтобы начать использовать конструкции шаблонизатора, нужно явно это пометить через <? или похожую закорючку. Если переименуете README.txt в README.php, у вас получится правильная "программа" на пыхе. Потому что в ней не окажется <?-закорючки. Хелловорлд на пыхе выглядит не так:<?php echo 'hello world';
Потому что на шаблонизаторе хелловорлд выглядит так:
hello world
После этого шаблонизатора можно на Java писать сразу как на родном
ага, и на си, и на перле. Пых - это адская мешанина всех вышеозвученных языков. Гугли "PHP: a fractal of bad design"
Стоит отметить что по прошествию 10 лет, большинство аргументов из оригинальной статьи потеряло актуальность — функциональность была добавлена, либо исправлена
Не потеряла, семантика и дизайн остались такими же отстойными. Впрочем, если бы создатели пхп могли бы писать хорошо, то они бы не были создателями пхп. Такая вот селя ви.
> Впрочем, если бы создатели пхп могли бы писать хорошопричем тут пхп ? кто вообще может написать крупный проект хорошо и сразу?
Дело не в хорошо и сразу. Дело блин в изначальном грамотном проектировании и дизайне языка. Если строить с самого начала кривулину, то её потом патчами не допилишь без пересмотра основ. А строили именно кривулину, потому что никакой серьёзной теории за пхп не стоит.
Зато за ним стоит много серьёзной практики. И поэтому он почти весь вёб, и за пределами вёба тоже применяется.
Правда сейчас до езычга как раз теоретики дорвались, похоже, и он превращается в элегантные шорты...
К сожалению, обратная совместимость требует постепенных итеративных изменений.
Иначе будет как с третьепитоном — зачем переписывать половину приложения с 2.х на 3.х, если можно переписать всё на другом языке, где не будет таких сложностей с обратной совместимостью.
> К сожалению, обратная совместимость требует постепенных итеративных изменений.Так нет же ж обратной совместимости... и не было никогда (помним foreach, ненавидим)
> это не язык программирования, а шаблонизатор
> <?php echo 'hello world';уж лучше на перле шаблонизировать
print <<EOF;
hello world
EOF
Перл все слизал с пхп<?php
print <<<EOF
hello world
EOF;
PHP - это если бы дегенерат не осилил Perl и максимально его изуродовал. Именно так PHP и родился, если почитать историю происхождения. До некоторых фишек Perl'а PHP дорос только через десяток лет.
Сама по себе идея совмещать разметку и код была провальной с самого начала. До многих это быстро дошло, но PHP-хомяки жрали это дерьмо долгие годы, пока не переизобрели колесо в виде всё тех же шаблонизаторов.
И к чему в итоге пришёл PHP? К самоотрицанию. Теперь никто не пишет на PHP в том стиле, для которого он был придуман.
Частично верно
> Доказательство: как и в любом другом шаблонизатореВ каком "любом другом", в Jinja2, Pug или где?
А ведь можно было присунуть PHP в питон...
На сайте указано что была повышена производительность, но в шортрелизе ниже об этом не было ни слова. хоть пример бы какой завезли. в целом тенденция печальная. они делают упор на строгую типизацию, расширенные комментарии, атрибуты через спецкоменты и так далее. знаете какое это отношение имеет к прогрессии в языке ? я тоже не знаю. китайцы из swoole делают бомбу, но сам php в этом направлении пока не спешит двигаться. весь синтакс уже был доведён до отличного состояния (позаимствован у плюсов), но с момента как начали происходить взаимствования у js... что то пошло не так. надеюсь сообщество обратит внимание на многопоточность, асинхронное выполнение, оптимизацию и на улучшение jit который в некоторых сценариях вместо прироста производительности обеспечивал её спад вплоть до нестабильных исключений.
> на многопоточность, асинхронное выполнение, оптимизацию и на улучшение jitВ пыхе, который применяется для скриптов, обязанных как можно быстрее отработать и умереть?
Копайтесь уже в своей ноде и уберите испачканные джаваскриптом руки от нормального бэкенда.
Ты хотел сказать "как можно быстрее умереть", потому что PHP точно не тот язык, который когда бы то ни было стремился к оптимизации по скорости. Вот если бы они вместо бесконечного посыпания сахаром действительно ускорили его, то PHP можно было бы простить всё.
На этот счёт уже в 5.6 было сделано очень многое. В 7 ещё больше. В 8 теперь есть JIT, который реально решает на ряде вещей.
Многопоточности да, сильно не хватает.
Сейчас приходится юзать свою подложку для кооперативных корутин и exec'нутых подзадач, но там проблема с обменом данными с форкнутыми процессами всё равно остаётся, слишком накладно. Треды с независимыми контекстами и быстрым IPC из треда в тред сильно спасли бы положение.
> Сейчас приходитсяплакать, колоться и вымучивать многопоточные сервисы на пыхе, а не на го, специально для этих задач созданном? Трудно вам.
Нет особого желания браться за нишевый язык, который как и прочие руби, забудут через несколько лет.
Go уж точно не забудут через несколько лет: на нём написано уже очень много. Продолжайте жрать кактус.
На рубях тоже написано много всякого ненужно, а толку.
осталось что бы под го завезли хотя бы один вменяемый mvc фремворк и заживём (этого не будет)
> (этого не будет)Уже хотя бы потому, что модели, шаблону и контроллеру параллелить, как правило, тупо нечего.
Это тебе только кажется. Модели вполне себе способны параллелить запросы к DBMS, а например в условиях геораспределения это может дать вообще неэпический профит.
Ну и опять же, зависит от того, что у тебя за модель. Если плоская примитивная вида "вгрузи вот это как есть и хорошо" - да, кроме запросов особо ничего и нет. Если модель обвязана буизнесс-логикой и имеет сложные структурные связи, да ещё и к разносортным API присобачена, то там вполне себе есть чего разобрать.
Уже давно завезли buffalo
Вы читали его доки ? или с китайского ещё не всё перевели хотя бы на английский?
Упаси господь, есть куда более приемлимые варианты.
Ждём когда linux перепишут на PHP!
Требуем включить пых в ядро как самый безопасный язык!
Поэтому его и не включат туда включают только опасные языки.
По-моему если пишешь на пыхе - ты уже представляешь опасность
Ну вот уж не надо, лучше на расте.
> Добавлены отдельные типы "true", "false" и "null", которые могут принимать только одно допустимое значениеВангую добавление в следующих версиях отдельного типа "half", который может принимать только одно допустимое значение 0.5, "quarter", который может принимать только одно допустимое значение "¼", "one", который может принимать только одно допустимое значение 1.0 и "two", который может принимать только одно допустимое значение "II".
Не поверишь, но в языках с богатыми возможностями типизации это уже есть:type Half = 0.5;
const myVar1: Half = 0.6; // Error: Type '0.6' is not assignable to type '0.5'.
const myVar2: Half = 0.5; // OKИбо тип -- это множество всех допустимых значений.
Ты не понял... Ты привёл пример, где ты сам определяешь тип, а в статье речь про уже "добавлены типы".
Ты не поверишь, но в сабже эти типы ("true", "false" и "null") появились только сейчас, и его разработчики даже сочли нужным сообщить об их появлении своей пастве.
Ты не поверишь, но в php тип null появились только 20 лет назад, а очередной опеннет эксперт даже счел нужным сообщить о собственной глупости своей пастве.
Ну верни мне тип null из функции в 8.1, эксперт.
Напоминает специальную олимпиаду...
а когда сделают нечёткую логику "да, но потом"?
вот вот раз уж пошла иерархия типов
Маньяна, иншалла.
Да, но потом.
Lazy evaluations?
Motivation -> Type system completenessхорошая мотивация
Это к реактосному джедайке.
Для этого надо придумывать "женский" ЯП! Там ВСЁ будет на нечёткой логике. :)) bool - это "да", "нет", "может быть". Ошибка? Есть её обработчик "Отстань, не до тебя сейчас". Цикл от 0 до "я устала". Много чего интересного сделать можно :)
То чувство когда компилируемый golang проще чем интерпретируемый php.
Мда из простых получается только python остался.
перл проще - в нём пробелы считать не надо.
Перл проще, потому что на нём писать лучше даже не начинать. Нет кода нет проблем.
Из простых остался только раст. Типы да трейты - вот и весь язык. Ни классов, ни наследования, никаких там "readonly class" - все кашерно, все по минимуму. Раст - единственная достойная замена пыхе. Жалко. Много лет на пыхе программировал - версия 7.4 была самая лучшая, на восьмерку даже и не думал переходить. В итоге сейчас перехожу на раст, так как на восьмой пых больно смотреть.
Вот чем хорош пхп, так это совместимостью, не заставляют же использовать все эти опции, а там хоть 5 хоть 8, это не питон.
Ну попробуй запустить современный фреймворк или волдпресс на PHP 5.6
> Ну попробуй запустить современный фреймворк или волдпресс на PHP 5.6а мс-офис-2010 на дос запустить не надо?, а может хром на ардуино-нано, дурилка
Нет там никакой в PHP особой совместимости. Ломают и в 8, ломали при переходе с 4 на 5, и при переходе с 5 на 7. Дофига всего нужно было переделывать.
> Нет там никакой в PHP особой совместимости. Ломают и в 8, ломали
> при переходе с 4 на 5, и при переходе с 5
> на 7. Дофига всего нужно было переделывать.хз, вот недавно с githaba брал скрипт 13-летней давности, ну да 600+ строк кода всего, но никаких проблем вообще, вместо curl какойто ...хз что, но работает в 8 без проблем, есть аналогичные классы для laravel, еще для чего-то, только нафиг их, класс в классе в классе, зачем.
да до этого, много раз было, аналогичное, скрипт на питоне взял, а ему ту библиотеку, или ту версии другой, муть, а потом центос не грузится ага..а пхп тупо работает
Ссылку на чудо скрипт дайте. Он ведь не секретный.
Ну дык ... Вышеозначенный
<?php
print <<<EOF
hello world
EOF;Написан раз - работает везде.
Хотя и никому не нужен.
> Вот чем хорош пхп, так это совместимостьюты что ль молодой совсем ?
Не застал 5.3 -> 5.4 ? Ну или 5.6 -> 7 ?
>простых
>pythonЭто в котором тоже с 3 версии синтаксис удобрили до состояния компоста?
Мне только оператор моржика не нравится вот этот := а так самый читаемый язык до сих пор.
Пыха стал тяжелее крестов. Что называется дожили.
Вроде так и должно быть или у тебя такой утонченный стеб? Такой нежирный что даже с монитора не стекает.
> Вроде так и должно бытьДля курильщиков может и так, но здоровый человек должен упрощать.
Настоящим программистам достаточно "соответствующего тьюрингу" языка, любой опеннет эксперт это знает
Как только куда-то начинают запихивать ООП, это сразу дохнет.
> Как только куда-то начинают запихивать ООП, это сразу дохнет.Если вообще что-то запихивать, то тому, во что пихают, будет плохо. Потому что нужно грамотно проектировать, а не пихать.
Есть некоторые исключения из этого...
>Добавлены отдельные типы "true", "false" и "null"про дурака и Бога :)
Когда уже добавят undefined, Infinity и NaN? Мне не хватает средств для самовыражения.
Куда ты торопишься? Они только-только до false дошли.
Когда дочитают вторую книгу по программированию.
Infinity (INF) и NaN (NAN) в языке есть сто лет в обед, как и во многих других. Эти числа — часть стандарта IEEE 754. И даже минус ноль есть.
>в языке есть сто лет в обедтипы или значения?
Значения. Тип у этих значений по стандарту — с плавающей запятой (в данном случае — float).
> Значения. Тип у этих значений по стандарту — с плавающей запятой (в
> данном случае — float).так "Отец Ононим" выше за типы говорил, а не значения.
Кто первый придумал это уродство?
#[\SensitiveParameter] $password,
этот -> Author: Tim Düsterhus, duesterhus @ woltlab.com
Вообще реализация атрибутов - лютый ***тизм.
Да? Почему? Какая разница вообще какой синтаксис у атрибутов? Это всё полнейшая вкусовщина. А у решётки хоть плюс есть — старых версии пхп её воспримут как коммент, обратная совместимость.
Оно не инлайнится, опять рулоны.
Если плевать на обратную совместимость, инлайнится, конечно.
И после этого кто-то будет называть пхп пристойным языком?
> класса доступным только для чтениякопипаста с Java Records
Хороший был инструмент под названием PHP до версии 7, простой и самодостаточный. Потом вместо нормальной модульности придумали уродский костыль в виде namespaces.
И понеслось...
Ну, namespaces кстати удобны. К ним бы ещё множественное наследования.
А так - да, в плане расширения синтаксиса занимаются хренью какой-то честно говоря.
Кто нибудь знает, планируется ли добавление блочного ограничения области видимости переменной?
Вротпресс такого не переживет. А без него PHP отправится вслед за Perl.
PHP никогда не отправится вслед за Perl, потому что Perl - по-прежнему лучший для парсинга текста и "склеивания" разнородных скриптов и систем. PHP же в этом качестве всегда был негодным инструментом. Поэтому PHP однажды просто сдохнет.
Чего хотели? Каждое десятилетие язык меняется. В конторе есть простенький сайт на php5 на 98 винде крутится, 256 мегабайт оперативки хватает.
Нельзя писать "ключевые улучшения" !!!!
Надо писать "ключевые ИЗМЕНЕНИЯ" !! А уж являются ли они "улучшениями, каждый сам для себя решит... пока в язык только хрень всякую тащат :(
Блестяще! Это не улучшения - это ключевые ухудшения! Превратили php в выгребную яму языковых отходов! Руки прочь от нашего пхп! Оставьте его в покое!
>Превратили php в выгребную яму языковых отходов!Так так и было задумано - выгребная яма языковых отходов для выгребной ямы индустрии IT.
>Указание флага "readonly" на уровне классаМолодцы, даже в kotlin такого нет.
>Объявлена устаревшей возможность динамического создания свойств в классе. В PHP 9.0 обращение к свойствам, изначально не определённым в классе, будет приводить к ошибке (ErrorException)Очень хорошо что выводят строгие ограничения на типы и классы, молодцы.
Такое ощущение, что в коре развития языка случился какой-то Ц.- Добавлены отдельные типы "true", "false" и "null", которые могут принимать только одно допустимое значение
Бред? Бред.- Функции, подобные strtolower() и strtoupper(), теперь всегда преобразуют регистр символов в диапазоне ASCII как при выставлении локали "С"
Всё бы ничего, но возможность вернуть старое поведение не оставлена, а значит кучу легаси надо будет проверять на предмет использования со всякими "ё".- Добавлена возможность задания типов в дизъюнктивной нормальной форме
Хосспаде. Не надо делать из пыха хруст, оно ж нечитабельное.- В PHP 9.0 обращение к свойствам, изначально не определённым в классе, будет приводить к ошибке (ErrorException)
Ну то есть опять все динамические модели лепить на magic methods и проперте с array, производительность под плинтус. А скорее - извращаться с костылями в виде Reflection на лету. Ок, чего.---
Но есть и годнота.
- Предоставлена возможность фильтрации конфиденциальных параметров в данных трассировки стека, выводимых во время ошибки
Да, потому что даже во время отладки неплохо бы скрывать от помогающих юзеров то, что им знать не надо- Разрешено определение констант в типажах
Накотец-то, задолбало разбивать всё и вся из-за этого на трейты и интерфейсы. Даже там, где интерфейс уже не нужен.
- Функции, подобные strtolower() и strtoupper(), теперь всегда преобразуют регистр символов в диапазоне ASCII как при выставлении локали "С"
Всё бы ничего, но возможность вернуть старое поведение не оставлена, а значит кучу легаси надо будет проверять на предмет использования со всякими "ё".-- "ё" не входит в "диапазон ASCII" - можно не проверять.
"ё" - это образно. В ASCII8 много всякого интересного в начале диапазона.
// в начале расширенного диапазона 128-255, а то снова не разжевал
расширенный режим 128-255 не входит в ASCII
ASCII (он же ANSI X3.4) содержит только коды 00-7F (все остальное - это "неизвестные символы")
тут либо описание нововведения неверно, либо проверять нечего
Там так: в расширенных кодах ASCII8 пыталась учитываться локаль. Теперь чистый ASCII7 по кейсингу, как в C locale.