
Aleh
13.12.2016
14:02:47
ну точнее, непонятно как стоит делать

Viktor
13.12.2016
14:02:48
хреново что в этом говне голосовальщики не пишут комменты "нет, потому-что ...."

Aleh
13.12.2016
14:02:58
нет, потому что бьет по скорости
20% вроде терялось

Google

Sergey
13.12.2016
14:03:08
https://github.com/phplang/phack

Viktor
13.12.2016
14:04:36

Aleh
13.12.2016
14:04:40
в pr
открой и посмотри)
там вообще непонятно, что с реализацией делать

Sergey
13.12.2016
14:05:51
https://github.com/php/php-src/pull/1584 - интересно)

Aleh
13.12.2016
14:06:10
хах)

Sergey
13.12.2016
14:06:19
самое забавное что закрыто потому что нет RFC
можно подтырить и запилить RFC + реаплизацию
но в целом не уверен что это будут использовать
ибо... ну сам по сути... если у тебя есть тайпхинтинг аргументов и тайпхинтинг для возвращаемых значений - у тебя достаточно информации что бы узнать типы
проблемы только с пропертями объектов (решение - не делать публичных пропертей) и массивами (дженерики)
короч да... надо дженерики

Google

Sergey
13.12.2016
14:08:07
но я дико хочу элиасы для типов

Aleh
13.12.2016
14:08:37
а структурные типы?)

Viktor
13.12.2016
14:08:44
почитал pr, не увидел про 20% медленее...

Sergey
13.12.2016
14:08:49
структурные типы - это проще уходить из php

Aleh
13.12.2016
14:09:02

Viktor
13.12.2016
14:09:20

Sergey
13.12.2016
14:09:39
> у меня есть такая же идея на счет коротких анонимных функций))
эм... там же есть уже
https://wiki.php.net/rfc/arrow_functions

Viktor
13.12.2016
14:11:09
https://github.com/php/php-src/pull/1797#issuecomment-226273521
там чуть ниже
I just micro-benchmarked property-writes in 5.4 vs 7.0.5, and property-writes became more than 200% faster in PHP 7. Why anybody would concern themselves with a 15% overhead is beyond me - that's less than 10% of a setback relative to PHP 5. It's not like the 200% increase in property write-performance made a watershed overall performance difference in the first place - surely a slight decrease in the same isn't going to do so either.
так что неоднозначно

Aleh
13.12.2016
14:11:58
=> самый норм

Sergey
13.12.2016
14:12:16

Viktor
13.12.2016
14:12:21
=> норм, но неоднозначен изза массивов

Sergey
13.12.2016
14:12:29
ну мол что бы статическая информация о типах сохранялась но на рантайм это не влияло

Aleh
13.12.2016
14:12:29
ну вот забить на это
оставить полную совместимость т.е.

Sergey
13.12.2016
14:12:45
короч
как насчет идеи отключать тайп хинтинг?

Viktor
13.12.2016
14:13:06
-

Google

Aleh
13.12.2016
14:13:10
да, было бы норм

Sergey
13.12.2016
14:13:21
ты в dev окружении все протестил и т.д.

Aleh
13.12.2016
14:13:25
проверка ж все равно до компайла идет

Sergey
13.12.2016
14:13:26
а потом "бац" и вырубаешь

Viktor
13.12.2016
14:13:40
если тайпхинт указан, значит передаваться должно только то, что указывается

Sergey
13.12.2016
14:13:42
и все живут счастливо

Aleh
13.12.2016
14:13:43
поидее просто байткод пыхе совать ))
он не должен закомпилится просто

Viktor
13.12.2016
14:13:59
а т.к. в пщп можно передать чо угодно... лучше не отключать :)

Sergey
13.12.2016
14:14:01

Viktor
13.12.2016
14:14:26

Sergey
13.12.2016
14:14:27

Sergey
13.12.2016
14:14:37
у тебя не может быть в продакшене так что "все было ок а теперь не ок"
так что если ты оттестил систему с включенными тайп хинтингами - у тебя все будет хорошо и без них

Viktor
13.12.2016
14:14:52

Sergey
13.12.2016
14:15:12
ну статический анализатор должен тебе на это кинуть варнинг
что мол "херню какую-то тварит чувак, пофиксить надо"

Viktor
13.12.2016
14:15:30
шучу конечно, но это лишь пример динамического инстанцирования) и ведь у тебя может быть if(rand())

Sergey
13.12.2016
14:15:40
повторюсь - написать кучу красный предупреждений в духе "только тем кто знают что делают"

Google

Viktor
13.12.2016
14:16:06
да всем похуй на них. с какой там версии E_NOTICE валятся?

Aleh
13.12.2016
14:16:37
тем кому похер не юзают тайпхинты

Viktor
13.12.2016
14:16:54

Sergey
13.12.2016
14:17:27
в PHP только дженериков не хватает что бы все было збс
https://github.com/etsy/phan

Viktor
13.12.2016
14:17:50
$a = $_POST['x']
$b = new $a();
foo($b);
где foo(Type $x);
это ж хер разрулишь :)

Sergey
13.12.2016
14:17:51
неплохой анализатор

Aleh
13.12.2016
14:18:01

Sergey
13.12.2016
14:18:06

Admin
ERROR: S client not available

Aleh
13.12.2016
14:18:22
b дается тип mixed или unknown и далее ты должен доказать, что это нужный тебе тип

Sergey
13.12.2016
14:18:23
а вообще да, тут @mkusher явно авторитетнее меня)

Aleh
13.12.2016
14:18:24
instanceof
или типа того

Viktor
13.12.2016
14:18:43

Aleh
13.12.2016
14:18:49
ты должен доказать

Viktor
13.12.2016
14:18:53

Aleh
13.12.2016
14:18:58
if ($a instanceof Type) foo($a);

Viktor
13.12.2016
14:19:11

Google

Sergey
13.12.2016
14:19:16
....
короч это бесполезно

Aleh
13.12.2016
14:19:25
чтобы описать интерфейс

Sergey
13.12.2016
14:19:51
тайпхинтинг нужен тем, кто хочет добавить прекондишены и посткондишены для интерфейса
а те кто хотят динамически инстанцировать классы - им такое не надо

Viktor
13.12.2016
14:21:30
либо у меня instanceof не вернет true и будет ошибка, либо нативные средства пшп вернут ошибку... иначе получается следующее:
— ура, мы внедрили строгую проверку типов чтобы вы не пихали всякое говно!
— ...
— сорян, проверка тайпхинтов это дополнительный оверхед, поэтому отключайте их и оборачивайте все в if instanceof!

Sergey
13.12.2016
14:23:10
> и оборачивайте все в if instanceof!
эм...
чта?

Aleh
13.12.2016
14:23:19
тайпхинты в рантайме вообще говно
ты хочешь видеть проблему без запуска кода

Sergey
13.12.2016
14:23:30
1. это возвращает оверхэд от тайпхинтов
2. это бред

Viktor
13.12.2016
14:23:32
» if ($a instanceof Type) foo($a);
если писать так - нахрена вообще тайпхинты?

Aleh
13.12.2016
14:23:43
тебе нужен любой пруф типа

Sergey
13.12.2016
14:24:51

Aleh
13.12.2016
14:24:53
ты же понимаешь, в чем разница кода который я написал и тайпхинта?

Sergey
13.12.2016
14:25:02
но в продакшене в рантайме тайпхинтинг должен быть отключен

Aleh
13.12.2016
14:25:03
ты используешь тайпхинт в своей динамике
когда из поста тянешь
и это буквально единственный случай
ты тайпхинты вообще не для проверки используешь, а для описания интерфейса)

Viktor
13.12.2016
14:25:44

Aleh
13.12.2016
14:25:45
проверка это побочный эфект

Artem
13.12.2016
14:25:58