The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Началось альфа-тестирование PHP 8.1

13.06.2021 09:31

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

  • Добавлена поддержка перечислений, например, теперь можно использовать следующие конструкции:
    
       enum Status {
         case Pending;
         case Active;
         case Archived;
       }
    
       class Post
       {
           public function __construct(
               private Status $status = Status::Pending;
           ) {}
    
           public function setStatus(Status $status): void
           {
            // …
           }
       }
    
       $post->setStatus(Status::Active);
    
  • Добавлена поддержка легковесных потоков, именуемых файберами (Fiber) и позволяющими управлять потоками выполнения на низком уровне. Поддержку файберов планируется добавить во фреймворки Amphp и ReactPHP.
    
       $fiber = new Fiber(function (): void {
           $valueAfterResuming = Fiber::suspend('after suspending');
        
           // … 
       });
     
       $valueAfterSuspending = $fiber->start();
     
       $fiber->resume('after resuming');
    
  • Улучшена реализация кэша объектного кода (opcache), в которой появилась возможность кэширования информации о наследовании классов. Оптимизация позволила поднять производительность некоторых приложений на 5-8%.
  • Оператор распаковки внутри массивов "...$var", позволяющий выполнять подстановку существующих массивов при определении нового массива, расширен поддержкой строковых ключей (ранее поддерживались только цифровые идентификаторы). Например, теперь можно использовать в коде:
    
       $array1 = ["a" => 1];
       $array2 = ["b" => 2];
       $array = ["a" => 0, ...$array1, ...$array2];
       var_dump($array); // ["a" => 1, "b" => 2]
    
  • Появился новый тип "never", который можно использовать для информирования статических анализаторов о том, что функция прекращает выполнение программы, например, вызывая исключение или выполняя функцию exit.
    
       function dd(mixed $input): never
       {
        exit;
       }
    
  • Предложена новая функция array_is_list, позволяющая определить, что ключи в массиве расположены в порядке увеличения числовых значений, начиная с 0:
    
       $list = ["a", "b", "c"];
       array_is_list($list); // true
       
       $notAList = [1 => "a", 2 => "b", 3 => "c"];
       array_is_list($notAList); // false
    
       $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"];
       array_is_list($alsoNotAList); // false
    
  • Для запрета переопределения констант родительского класса теперь можно использовать ключевое слово "final".
    
    
       class Foo
       {
           final public const X = "foo";
       }
     
       class Bar extends Foo
       {
          public const X = "bar";
    >    Fatal error: Bar::X cannot override final constant Foo::X
       }
    
  • Предложены функции fsync и fdatasync для принудительного сохранения изменений из дискового кэша.
    
       $file = fopen("sample.txt", "w");
       fwrite($file, "Some content");
       if (fsync($file)) {
           echo "File has been successfully persisted to disk.";
       }
       fclose($file);
    
  • Добавлена возможность использования префиксов "0o" и "0O" для восьмеричных чисел, помимо ранее применявшегося префикса "0".
    
       016 === 0o16; // true
       016 === 0O16; // true
    
  • Предложено выборочно ограничить применение $GLOBALS, что приведёт к нарушению обратной совместимости, но даст возможность значительно ускорить операции с массивами. Например, рассматривается возможность запрета записи в $GLOBALS и передачи $GLOBALS по указателю. Анализ 2000 пакетов показал, что только 23 из них затронет данное изменение. Например, в случае одобрения предложения в 8.1 будет прекращена поддержка таких выражений, как:
    
       $GLOBALS = [];
       $GLOBALS += [];
       $GLOBALS =& $x;
       $x =& $GLOBALS;
       unset($GLOBALS);
       by_ref($GLOBALS); 
    
  • Продолжена работа по переводу функций c использования ресурсов на манипуляцию объектами. На объекты переведены функции finfo_* и imap_*.
  • Объявлена устаревшей передача значений null в качестве аргументов внутренних функций, помеченных как non-nullable. В PHP 8.1 использование конструкций вида str_contains("string", null) будет приводить к предупреждению, а в PHP 9 к ошибке.
  • Добавлена поддержка алгоритмов хэширования MurmurHash3 и xxHash.


  1. Главная ссылка к новости (https://www.php.net/index.php#...)
  2. OpenNews: Отчёт о компрометации git-репозитория и базы пользователей проекта PHP
  3. OpenNews: Релиз языка программирования PHP 8.0
  4. OpenNews: Уязвимость в пакетном менеджере Composer, допускающая компрометацию PHP-репозитория Packagist
  5. OpenNews: Microsoft не станет заниматься поддержкой PHP 8.0 для Windows
  6. OpenNews: Релиз языка программирования PHP 7.4
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/55322-php
Ключевые слова: php
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (140) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, lockywolf (ok), 09:40, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >Появился новый тип "never", который можно использовать для информирования статических анализаторов о том, что функция прекращает выполнение программы, например, вызывая исключение или выполняя функцию exit.

    Так и до хвостовой рекурсии недалеко.

     
  • 1.2, Qwerty (??), 09:46, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –38 +/
    А оно ещё живо? Кто-то на этом пишет?
     
     
  • 2.4, Mad max (?), 10:06, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +12 +/
    Посмотри вакансии, дурачок. Люди получают неплохие деньги.
     
     
  • 3.11, Аноним (11), 10:51, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну да больше 0 это неплохой результат.
     
  • 3.13, КО (?), 10:54, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Лучше задумайтесь почему так много этих вакансий.
     
     
  • 4.15, Аноним (15), 11:45, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Легаси допиливать?
     
  • 4.28, Lex (??), 14:09, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Потому что джава - сильно жЫрно, плюсЫ - громоздко, а питон - медленно
     
     
  • 5.29, Aukamo (ok), 14:28, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    А ещё потому что PHP стал мейнстримом для "dynamic web" в нужное время и для него даже компилятор запилили. Постоены гигантские инфраструктуры, способные видерживать солидные нагрузки и хостить кучу клиентов. Есть море CMS и т.д. обещающие всё готовое из коробки, и да, если вам надо просто ребрендинг сделать, зачем платить больше?

    Меня всегда на изнанку выворачивало от PHP. За язык его не считаю, но, когда мне надо завести блог, первым делом о WordPress вспоминаю, а не о django\flask & spring (или что там для java).

     
     
  • 6.34, Плюсовик (?), 15:00, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >первым делом о WordPress вспоминаю, а не о django\flask & spring (или что там для java)

    Аналогично. От php восторга не испытываю, но в своем сегменте ему нет равных.

    Java и Ко идет лесом, только для жирного бизнеса. Она раскрывается при хорошем вливании денег и предоставлении больших мощностей железа.

    Python... Даже с приходом asyncio и недоделанных либ aio* ситуация не лучше.

    Ruby, Rails... Потыкал палочкой, что-то не зашло.

    Go слишком много самому нужно делать, а я ленивый старый пень.

    То, что предоставляет nodejs  заслуживает внимание, но прихожу в ужас от всех этих реактов и так далее. Тут мы подпорку из реек сделаем, а тут изоленту применим, а там... ммм... степлером пройдем.

     
     
  • 7.121, MVK (??), 10:42, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Java и Ко идет лесом, только для жирного бизнеса. Она раскрывается при хорошем вливании денег и предоставлении больших мощностей железа.

    - чепуха

     
     
  • 8.130, Аноним (130), 16:47, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Совсем не чепуха Большая часть функционала PHP реализуется C , а вот Java отда... большой текст свёрнут, показать
     
     
  • 9.131, Аноним (130), 16:48, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    всё проблемы конкретной реализации, то другой в общем то нет ... текст свёрнут, показать
     
  • 9.141, MVK (??), 11:24, 17/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    - интересно, но объясните тогда почему тогда PHP так нуждается в различных кэшах... большой текст свёрнут, показать
     
     
  • 10.142, Аноним (130), 12:42, 17/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Потому, что базы данных не умеют толково кешировать запросы Не видел ни одного ... большой текст свёрнут, показать
     
     
  • 11.143, MVK (??), 13:18, 17/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    - на PHP не могут, а на Java могут Ах, да там же есть транзакционный и L2 кэши ... текст свёрнут, показать
     
  • 6.41, pda (ok), 17:03, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Он уже давно вполне себе язык.
     
  • 5.35, starlette (?), 15:33, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Можно подумать, Ларавель, Вордпресс и прочие поделия - это быстро. Да на Питоне нужно сильно постараться, чтобы написать что-то более тормозное чем на большинстве PHP фреймворках или CMS.
     
     
  • 6.39, Онаним (?), 16:08, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +9 +/
    Вот только одна проблема: на PHP таки написано.
    А на питоне лет двадцать всё те же "нужно сильно постараться"...
     
     
  • 7.113, Аноним (113), 03:24, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Лучше бы вообще не писали. Ни на одном языке не написано столько откровенной дряни как на этом шаблонизаторе.
     
     
  • 8.126, z (??), 12:56, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    а ты конечно лично каждую строку проверил, написанную каждым школьником на бейси... текст свёрнут, показать
     
  • 6.48, Плюсовик (?), 18:52, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Приведи аналоги Laravel, WordPress, Symfony для Python. Django да и все. Остальные микрофреймворки разной степени готовности со статусом от "в процессе проектирования" до "не готово".
     
     
  • 7.115, Аноним (115), 03:48, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Их нету, поскольку такую кучу г-на только на похапе написать и можно.
     
  • 6.49, Плюсовик (?), 18:58, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >Питоне нужно сильно постараться, чтобы написать что-то более тормозное чем на большинстве PHP фреймворках или CMS.

    Видал я тут на Flask админку к базе одной популярной СУБД. Описывать можно только нецензурными словами.

     
  • 2.25, Аноним (25), 13:04, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Если бы существовали альтернативы, предоставляющие, хотя бы, тот же уровень возможностей при, хотя бы, том же уровне усилий, то, возможно, от него бы начали отказываться. А так, альтернатив в вебе особо то и не густо.
     
  • 2.26, ананоша (?), 13:48, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Пишу сейчас бэк на типскрипт, лучше бы на пыхе+симфони писал
     
     
  • 3.30, Aukamo (ok), 14:29, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Обоснуй

    UPD: помимо того что там бывают ситуации с типами данных, мягко говоря, неприятные.

     
     
  • 4.42, ананоша (?), 17:04, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Не вижу гибкого мейнстримного фреймворка уровня симфони, на который не забьют через полгода
     
     
  • 5.43, Аноним (43), 17:41, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    NestJS
     
     
  • 6.69, Аноним (69), 23:15, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Только typeorm брать не надо, его автор вообще не в курсе, что такое ORM, и годами не понимает, зачем править очевидные архитектурные ляпы типа вызова конструктора при гидрации.

    надо брать Mikro-ORM, он активно развивается, и изначально реализуется как полноценный Unit-Of-Work Data Mapper.

     
  • 6.75, ананоша (?), 02:45, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это который пилится одним поляком?
     
     
  • 7.77, Аноним (69), 05:51, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Точно так же, как Symfony пилится одним французом (давно уже нет).
     
  • 5.59, Ненавижу SJW (?), 21:20, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Express?
     
     
  • 6.67, Аноним (69), 23:08, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Экспресс низкоуровневый. Это скорее сравнимо с компонентами Symfony HttpFoundation, чем с самим Symfony.
     
  • 6.76, ананоша (?), 02:47, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну да, его и используем конечно же. Страшная вещь)
     
  • 5.97, Аноним (97), 14:54, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Blazor (гы-гы-гы), а вообще Angular
     
  • 5.133, Aukamo (ok), 17:39, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    И это всё что не нравится в TS? Просто отсутсвие какого-то более менее долгоживущего решения (фреймворка)?
     

  • 1.3, Аноним (3), 09:54, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Статический анализатор в PHP настолько беспомощен, что не может понять, что в функции содержится вызов exit или бросает исключение и поэтому надо переложить написание лишних подсказок на плечи разработчика? А синтаксис перечисления нельзя было взять из Си  или TypeScipt?
     
     
  • 2.5, Аноним (5), 10:14, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нет нельзя! Надо было обязательно слепить что-то среднее между enum'ом и switch'ом, чтобы не как у всех было)
     
  • 2.9, Варенье (?), 10:40, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > А синтаксис перечисления нельзя было взять из Си  или TypeScipt?

    Подозреваю что лексер они сильно переусложнять не хотели, поэтому взяли синтаксис из Swift

     
  • 2.10, Ordu (ok), 10:47, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > Статический анализатор в PHP настолько беспомощен, что не может понять, что в функции содержится вызов exit или бросает исключение и поэтому надо переложить написание лишних подсказок на плечи разработчика?

    Если ты вызываешь из кода php функцию на C, которая прерывает выполнение программы, то статистический анализатор должен каким-то магическим образом знать об этом свойстве внешней функции? Или может у него должна быть база данных всех внешних функций? Или может, всё же, проще добавить в синтаксис возможность задекларировать функцию как никогда не завершающуюся?

    > А синтаксис перечисления нельзя было взять из Си  или TypeScipt?

    Нет. У них внутри определения типа могут быть объявлены методы. В том числе и внутри enum'а. php, как я понимаю, следит за тем, чтобы синтаксис был бы легко парсящимся, в смысле чтобы не требовалось бы расчехлять весь опыт pattern-matching'а, чтобы определить что следующий statement из себя представляет. Например, функция начинается с ключевого слова function. Класс со слова class. Вариант enum'а со слова case. Они не совсем успешны в следовании этой идеи, и функция реально может начинаться с public static, но тем не менее, такие штуки очень помогают держать синтаксис непротиворечивым и избегать сложностей распутывания контекстных зависимостей.

    Люди недооценивают важность таких вещей, но чем проще синтаксис, тем проще с ним работать программно, тем проще создавать тулзы для работы с сорцами. Это, кстати, мысль, которую Вирт не смог донести до окружающих. Он делал свои паскали очень простыми с точки зрения парсинга, но в качестве аргументов к тому, почему это нужно, он невнятно мямлил про скорость компиляции и простоту освоения языка. Но сегодня, когда статистические анализаторы внешние, по отношению к компилятору, и тулзы для рефакторинга, и поддержка редактором синтаксиса языка и поддержка им задач редактирования кода стали обыденностью, простота синтаксиса для программного парсинга стала очень важна.

    Чтобы парсить C и тем более C++, тебе потребуется llvm. В принципе, C можно парсить и при помощи sparse. Либо ты будешь парсить регекспами, смиряясь с тем, что ты твой парсер никогда не поймёт, что означает * в данном контексте: слово "указатель" в названии типа? разадресацию указателя? умножение? Да блин, ты замучаешься отличить декларацию переменной, от умножения: "a * b" может быть умножением a и b, а может быть объявлением переменной b с типом "указатель на тип a".

     
     
  • 3.95, Sw00p aka Jerom (?), 13:39, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Если ты вызываешь из кода php функцию на C, которая прерывает выполнение программы

    а смысл тогда в статическом анализаторе для языка который по факту является оберткой другого языка?

     
     
  • 4.96, Ordu (ok), 14:51, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я даже не знаю что сказать на это Что значит язык является обёрткой другого яз... большой текст свёрнут, показать
     
     
  • 5.100, Sw00p aka Jerom (?), 17:13, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вот что значить вот это Если ты вызываешь из кода php функцию на C пхепешный ... большой текст свёрнут, показать
     
     
  • 6.102, Ordu (ok), 18:21, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Эмм Любой язык, кроме ассемблера, становится обёрткой, если следовать такому ... большой текст свёрнут, показать
     
     
  • 7.108, Sw00p aka Jerom (?), 01:32, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну да Опять задам парочку уточняющих вопросов, ибо не ясно, что значит анализ ... большой текст свёрнут, показать
     
     
  • 8.112, Ordu (ok), 03:20, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    if a b бла-бла-бла Это есть потенциальная ошибка С точки зрения статиче... большой текст свёрнут, показать
     
  • 2.80, Аноним (80), 09:25, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Что еще ожидать от недоразвитых вебмакак неспособных даже написать помощьный статический анализатор. Анонимным эксперам всё ясно с php, давно. Единственное что анонимным экспертам не ясно, что же такое статический анализатор и зачем он нужен. А так же зачем тип Nothing в kotlin, never в swift и typescript.
     
  • 2.81, Онаним (?), 10:07, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Статический анализатор в динамическом языке...
    Печалька.
    Оно вообще может управление отдать через call_user_func(['ex'.chr(105).'t']);, и хрен ты это анализатором разберёшь, грубо говоря. Для продвинутых анализаторов можно пример ещё усложнить, обвешав вызовами C'шного API.
     
     
  • 3.82, Онаним (?), 10:07, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    // квадратные скобки лишние, сорян
     
  • 3.84, Аноним (80), 10:37, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    в php вообще-то есть статическая типизация для аргуметов функций и полей классов
     
     
  • 4.89, Онаним (?), 12:07, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Там скорее тайпчек частично на этапе трансляции, а в основном - в рантайме.
     
     
  • 5.90, Онаним (?), 12:08, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    (потому что не для констант и предсказуемых вызовов финальный тип становится известен только в рантайме)
     
  • 4.91, Онаним (?), 12:10, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    (ну то есть к реальной статический типизации это имеет слабое отношение, хотя часть оптимизаций применима, конечно же)
     
  • 3.109, Sw00p aka Jerom (?), 01:42, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Статический анализатор в динамическом языке...
    > Печалька.

    Блин аааа, мою портянку выше можно было уместить в ваши две строчки :)

     

  • 1.7, onanim (?), 10:36, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –22 +/
    кошмар.
    делали user-friendly C, а получился вырвиглазный Rust.
     
     
  • 2.31, Aukamo (ok), 14:33, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Ставил минус ибо не понял: при чём тут Rust, вообще?
     
     
  • 3.33, Аноним (33), 14:40, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Тоже минус. Лучшего синтаксиса мои глаза не видели.
     
  • 2.70, СССР (?), 23:24, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    но лучше чем питон
     
  • 2.114, Аноним (113), 03:27, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Делали шаблонизатор для домашних страниц, а получился язык для говнокодинга.
     
     
  • 3.125, onanim (?), 11:51, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Делали шаблонизатор для домашних страниц, а получился язык для говнокодинга.

    начиная с 7ой версии пых стал довольно неплох.

     
     
  • 4.132, Aukamo (ok), 17:25, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > начиная с 7ой версии пых стал довольно неплох.

    У меня на 5-6 версиях сформировался такой рвотный рефлекс, что до сих пор рефлексивно ищу близжайший пакет при упоминании PHP.

    Не смотря на моё к нему отношение, PHP занял свою нишу. Для непонятливых: синтаксис тут вообще ни при чём. Си подобный синтаксис был выбран только ради повышения узнаваемости и читаемости (можете вспомнить когда впервые увидили тот-же python или rust, не зная ничего о нём), но сам язык создавался для "домохозяек" и, полагаю, таким и остался. Здесь очень хотелось бы встретить уважаемого Symfony-ста, который разложит в 2х словах как там обстоят дела.

    Как, уже писал выше, не слежу за языком и всё что с ним происходит уже больше десятка лет. Может он, вдруг, стал строго академическим, но сильно сомневаюсь.

     
     
  • 5.135, Онаним (?), 10:16, 16/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    "Шашечки или ехать".
    Язык как был, так и остался строго прикладным.
    Его пытаются слегка обрастить некоторыми "академичными" конструкциями для неосиляторов, но к счастью core team  более-менее адекватна.
     

  • 1.8, InuYasha (??), 10:39, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –10 +/
    Пока статическую типизаицю не введут, плюс не поставлю.
    Но они не введут. И уже не ввели. Путь едят кактус.
     
     
  • 2.12, Аноним (11), 10:53, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Это сегрегация все типы должны иметь равные возможности.
     
     
  • 3.16, Аноним (15), 11:46, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    И делить на ноль надо разрешить, оскорбление нуля!
     
     
  • 4.20, anonymous (??), 12:27, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Никто не мешает добавить число бесконечность (беззнаковый, как в сфере Римана) и разрешить деление на ноль.
     
     
  • 5.111, Da (?), 03:10, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Деление на 0 не равно бесконечности.
    Деление на 0 просто не имеет смысла по определнию операции деления.
     
     
  • 6.124, ыы (?), 11:41, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Просто мы еще чегото не знаем о окружающем нас мире...
     
  • 4.37, Sw00p aka Jerom (?), 15:40, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    а че тут такого, этоже по факту функция рандома.
     
  • 4.54, Ag (ok), 19:47, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тогда  вам нужен APL, правда там только 0 / 0 (даст 1). Но все же хоть какая то инклюзивность ;)
     
  • 4.85, Аноним (85), 10:38, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В Джаваскрипте можно делать на 0 будет Infininty. Можно даже стринг поделить на ноль будет NaN. Вот где свобода и права всех типов соблюдены.
     
     
  • 5.107, mr.Clin (?), 00:02, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, ровно до тех пор пока не всрёшься с такими приколами )))
     
  • 4.120, 1 (??), 10:10, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Так "Ноль" или "Нуль" ?
     
  • 2.22, Онаним (?), 12:51, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    PHP - язык с динамической типизацией изначально, и будет таковым.
    Меня например даже напрягает этот последний сахар для не осиливших парадигму.
     
     
  • 3.87, Аноним (85), 10:43, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    PHP язык со слабой неявной динамической типизацией. Хотя нужно это только для собеседования.
     
     
  • 4.88, Онаним (?), 12:05, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Да и для собеседования не особо нужно, но таки да.
    Кстати половина режется на оптимизации in_array() для большого числа выборок.
     
  • 4.116, Здрасьте (?), 07:57, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ты слабую с нестрогой не перепутал? Си++ — язык со слабой типизацией, например.
     
  • 2.45, Lex (??), 17:57, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Дык ввели. «Си» называется.
    Можешь поставить ему плюсик и начинать кодить на нем сайты
     
     
  • 3.99, Аноним (99), 16:27, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Хорошая идея, одобряю.
     
     
  • 4.134, InuYasha (??), 10:16, 16/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Так давно уже https://cppcms.com
     

  • 1.14, Аноним (14), 11:33, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А не проще ли с таким синтаксисом писать сразу на статически типизируемом языке?
     
     
  • 2.17, acroobat (??), 11:54, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Опять со своим руби лезут.
     
     
  • 3.18, Аноним (18), 12:03, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А ты не завидуй.
     
  • 2.23, Онаним (?), 12:53, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Проще.
    Собственно писать на PHP никто за хвост никого не тянет - но на нём пишется очень много.
    Это показатель того, что язык удобен для своих задач.
     
     
  • 3.46, Аноним (46), 18:25, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • –7 +/
    Миллионы мух. На баше тоже много написано, но это вообще ни о чем не говорит.
     
     
  • 4.50, Онаним (?), 19:19, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Говорит.
    О том, что он удобен для своих задач.
    В отличие от хипстерских поделок со "стройной идеологией"... и ничем, кроме идеологии, которая на практике оказывается не такой уж и стройной (недавние события ака хруст вс ядро).
     
  • 4.83, Annoynymous (ok), 10:31, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    У меня сайт на баше. Вообще не вижу проблемы.
     
  • 3.104, Аноним (104), 22:13, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    На нем пишется очень много промолчу что он 'простой' все ошибки умирают вместе с интерпретатором после выполнения запроса
     
     
  • 4.110, Sw00p aka Jerom (?), 01:48, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > На нем пишется очень много промолчу что он 'простой' все ошибки умирают
    > вместе с интерпретатором после выполнения запроса

    @ убей все ошибки :) только за этот символ я его (пых) "ненавижу".

     
     
  • 5.128, Онаним (?), 13:33, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Просто не надо сверх меры применять, где не надо.
    Оно не зря существует: в C вы вообще ничего не получите на выход, кроме кода ошибки, а здесь можете получить сверху дебажный вывод, который и подавляется @ там, где он ожидаем, но не нужен.
    Допустим надо почитать сокет, и наплевать на то, что сие чтение может выстрелить дебагом ошибки - в данный конкретный момент. Все ошибки я обработаю оптом позже, или просто сокеты закрою, вне зависимости от состояния.
     
     
  • 6.145, Sw00p aka Jerom (?), 22:12, 17/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > а здесь можете получить сверху дебажный вывод, который и подавляется @ там, где он ожидаем, но не нужен.

    отлично, одно реальное применение, во время отладки, согласен помогает, временно замьютить лишнюю инфу об ошибках, но когда такое видишь в продакшене, сами знаете что.


     
  • 5.129, Онаним (?), 13:36, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Впрочем, в восьмёрке некоторые файловые операции теперь стреляют эксепшнами, @#$%, и это @ не подавляется.
    И если я раньше мог @unlink написать для удаления файла/симлинка, которого может не быть - то теперь мне надо лепить бойлерплейт из @is_file или try { } catch { } вокруг. Напрягает, пришлось для себя обернуть в unlinkSilently() :D
     
     
  • 6.136, Онаним (?), 10:19, 16/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    @is_file() кстати плохой бойлерплейт. Надо "почему" в список вопросов новичкам включить :D
     
  • 6.146, Sw00p aka Jerom (?), 22:18, 17/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Напрягает, пришлось для себя обернуть в unlinkSilently() :D

    через error_handler можно как игнорировать, так и выбрасывать исключения если функция их не поддерживает, но при этом нужно все оборачивать в try/catch


     
  • 2.53, Skynin (?), 19:38, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Разработка на ЯП с статической типизацией - медленнее чем на ЯП с динамической, до определенного размера кодовой базы/команды. Может доходить до "в разы" медленнее.

    Так что - никогда никакой ЯП с обязательной стат типизацией не заменит PHP/Python/Ruby/JS/(еще какой появится, мало ли)

    "Академики" и прочие идеалисты пусть воют себе. Есть реалии разработки, которые формируют те кто платит деньги за разработку. А это никак не академики и форумные "ортодоксы" и пуристы.

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

     
     
  • 3.57, Рева RarogCmex Денис (?), 21:05, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Я бы поспорил, сильно зависит от задачи и от языка. На том же хаскеле добавление прстой конкурентности или многопоточности зачастую требует всего трех-четырёх выражений.
    Иногда одного достаточно, статья с хабра "сложность простоты" об этом. Товарищ просто заменил mapM на mapConcurently и получил ускорение в 4 раза.
    Плюс в том же хаскеле автовывод типов есть уже 2 десятилетия как.

    Короче, вывод простой: пилите, Шура, пилите, они золотые. Работать надо, а не коментарии писать.

     
     
  • 4.79, Skynin (?), 07:36, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Автовывод типов не делает ЯП с статический типизацией языком с динамической типизацией.

    А пример приведён смешной,студенческий. Разработка состоит чаще из другой работы, а не оптимизации быстродействия парой чудодейственных строчек кода

     

  • 1.21, Онаним (?), 12:38, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Добавлена поддержка легковесных потоков, именуемых файберами (Fiber)

    Вау. Накотец-то, ей-богу.
    У меня давно есть где их применить, очень много где.

     
     
  • 2.24, Онаним (?), 12:53, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    (честно говоря задолбался писать обёртки вокруг разных селектов сокетов и прочих ожиданий состояния)
     
     
  • 3.60, Аноним (60), 21:29, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я не пхп-шник, но всякие селекты и прочие функции которые ожидают события в ядре как минимум нужно адаптировать под файберы, так как это по факту кооперативная многозадачность и селект в одном файбере положит все синхронное ядро пхп в спячку. Поправьте, если не так
     
     
  • 4.61, Онаним (?), 22:11, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Всё так. Речь исключительно про либо неблокирующие вызовы, либо очень малый таймаут.
    Т.е. исключительно для проверки состояния.

    Сейчас приходится всё это серьёзно обёртывать по сути карманной реализацией тех самых файберов, что имеет достаточно негативный эффект в плане потребления ресурсов проца, ну и за контекстом, который определяет точку "перевхода", в виде конечного автомата внутри - следить самостоятельно, что имеет те же последствия. Здесь же наконец-то можно будет избавиться от фиговой тучи бранчинга, заменив на линейный код с suspend-resume.

     
  • 4.64, Онаним (?), 22:29, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    По сути fread()/fwrite() на стримах вполне себе может быть неблокирующий, включая сокеты.
    socket_select()'у можно скормить 0 в таймаут, и он становится неблокирующим.
    У MySQL есть асинхронное API, которое как раз хорошо на файберы ложится.
    У CURL есть асинхронное API, которое как раз хорошо на файберы ложится.
    В ZeroMQ и много ещё где тоже есть возможность делать неблокирующие вызовы.

    Короче, пользы очень много. С тем же ZeroMQ например - там типовой случай, когда полон буфер на запись, и надо бы подождать. Без файберов поддержание очереди REQ/REP-based протокола например со своевременной отменой / пропагацией фейла - это сущий ад, на файберы оно ляжет просто прекрасно - можно убить сфейлившийся файбер и создать новый, который попытается заново согласовать внутренний протокол.

     
     
  • 5.68, Аноним (69), 23:13, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вот только помимо самих файберов нужна реализация асинхронного апи в PDO, ext/curl и всем прочем.

    Иначе все это закончится написанием асинхронных обвязок к libmysql и прочим libcurl на FFI, что, конечно, интересное упражнение, но ну его.

     
     
  • 6.71, Онаним (?), 23:55, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, указанные уже есть.
    Судя по тому, что они отдельно parallel с файберами тестировали уже - мы ещё и треды со временем увидим :D
     
     
  • 7.93, Gemorroj (ok), 13:27, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    так закопали треды же вроде https://github.com/krakjoe/pthreads
     
     
  • 8.94, Онаним (?), 13:31, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Совместимость с parallel тем не менее уже тестировали Собственно от parallel ... текст свёрнут, показать
     
  • 4.65, Онаним (?), 22:31, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ещё даже без I/O - всякие шедулеры событий офигенно ложатся на файберы. Можно одновременно внутри кода стартовать несколько длинных событий, и забить на них, пока они не выполнятся. Параллельно что-то откуда-то почитывая (таймер например), и стартуя ещё по необходимости.
     

  • 1.27, Аноним (27), 13:53, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Ученые покусали редакторов опеннета.

    >Добавлена поддержка легковесных потоков, именуемых файберами (Fiber) и позволяющими управлять распараллеливанием на низком уровне

    Под "распараллеливанием" надо понимать non-blocking concurrent multitasking I\O. А не параллельное исполнение двух файберов.

     
     
  • 2.40, Онаним (?), 16:10, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Там нет параллельного исполнения вообще, кстати.
    Там кооперативное исполнение блокирующих друг друга псевдопотоков - то есть никакого чистого параллелизма нет, и на несколько ядер не раскинуть, но зато это очень удобно с т.з. организации ожидания ввода.
     
     
  • 3.44, Аноним (43), 17:45, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Так на пхп и пишут код, который большую часть времени ожидает ввода-вывода - например, ждёт выполнения запроса к MySQL.
    Числодробилки на пхп вряд ли кому-то придёт в голову писать.
     

  • 1.38, Аноним (38), 16:03, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Пхп в принципе норм, окромя отсутствием обратной совместимости.
     
     
  • 2.47, Аноним (46), 18:28, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Тогда и node.js норм.
     
     
  • 3.51, Онаним (?), 19:27, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    duktape - норм
    А node.js - это не язык.
     
     
  • 4.52, Онаним (?), 19:27, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    (и не его реализация)

    V8 - тоже норм

     

  • 1.55, Аноним (55), 20:55, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну и синтаксис, жесть. И ещё говорят, что пхп прост для новичков
     
     
  • 2.62, Онаним (?), 22:13, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Порог вхождения в PHP уже давно за пределами новичкового.
    Просто сохранившееся старое заблуждение :)
     
     
  • 3.66, Аноним (38), 22:32, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Новички уже совсем не те. Раньше смузи не пили, потому и вкатывались в инженерные и прочие не тривиальные вещи легче, т.к. мозги были направлены на решение задач, а не на ритуалы скрам, бородки и балансбоарды всякие.
     
  • 2.63, Онаним (?), 22:14, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    С другой стороны синтаксис в общем виде C-подобен, поэтому если есть опыт с C, и нет застарелых костей в мозге на предмет строгой типизации - проблем не будет.
     
     
  • 3.137, InuYasha (??), 22:44, 16/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    По жизни с пятисотками? )

    Я сомтрю, доброта через забор переливается, если ты желаешь кому-то жить с:
    Type error: Argument 1 passed to App\Api::setInitParams() must be of the type integer, string given, called in /opt/AppBase/src/ApiBundle/EventHandler.php on line 422

    ну, или классическим Expected argument of type "integer", "null" given.

     
     
  • 4.139, Онаним (?), 09:16, 17/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну я ж говорю, для привыкших к тому, что их компилятор за ручку водит - не годится.
     
     
  • 5.140, InuYasha (??), 10:11, 17/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    У вас, пыхарей, наверное, две жизни. И одну из них вы тратите на санацию аргументов. )
     
     
  • 6.144, Онаним (?), 13:32, 17/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Санацию пользовательского ввода, если точнее. И привычка очень хорошая.
    Можете на неё время не тратить, но когда вылезет очередная дырка - не жалуйтесь.
    А с аргументами в целом всё как раз гораздо проще, ряд конверсий типов имплицитен, и это очень удобно, меньше обёрток вокруг реального алгоритма там, где они предполагаются в любом случае.
     

  • 1.56, Рева RarogCmex Денис (?), 20:59, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Интересно, такими темпами PHP дорастёт до Хаскеля или даже выше? Когда зависимые типы туда добавят?
     
     
  • 2.58, Lex (??), 21:18, 13/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Уже давно перерос если сравнивать количество проектов в т.ч новых с применением того и другого
     
     
  • 3.101, Аноним (101), 17:51, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вот только качество и количество это разные вещи xD
     
     
  • 4.122, Lex (??), 11:28, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Вот только качество и количество это разные вещи xD

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

     
  • 2.86, Плюсовик (?), 10:42, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Интересно, такими темпами PHP дорастёт до Хаскеля или даже выше?

    Эти два языка создавались для выполнения разных задач и идут разными путями.

    Это как автобус и самосвал. И то, и другое автомобиль, но эксплуатация их в корне различается.

     

  • 1.72, Онаним (?), 23:57, 13/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Как жы я это пропустил-то

    > Добавлена возможность использования префиксов "0o" и "0O" для восьмеричных чисел

    А можно ещё 0_o и 0_O?

     
     
  • 2.73, Аноним (73), 00:41, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    О0о0O
     
  • 2.74, Аноним (73), 00:41, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А можно ещё 0_o и 0_O?

    Да: (_O_)

     
     
  • 3.92, Led (ok), 12:53, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +7 +/
    >Да: (_O_)

    Это только для маководов.

     
  • 3.98, Аноним (80), 15:11, 14/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    это для местных анонимных коментаторов

     
  • 2.117, Здрасьте (?), 07:59, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Можно так: 0_0 (подчерк — допустимый разделитель в числах).
     
     
  • 3.118, Онаним (?), 08:19, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    0_0 да, но оно не отражает всех моих эмоций, особенно при использовании восьмеричных чисел за пределами chmod().
     

  • 1.103, Аноним (103), 21:04, 14/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Помянем.
     
  • 1.106, Уася (?), 23:16, 14/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Автор! Исправь листинги! Не нужны эти 4 пробела спереди строк.
    И также используй всегда два пробела в статьях, конвертни в prettier онлайн. А то с телефона это не читается, а хотя могло бы!
     
  • 1.119, Аноним (119), 08:39, 15/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > $array1 = ["a" => 1];
    > $array2 = ["b" => 2];
    > $array = ["a" => 0, ...$array1, ...$array2];
    > var_dump($array); // ["a" => 1, "b" => 2]

    В vardump'е ["a" => 0] не потерялось?

     
     
  • 2.123, Аноним (123), 11:38, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Его заменило "a" => 1.
     
  • 2.127, Онаним (?), 13:29, 15/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не, всё ок. Одинаковый ключ, значение заменяется на последнее.
     

  • 1.138, АнонимнаяЗалупа (?), 04:21, 17/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    PHP для богов
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру