The OpenNET Project / Index page

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

Предварительный выпуск проекта PXP, развивающего расширенный диалект языка PHP

16.05.2023 18:16

Опубликован первый тестовый выпуск реализации языка программирования PXP, расширяющего PHP поддержкой новых синтаксических конструкций и расширенных возможностей runtime-библиотеки. Написанный на PXP код транслируется в обычные PHP-скрипты, выполняемые при помощи штатного интерпретатора PHP. Так как PXP лишь дополняет PHP, он совместим со всеми существующим PHP-кодом. Из особенностей PXP отмечается расширения системы типов PHP для лучшего представления данных и применения статического анализа, а также поставка расширенной библиотеки классов для упрощения написания безопасного кода.

Первая версия преподносится как начальный экспериментальный прототип, пока не пригодный для повсеместного применения и тестирующий реализацию, написанную на PHP и использующую парсер PHP-Parser (первый прототип пытались разрабатывать на Rust, но потом отказались от этой идеи). Из доступных в первой версии расширенных возможности отмечается только поддержка многострочных замыканий:


   $name = "Ryan";

   $hello = fn (): void {
	echo "Hello, {$name}!";
   };
   $hello();

В дальнейшем рассматривается включение в PXP таких возможностей, как сокращённые и блочные варианты выражения "match", условный оператор "return", псевдонимы типов, дженерики, вариативные типы, неизменяемые переменные, сопоставления с образцом и перегрузка операторов.

  1. Главная ссылка к новости (https://github.com/pxp-lang/px...)
  2. OpenNews: Релиз языка программирования PHP 8.2
  3. OpenNews: Facebook анонсировал виртуальную машину HipHop и JIT-компилятор для языка PHP
  4. OpenNews: Выпуск PHPStan 1.0, статического анализатора для кода на языке PHP
  5. OpenNews: Facebook представил Hack, вариант языка PHP со статической типизацией
  6. OpenNews: Разработчики PHP представили интерпретатор нового поколения (PHPNG)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/59142-pxp
Ключевые слова: pxp, php
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (95) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 18:36, 16/05/2023 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +4 +/
     

     ....ответы скрыты (2)

  • 1.3, Бывалый смузихлёб (?), 18:44, 16/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > и перегрузка операторов

    вот с этого начинается всё плюсоподобное зло

     
     
  • 2.15, Аноним (15), 19:04, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +12 +/
    Зло - это писать гoвнeцo вида 'multiply_complex(add_complex(c1, c2), c3)' вместо '(c1 + c2) * c3', и только перегрузкой операторов оно и решается.
     
     
  • 3.24, Аноним (24), 20:08, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А другие примеры есть? Если целью является поддержка математических библиотек, то можно разрешить перегрузку путём написания плагинов к компилятору. Благо их будет раз два и обчёлся. А давать доступ к перегрузке произвольному стороннему коду - страшное зло.
     
     
  • 4.38, Аноним (38), 21:12, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И получить lock на конкретный компилятор.
     
     
  • 5.41, Аноним (41), 21:23, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Дак там всего несколько кейсов придумали, на скидку: with overflow (zig), и более типичные matrix и vector (на манер glsl)
     
  • 4.42, Аноним (15), 21:49, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А другие примеры есть? Если целью является поддержка математических библиотек, то можно разрешить перегрузку путём написания плагинов к компилятору

    Каких ещё нахрен плагинов, к какому нахрен компилятору? Это обязано быть в стандарте языка.

    > Благо их будет раз два и обчёлся. А давать доступ к перегрузке произвольному стороннему коду - страшное зло.

    Нет, это базовая и абсолютно обязательная вещь, с которой начинается любой ЯВУ.

     
  • 4.47, Gemorroj (ok), 22:20, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а оно уже есть. GMP как раз так и умеет
     
  • 3.29, Аноним (29), 20:15, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Почему тогда в C++ нельзя просто делать [1] + [2], а надо воеичий push_back писать? Ну правиславно.

    И на процессоре как это выглядит? Вот +-/* на процессоре есть, а твоего поделия - нет.

     
     
  • 4.57, Анониссимус (?), 02:34, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А потому что непонятно. Что ты имел ввиду? Конкатенацию? Поэлементное сложение? Сумму всех элементов?

    Перегрузка применима и необходима там, где действие оператора очевидно и понятно. Иначе начинаются всякие приколы из жабаскрипта и петухона.

     
  • 3.32, YetAnotherOnanym (ok), 20:27, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Ога. Чтобы не утруждать мозг контролем, что за операнды в выражении. Очень удобно, когда надо кодить быстро и много, самое то для макакинга.
     
     
  • 4.44, Аноним (15), 21:55, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Чтобы не утруждать мозг контролем, что за операнды в выражении

    Разгружать мозг - первоочередная задача любых инструментов автоматизации, к которым относятся и ЯП.

    > Очень удобно, когда надо кодить быстро и много

    Тут чувствуется какой-то намёк что кодить быстро и много - это плохо, но не написано с какого это такого хрена.

     
     
  • 5.51, Аноним (51), 23:03, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >кодить быстро и много - это плохо, но не написано с какого это такого хрена.

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

     
     
  • 6.55, Аноним (55), 23:59, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вот именно поэтому и нужна автоматизация, чтобы снижать "много" до приемлимого уровня.
     
     
  • 7.64, Аноним (64), 04:00, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Сжимать "медленно" до "быстро" за счет автоматизации. Это высвобождает время, чтобы делать "много"

    "Много" получается напрямую, если много малоопытных сотрудников нанимать.    

     
  • 4.63, Аноним (64), 03:54, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Со статической типизацией это контролирует компилятор. С динамической - непредсказуемо. Приводить каждый операнд к нужному типу.
     
  • 3.66, Аноним (29), 08:06, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Явное всегда лучше не явного
     
     
  • 4.85, Вы забыли заполнить поле Name (?), 19:18, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Именно поэтому в питоне есть перегрузка операторов
     
  • 3.80, Аноним (80), 15:53, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Макаки вроде тебя только о комплексных числах и вспоминают при "перегрузке операторов"! Что говорит само за себя - перегрузка попросту не нужна.
     
     
  • 4.99, Анонист (?), 17:49, 19/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Ну реально. Вот видишь ты a + b и поди скажи что это такое, то ли строки конкатенируем, то от ин-ты складываем, то ли делаем rm -rf , потому что операторы можно перегружать.
     
  • 2.49, Аноним (49), 22:33, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В перле не началось.
     
     
  • 3.62, Аноним (64), 03:49, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    я бы сказал не поперло.
     
  • 2.61, Аноним (64), 03:48, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    >> и перегрузка операторов
    > вот с этого начинается всё плюсоподобное зло

    Вроде удобно для себя. Всеобщее понимание этих операторов достигнуть трудно.

     

  • 1.4, Аноним (4), 18:44, 16/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    уже есть тайпскрипт/яваскрипт, в котором нет бредового апи в стиле пыха, в котором json_parse("null") и json_parse("ну че как дела лол") оба возвращают null, а за ошибкой парсера надо лезть в какое-то стороннее место в стиле сишного errno. Не то, чтобы я критиковал си, но от высокоуровневого-то языка ожидаешь большего.
     
     
  • 2.10, Аноним (10), 18:55, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    function json_parse(string $json,
        ?bool $associative = null,
        int $depth = 512,
        int $flags = 0) {
       return json_decode($json, $associative, $depth, $flags | JSON_THROW_ON_ERROR);
    }
     
     
  • 3.19, NULL (??), 19:47, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Начиная с 8 версии исключение стало по умолчанию при ошибке парсинга
     
     
  • 4.21, Аноним (4), 19:54, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    это в каком году случилось? вернее так: на сколько десятилетий (!) они отстали от парсеров стд-библиотек других языков?
     
     
  • 5.27, Аноним (27), 20:14, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Не примерно 300 миллионов лет.
     
     
  • 6.72, Вы забыли заполнить поле Name (?), 12:19, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Световых лет
     

  • 1.5, Cucumber (?), 18:45, 16/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Интересна история неуспеха, почему у них не получилось написать парсер на rust-е?
     
     
  • 2.7, Аноним (27), 18:50, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Давай начнём с того что ты скажешь какие есть ещё версии кроме одной очевидной причины.
     
  • 2.11, Аноним (10), 18:56, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Потому что PHP уже умеет парсить сам себя, а на rust это всё надо писать и поддерживать.
     
     
  • 3.17, Аноним (17), 19:37, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не умеет, по ссылке какой-то костыль с гитхаба, написанный на пыхе.
     
     
  • 4.45, Аноним (10), 22:02, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Все эти "костыли" предоставляют более удобные API к результату встроенной функции https://www.php.net/manual/en/function.token-get-all.php
     
     
  • 5.46, Аноним (10), 22:04, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    И даже даже такое есть

    https://www.php.net/manual/en/phptoken.tokenize.php

    (PHP лет 5 не трогал, не в курсе, что там в 8)

     
  • 3.40, Аноним (40), 21:18, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    в смысле не умеет? лол https://github.com/nikic/PHP-Parser
     
  • 2.79, Аноним (80), 15:51, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А что, самая очевидная причина тебе почему-то не подходит? (что раст - полное _г_вно)
     

  • 1.6, bircoph (ok), 18:48, 16/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Слава mojo покоя не даёт?
     
     
  • 2.8, Аноним (27), 18:50, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Mojo пока что топчик. Ничего лучше программистская языкологогия пока что не смогла придумать.
     
     
  • 3.69, 1 (??), 09:17, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну когда введут операторы складывания эмодзи (например человечек + конь = кентавр) ... модным молодёжным это зайдёт.
     
     
  • 4.75, Аноним (75), 14:28, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    ЧатЖПТ кстати умеет складывать эмодзи если что. Но его надо правильно попросить.
     
     
  • 5.82, A no name (?), 17:19, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    ну позязя?
     

  • 1.9, Анонимусс (?), 18:55, 16/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > первый прототипы пытались разрабатывать на Rust, но потом отказались от этой идеи

    ... и написали на уже знакомом им php))

    Бедняги, не осилили строго типизированный язык.
    Тут злые языки поговаривают, что на расте только фронтендщики, ака js-ники или пыхеры пишут.
    А тут оно вот как оказалось

     
     
  • 2.14, Бывалый смузихлёб (?), 19:01, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +4 +/
    парсер написать в принципе непростая задача
    а на ЯП с уродливостью синтаксиса уровня раста - и вовсе попахивает наказанием за грехи при жизни

    Просто посоны вовремя вспомнили что не грешили и ели кашу. И вообще, ещё живы.
    В общем, тема с парсером на расте откладывается. Пока что.

     
     
  • 3.31, Анонин (?), 20:24, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Это в треде про пыху пишут что раст уродливый, серьезно?
    Что вообще может быть отвратительнее синтаксиса пыхи?
     
     
  • 4.35, Анонус (?), 20:43, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Перл?
     
  • 4.36, Аноним (36), 20:45, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Может вы его с перл перепутали?
     
  • 4.59, Круз (?), 03:42, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Rust.
     
  • 4.92, Бздительный поцыент (?), 11:55, 18/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Питон с хрустом.
    Синтаксис пыхи, за некоторыми вычетами, сильно си-подобен в целом.
     

  • 1.12, Аноним (12), 18:59, 16/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    define('LARAVEL_START', microtime(true));

    Хотели писать на расте, в итоге переписали на ларавель с симфони, как обычно.

     

  • 1.18, Аноним (18), 19:38, 16/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Там X или Х по центру?
     
     
  • 2.52, Аноним (51), 23:06, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    PXP = P² . Пых квадрат.
     

  • 1.20, Аноним (-), 19:49, 16/05/2023 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +1 +/
     
  • 1.23, Kusb (?), 20:02, 16/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я бы хотел ОС на компилируемом php. И скрипты там на php.
     
     
  • 2.26, Аноним (27), 20:12, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    И чем же тебе таким KPHP не угодил, от Пашкета?
     
     
  • 3.28, Kusb (?), 20:14, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > И чем же тебе таким KPHP не угодил, от Пашкета?

    А в принципе да. Но там скорее всего не будет некоторых возможностей для создания ОС и ассемблерных вставок, например. :) Может рантайм не к месту.
    Но kphp может быть лучшим вариантом для создания ОС на диалекте PHP.

     
     
  • 4.30, Kusb (?), 20:15, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Оно сильно захочет обычную ОС?
     

  • 1.34, BrainFucker (ok), 20:40, 16/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Написанный на PXP код транслируется в обычные PHP-скрипты, выполняемые при помощи штатного интерпретатора PHP.

    Тогда вообще непонятно зачем было изобретать велосипед, просто сделали бы транслятор из JS или Python в PHP.

     
     
  • 2.37, yaskhan (?), 21:07, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я написал транспилер с Питона, но похоже всем все равно. Или ее никто не видит потому что это форк.
     
     
  • 3.70, n00by (ok), 09:49, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Запилите новость, увидите, что всё равно. 500 экспертов будут писать три дня и три ночи, как им это всё безразлично.
     
  • 3.90, Аноним (90), 05:01, 18/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это интересно. Но если не опубликуешь свой проект хоть где-нибудь, то о нем никто и не узнает, логично же. Сейчас реальность такова, что нужно приложить хотя бы какие-то усилия по промоушену своего проекта. Напиши на хабре или для начала обсуди здесь на форуме.
     

  • 1.43, Golangdev (?), 21:54, 16/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Зачем это ?)

    Я слышал, что php-шники массово на Go переходят, когда не хватает возможностей

     
     
  • 2.54, Аноним (54), 23:59, 16/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Так на го от безнадеги переходят, иначе бы переходили на Карбон и Мойо
     
  • 2.67, Ilya Indigo (ok), 08:15, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я не перехожу, и мои коллеги не переходят и подобный бред слышу впервые!
     
     
  • 3.87, Golangdev (?), 01:39, 18/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Ну значит вы не во что (пока) не упёрлись, вестимо.

    Читаем внимательно:

    > когда не хватает возможностей

    Я же не говорю что PHP плохой %)

     
     
  • 4.88, Ilya Indigo (ok), 02:20, 18/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    У меня недавно возникла проблема в том, что php многопоточность возможна только через вызов exec('... &'), после которой процесс живёт своей жизнью и не то что его судьба, его pid мне не известен!
    Проблема возникла в отслеживании запущенных процессов и пробивания их при необходимости.
    Решил передачей в exec уникального или определённого аргумента, по которому, в савокупности со всей командной строкой вызываю killall через exec() при необходимости (для снятия блокировки, которая долго весит).
    А если нужно чтобы процесс, с такими же аргумертами не дублировался, можно в начале скрипта, который будет вызываться через exec('... &') такое прописать, и он не запустит новый процесс если старый выполняется.

    #!/usr/bin/php
    <?php
    if(empty($_SERVER['argv'][3]))
    {
    echo 'No arg1, arg2 and arg3 parameters passed!', "\n";
    exit(1);
    }
    elseif(exec('pgrep -cf '.escapeshellarg(implode(' ', $_SERVER['argv']))) > 1)
    exit(0);

    Проблема хоть и кастыльно, через внешние вызовы, но решена.
    Как с эти в пайтоне дела обстоят?
    И как это в го решается и не возникнет ли там других проблем?
    Го с nginx вообще можно использовать?

    Если бы меня припёрло, я бы первым делом попробовал бы написать Си-расширение, но ни как не что-то на го.

     
     
  • 5.89, Golangdev (?), 02:39, 18/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Как с эти в пайтоне дела обстоят?

    Хоть я Golangdev, но отправной точкой может быть https://docs.python.org/3/library/threading.html

    > И как это в го решается

    С помощью горутин(если упростить донельзя, то можно считать за поток).

    > вызываю killall через exec() при необходимости

    для "убийства" горутины в Go используют контекст и cancel https://www.sohamkamani.com/golang/context-cancellation-and-values/ (привет, культура кэнселинга %) )

    > Го с nginx вообще можно использовать?

    можно, но в отличие от PHP на Go в самом рантайме есть полноценный HTTP-сервак, так что нгинкс, строго говоря, не особо нужен

    > не возникнет ли там других проблем?

    Конечно же возникнут. Другой вопрос, насколько в перспективе пользы принесёт переезд на Go по ставнению с остальными решениями (костыли, Си-расширения, и проч). Судя по популярности Go, можно считать что он окупается.

     
  • 5.91, Хухрымухры (ok), 11:00, 18/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    В linux есть flock для защиты от повторного запуска комманды...

    > php многопоточность возможна только через вызов exec('... &')

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

    Так же у вас упадёт сервер если вы запустити 100500 комманд через 'exec', тогда как гошечка отработает их и даже не заметит.

     
     
  • 6.93, Бздительный поцыент (?), 11:58, 18/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Файберы - это таки не нормальная многопоточка с разнесением по тредам, а просто возможность прыгать между корутинами в пределах одного процесса/треда, самая-самая базовая. Впрочем, обвязка над таковой делается легко и ненавязчиво - и появляется достаточно удобная асинхронность. Но это таки не многопоточность. Есть какой-то навесной костыль для трединга, даже местами работает, но в продакшн такое страшно.
     
  • 6.95, Ilya Indigo (ok), 12:05, 18/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > В linux есть flock для защиты от повторного запуска комманды...

    И толку от этого?
    Мне нужно ограничить не повторный запуск всего скрипта, а ограничить запуск скрипта с точно такими же аргументами, и никак не ограничивать запуск этого скрипта, но с другими аргументами, при условии что они уже НЕ запущены.
    pgrep -cf для этого подходит идеально!

    >> php многопоточность возможна только через вызов exec('... &')
    > Я как мигрировавший с пыхи голанг раб скажу что в пыхе есть
    > для многопоточки файберы...

    Файберы появились недавно, в php 8.1 и на момент появления было не понятно как ими пользоваться.
    https://www.php.net/manual/ru/language.fibers.php
    https://habr.com/ru/companies/vk/articles/551240/
    Судя по этой статье Файберы - это лютые костыли, которые даже не могут выполнятся одновременно, но при этом хорошо управляемы.
    Мне метод с exec('... &>>/path/to/log/or/dev/null &'); гораздо больше нравится, тут управляемость костыльная, но я получаю реальный многопоток!

    > Так же у вас упадёт сервер если вы запустити 100500 комманд через
    > 'exec', тогда как гошечка отработает их и даже не заметит.

    Во первых cli-скрипты и не предназначены чтобы их 100500 штук запускали, для этого есть php-fpm и он должен обрабатывать основную нагрузку, а cli-скрипты выполнять какие-то служебные действия. Если у вас не так, то у вас (были) проблема в архитектуре приложения.
    Если всё-таки зачем-то и нужно запускать 100500 cli-скриптов, то нужно их самостоятельно ставить в очередь и обрабатывать порциями, в зависимости от ресурсов сервака.

     
  • 5.97, Ilya Indigo (ok), 16:54, 18/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > вызываю killall через exec()

    Поправляюсь, killall НЕ умеет работать с полным именем процесса (командой запуска), так что нужно использовать связку 'pgrep -f ...' + 'kill -9 ...'.




    unset($pids, $exit);
    exec('pgrep -f '.escapeshellarg('...'), $pids, $exit);
    if($exit == 0 && count($pids))
    {
    foreach($pids as $pid)
    {
    if(is_int($pid))
    {
    unset($out, $exit);
    exec('kill -9 '.$pid, $out, $exit);
    if($exit == 0)
    error_log(date_now().' - Процесс '.$pid.' завершён.'."\n", 3, LOG);
    }
    }
    }



     
     
  • 6.102, Аноним (102), 17:34, 21/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > так что нужно использовать связку 'pgrep -f ...' + 'kill -9 ...'

    Вроде там где есть pgrep - есть и pkill, так что связка обычно не нужна.

     
     
  • 7.104, Ilya Indigo (ok), 03:54, 22/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Благодарю, да в этом примере 'pkill -9 -f ...' достаточно, не знал про него.
    В реальном примере упростил, используя связку 'pgrep -cf ...' + 'pkill -9 -f ...', так как мне нужно знать есть ли вообще эти процессы или нет.
     
     
  • 8.107, Аноним (102), 14:30, 22/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Если нужно знать - _были_ или нет, то можно проверять код возврата pkill А для ... текст свёрнут, показать
     
  • 5.101, Аноним (102), 17:27, 21/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > У меня недавно возникла проблема в том, что php многопоточность возможна только через вызов exec('... &'),

    pcntl_fork чем не устроил?

    > после которой процесс живёт своей жизнью и не то что его судьба, его pid мне не известен!

    php -r '$res=proc_open("php -r \"sleep(5);\" >/dev/null 2>&1 &", array(["pipe","r"], ["pipe","w"], ["pipe","w"]), $p); echo implode("\n",proc_get_status($res)), "\n";'

     
     
  • 6.103, Аноним (102), 18:20, 21/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Т.е. даже вот так:
    php -r '$res=proc_open("php -r \"sleep(15);\"", array(["pipe","r"], ["pipe","w"], ["pipe","w"]), $p); echo implode("\n",proc_get_status($res)), "\n";'

    А то рефлекторно лишнего написал.

     
  • 6.105, Ilya Indigo (ok), 04:26, 22/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    >> У меня недавно возникла проблема в том, что php многопоточность возможна только через вызов exec('... &'),
    > pcntl_fork чем не устроил?

    https://www.php.net/manual/ru/function.pcntl-fork.php
    Я не понял как это использовать и что мне это даёт.
    Мне нужно чтобы скрипт выполняя какие-то синхронные действия, запустил несколько, в зависимости от условий, асинхронных процессов, затем продолжил свою синхронную работу и по окончании или завершился сразу, не завершая при этом асинхронные процессы или дождался завершения последнего асинхронного процесса и завершился.
    Как это сделать с pcntl_fork() я не понял.

    > Т.е. даже вот так:
    > php -r '$res=proc_open("php -r \"sleep(15);\"", array(["pipe","r"], ["pipe","w"], ["pipe","w"]), $p); echo implode("\n",proc_get_status($res)), "\n";'

    https://www.php.net/manual/ru/function.proc-open.php
    С proc_open() не разобрался показалось слишком сложной и не понятно что такое pipe-ы и как с ними работать, если я предполагаю что процесс сам будет побочные действия выполнять и мне в него ничего передавать кроме аргументов вызова не нужно, а получить я от него хочу только pid или код возврата, когда он и подобные ему процессы завершаются. Но как это реализовать не совсем понял.
    С proc_get_status($res) мне в конце скрипта в бесконечном цикле с секундной задержкой каждый запущенный процесс опрашивать что ли нужно перед выходом, чтобы получить код возврата?
    Иначе $res я потеряю же после выхода?

     
     
  • 7.106, Аноним (102), 14:22, 22/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    У вас была жалоба на отсутствие многопоточности в пхп, ну так это оно и есть А ... большой текст свёрнут, показать
     
     
  • 8.108, Ilya Indigo (ok), 14:59, 22/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Благодарю за разъяснения Если я правильно понял эти ф-ии предназначены для web-... текст свёрнут, показать
     

  • 1.60, Аноним (64), 03:45, 17/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > поддержка многострочных замыканий:

    и приводится пример, который может быть записан в одну строку. Никаких \.

    > как сокращённые и блочные варианты выражения "match"

    if let из rust не дает покоя?

    > неизменяемые переменные

    опять же косит в сторону rust

     
     
  • 2.74, vitalif (ok), 14:01, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Что вообще за многострочные замыкания? В пхп же всегда были анонимные функции и они всегда были многострочные
     

  • 1.65, Аноним (65), 05:34, 17/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Блин ! fork php нужен ! иначе реально его угробят "сахаром"  :(
     
     
  • 2.83, A no name (?), 17:21, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    дык ещё четыре версии назад =)
     

  • 1.68, Аноним (68), 08:48, 17/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    зачем его вообще куда-то развивать? php4 вроде последняя версия котороя выполняла то для чего он задумывался
     
     
  • 2.84, A no name (?), 17:22, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    о! два стакана балтийского чаю сему сударю!
     

  • 1.71, vitalif (ok), 09:57, 17/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сделали транспайлер пхп в пхп с 1 фичей. Гениально! Шедевр!
     
     
  • 2.96, Аноним (96), 13:33, 18/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Смотри на наших глазах JS переизобретают. Вот если снять $ с переменных,
    то в чем разница?
     

  • 1.73, Вы забыли заполнить поле Name (?), 12:22, 17/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как поживает хип-хоп от запрещённой соц сети, у них же тоже был свой нескучный пых?
     
     
  • 2.76, Аноним (75), 14:29, 17/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Все эти любители хип-хоп пошли на Хак.
     
     
  • 3.100, Вы забыли заполнить поле Name (?), 21:50, 19/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > Все эти любители хип-хоп пошли на Хак.

    Хак-хак и в продакшен

     

  • 1.86, AskerTV (ok), 22:26, 17/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сделали PHP-проект на фреймворке Laravel и обозвали его новым языком программирования, совместимым и расширяющим PHP. И название такое, что теперь "Пэ-Ха-Пэ", будет подразумевать "старый" PHP, и новомодный PXP.

    https://github.com/pxp-lang/pxp/blob/main/pxp
    https://github.com/pxp-lang/pxp/blob/main/composer.json

     
     
  • 2.94, Бздительный поцыент (?), 11:59, 18/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    В целом сразу понятна ЦА, потому что в большинстве стран PHP и PXP до степени смешения далеко.
     

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



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

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