Pull to refresh

Comments 25

А почему всё не как у людей? Есть же во многих языках оператор '...', зачем выдумывать '|>'?
Тогда наверное не получилось бы сделать это просто, потому как точка — конкатенация строк
Я такой сложности парсеры не писал, но в других языках как-то справляются. Да и глядя, сколько усилий прилагает php к угадыванию типа переменной, не думаю что представляет какую-то проблему отличить три точки от одной.
Имею в виду, что стало бы сложнее в рамках этой статьи, ведь здесь цель не добавить этот оператор, а рассмотреть процесс как все происходит внутри
Хм… прошу прощения, я подумал речь идёт о реальном добавлении. Для учебных целей — конечно, согласен.

Хотя синтаксис namespace-ов в php явно делался из соображений «как бы попроще парсить».
Когда делались неймспейсы, еще не было AST, и отличить контекст можно было только жуткими хаками, да и то не всегда получалось сделать предсказуемо, вон, с неймспейсами не получилось (а пытались тогда и: и ::).

Если бы неймспейсы добавлялись сегодня, этой жести с бэкслешом бы, думаю, и не вышло. Хотя уже все привыкли.
в php7 сделали же контекстно зависимый лексер, так что чисто теоритически никаких проблем с тем что бы заюзать три точки для рэйджей нет. Или есть?
Fesor Да, это можно сделать. Но лично меня все время напрягало, когда язык имеет конструкцию, значение которой зависит от контекста. Видимо мой мозг с контекстом плохо работает :)
Ну тут ошибиться сложно будет:

function some(...$args) {}
// и
some(...$args);

// против (включая)
[1...42]
// и (исключая)
[1..42]
some([1...42], ...$args);

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

Но это так, личные вкусы.
Думаю всё дело в привычке, пока что никто (в том числе и я) особо не ругался о существовании подобных конструкций в других языках.

С другой стороны семантика у операторов всё же похожа — и то, и другое означает некоторую группу, только в первом случае это будет итератор от N до M, а во втором разложение этого итератора на аргументы, т.е. некоторую «запаковку» и «распаковку».

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

В реальности можно ещё хуже. :D
$args = [6...8];
some(...[1...5], ...$args); // some(1, 2, 3, 4, 5, 6, 7, 8);
В mail.ru теперь пишут на PHP, причём собственной сборки с оператором диапазона? Мне уже страшно…
Все уже давно это поняли! спасибо!
В жизни не написал ни единой строчки на PHP, но читать было интересно, спасибо.
Если не думать о том, что это перевод и всё сделано фор-фан, а считать, что это реальное будущее техническое требование, то можно было бы заиспользовать вот это решение: github.com/marcioAlmada/yay
Жители Виларибо уже написали свой веб-сервис, а жители Вилабаджо все еще допиливают PHP
Надо же, какие пхпшники обидчивые)) По больному ударил видать… надо было пометить, что это добрая шутка, и сам я тоже иногда пишу на пхп.
Да, к сожалению Хабр такой, иногда 90% шуток приходится обворачивать в теги [joke] или [sarcasm], так как у большинства парсеры их почему-то не проставляют, хотя должны делать это на лету(
Теперь надо отвечать на stackoverflow примерами со своим оператором.
Картинка просто шикарна. Именно так моя бурная фантазия визуализировала PHP в который добавлены «кастомные операторы» =)
Статья супер!
Жду продолжение, где этот оператор будет возвращать генератор, а не генерировать массив! А то ведь -PHP_INT_MAX |> PHP_INT_MAX
… =)
Sign up to leave a comment.