Pull to refresh

Comments 15

Да, сайт ещё пока в разработке. Доступен пока только фреймворк и демо приложение.

Темпы развития языка впечатляют. 10 лет развития от PHP5 то PHP7 версии и всего 5 лет (тьфу-тьфу) от PHP7 до PHP8 версии, причем за 5 лет было/будет сделано больше чем за предыдущие 10.
Конечно, всегда хочется большего (дженерики, асинхронность) но и без этого PHP это уже не язык для «домашних страниц»)

С этими "хотелками" всё довольно сложно… В PHP типизация чекается в рантайме, так что...


PHP 7.3) Представим, что нужно проверить возвращаемый T, раньше (т.е. php 7.3 и ниже) мы максимум что делали — это ассерт на то, что значение является T.


PHP 7.4) Сейчас надо проверить что значение — это instanceof T, т.е. построить цепочку зависимостей [T -> parent of T -> parent of parent of T -> etc.]


PHP 8.0) Юнион типы: А теперь представим, что возвращаемый T — это T = X | Y. В этом случае нужно уже на уровне языка строить граф, где [T -> X + Y -> parent of X | parent of Y -> etc]


Ideal PHP) А теперь представим что будет с дженериками, когда этот граф не только километровый (но всё же который можно закешировать), но ещё и создаётся в рантайме! Когда new Some<Any> просто берёт и перекраивает его налету, меня всё внутри. И это я уж не говорю про то, что после юнионов 7.4 планируется добавление декларации этих юнионов через конструкции type T = X | Y;


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

Так как раз вот тут и должна JIT компиляция помочь? Тут же как раз про яйцо и курицу, JIT сейчас ничего не привносит, а дженерики наоборот привнесут даунгрейд производительности. Что первое внедрять? )
PHP8 будет новой вехой.

Ещё бы параметры в стандартных функциях привели в порядок.
Ну и тернарный оператор за одно, если ломать совместимость.
Не получится ли как с python2 и python3? Комьюнити явно не оценит поломку обратной совместимости.

P.S. Если уже ломать обратную совместимость, я бы еще иммутабельность завёз.
Да, к сожалению так и выйдет. Тогда можно сделать отдельный класс со статичными методами, по аналогии с DataTime.
Возможно будет лучше. Я бы с радостью пользовался классом Array, который делает нормальный порядок аргументов для привычных методов. А то сейчас это просто мешанина, где нужно помнить каждый аргумент в каком порядке передавать. Пример:

array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] ) : bool
и
array_map ( callable $callback , array $array1 [, array $... ] ) : array


В array_walk идет первый массив, а затем функция, а в array_map наоборот.

А вообще, было бы здоров не только статику делать по типу:
Array::map(callable $callback , array $array1)


Было бы круто делать так:
$list = [1, 2, 3];
$result = $list->map(fn($item) => $item * 2);
Ссылки ещё забыл упомянуть.
Sign up to leave a comment.

Articles