The OpenNET Project / Index page

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



"Предварительный выпуск проекта PXP, развивающего расширенный диалект языка PHP"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Предварительный выпуск проекта PXP, развивающего расширенный диалект языка PHP"  +/
Сообщение от opennews (??), 16-Май-23, 18:36 
Опубликован первый тестовый выпуск реализации языка программирования PXP, расширяющего PHP поддержкой новых синтаксических конструкций  и расширенных возможностей runtime-библиотеки. Написанный на PXP код транслируется в обычные PHP-скрипты, выполняемые при помощи штатного интерпретатора PHP. Так как PXP  лишь дополняет PHP, он совместим со всеми существующим PHP-кодом. Из особенностей PXP отмечается расширения системы типов PHP для лучшего представления данных и применения статического анализа, а также поставка расширенной библиотеки классов для упрощения написания безопасного кода...

Подробнее: https://www.opennet.ru/opennews/art.shtml?num=59142

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. Скрыто модератором  +4 +/
Сообщение от Аноним (1), 16-Май-23, 18:36 
Ответить | Правка | Наверх | Cообщить модератору

22. Скрыто модератором  +5 +/
Сообщение от YetAnotherOnanym (ok), 16-Май-23, 19:55 
Ответить | Правка | Наверх | Cообщить модератору

25. Скрыто модератором  +4 +/
Сообщение от Аноним (25), 16-Май-23, 20:10 
Ответить | Правка | Наверх | Cообщить модератору

3. "Предварительный выпуск проекта PXP, развивающего расширенный..."  –3 +/
Сообщение от Бывалый смузихлёб (?), 16-Май-23, 18:44 
> и перегрузка операторов

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

Ответить | Правка | Наверх | Cообщить модератору

15. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +12 +/
Сообщение от Аноним (15), 16-Май-23, 19:04 
Зло - это писать гoвнeцo вида `multiply_complex(add_complex(c1, c2), c3)` вместо `(c1 + c2) * c3`, и только перегрузкой операторов оно и решается.
Ответить | Правка | Наверх | Cообщить модератору

24. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +2 +/
Сообщение от Аноним (24), 16-Май-23, 20:08 
А другие примеры есть? Если целью является поддержка математических библиотек, то можно разрешить перегрузку путём написания плагинов к компилятору. Благо их будет раз два и обчёлся. А давать доступ к перегрузке произвольному стороннему коду - страшное зло.
Ответить | Правка | Наверх | Cообщить модератору

38. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (38), 16-Май-23, 21:12 
И получить lock на конкретный компилятор.
Ответить | Правка | Наверх | Cообщить модератору

41. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (41), 16-Май-23, 21:23 
Дак там всего несколько кейсов придумали, на скидку: with overflow (zig), и более типичные matrix и vector (на манер glsl)
Ответить | Правка | Наверх | Cообщить модератору

42. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +2 +/
Сообщение от Аноним (15), 16-Май-23, 21:49 
> А другие примеры есть? Если целью является поддержка математических библиотек, то можно разрешить перегрузку путём написания плагинов к компилятору

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

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

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

Ответить | Правка | К родителю #24 | Наверх | Cообщить модератору

47. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Gemorroj (ok), 16-Май-23, 22:20 
а оно уже есть. GMP как раз так и умеет
Ответить | Правка | К родителю #24 | Наверх | Cообщить модератору

29. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (29), 16-Май-23, 20:15 
Почему тогда в C++ нельзя просто делать [1] + [2], а надо воеичий push_back писать? Ну правиславно.

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

Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

57. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +2 +/
Сообщение от Анониссимусemail (?), 17-Май-23, 02:34 
А потому что непонятно. Что ты имел ввиду? Конкатенацию? Поэлементное сложение? Сумму всех элементов?

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

Ответить | Правка | Наверх | Cообщить модератору

66. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (29), 17-Май-23, 08:06 
Явное всегда лучше не явного
Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

85. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Вы забыли заполнить поле Name (?), 17-Май-23, 19:18 
Именно поэтому в питоне есть перегрузка операторов
Ответить | Правка | Наверх | Cообщить модератору

80. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (80), 17-Май-23, 15:53 
Макаки вроде тебя только о комплексных числах и вспоминают при "перегрузке операторов"! Что говорит само за себя - перегрузка попросту не нужна.
Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

99. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Анонист (?), 19-Май-23, 17:49 
Ну реально. Вот видишь ты a + b и поди скажи что это такое, то ли строки конкатенируем, то от ин-ты складываем, то ли делаем rm -rf , потому что операторы можно перегружать.
Ответить | Правка | Наверх | Cообщить модератору

49. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (49), 16-Май-23, 22:33 
В перле не началось.
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

62. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +2 +/
Сообщение от Аноним (62), 17-Май-23, 03:49 
я бы сказал не поперло.
Ответить | Правка | Наверх | Cообщить модератору

61. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (62), 17-Май-23, 03:48 
>> и перегрузка операторов
> вот с этого начинается всё плюсоподобное зло

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

Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

4. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +2 +/
Сообщение от Аноним (4), 16-Май-23, 18:44 
уже есть тайпскрипт/яваскрипт, в котором нет бредового апи в стиле пыха, в котором json_parse("null") и json_parse("ну че как дела лол") оба возвращают null, а за ошибкой парсера надо лезть в какое-то стороннее место в стиле сишного errno. Не то, чтобы я критиковал си, но от высокоуровневого-то языка ожидаешь большего.
Ответить | Правка | Наверх | Cообщить модератору

10. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (10), 16-Май-23, 18:55 
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);
}
Ответить | Правка | Наверх | Cообщить модератору

19. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +2 +/
Сообщение от NULL (??), 16-Май-23, 19:47 
Начиная с 8 версии исключение стало по умолчанию при ошибке парсинга
Ответить | Правка | Наверх | Cообщить модератору

21. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (4), 16-Май-23, 19:54 
это в каком году случилось? вернее так: на сколько десятилетий (!) они отстали от парсеров стд-библиотек других языков?
Ответить | Правка | Наверх | Cообщить модератору

27. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (27), 16-Май-23, 20:14 
Не примерно 300 миллионов лет.
Ответить | Правка | Наверх | Cообщить модератору

72. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Вы забыли заполнить поле Name (?), 17-Май-23, 12:19 
Световых лет
Ответить | Правка | Наверх | Cообщить модератору

5. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +4 +/
Сообщение от Cucumber (?), 16-Май-23, 18:45 
Интересна история неуспеха, почему у них не получилось написать парсер на rust-е?
Ответить | Правка | Наверх | Cообщить модератору

7. "Предварительный выпуск проекта PXP, развивающего расширенный..."  –4 +/
Сообщение от Аноним (27), 16-Май-23, 18:50 
Давай начнём с того что ты скажешь какие есть ещё версии кроме одной очевидной причины.
Ответить | Правка | Наверх | Cообщить модератору

11. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +4 +/
Сообщение от Аноним (10), 16-Май-23, 18:56 
Потому что PHP уже умеет парсить сам себя, а на rust это всё надо писать и поддерживать.
Ответить | Правка | К родителю #5 | Наверх | Cообщить модератору

17. "Предварительный выпуск проекта PXP, развивающего расширенный..."  –1 +/
Сообщение от Аноним (17), 16-Май-23, 19:37 
Не умеет, по ссылке какой-то костыль с гитхаба, написанный на пыхе.
Ответить | Правка | Наверх | Cообщить модератору

45. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +5 +/
Сообщение от Аноним (10), 16-Май-23, 22:02 
Все эти "костыли" предоставляют более удобные API к результату встроенной функции https://www.php.net/manual/en/function.token-get-all.php
Ответить | Правка | Наверх | Cообщить модератору

46. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (10), 16-Май-23, 22:04 
И даже даже такое есть

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

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

Ответить | Правка | Наверх | Cообщить модератору

40. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +3 +/
Сообщение от Аноним (40), 16-Май-23, 21:18 
в смысле не умеет? лол https://github.com/nikic/PHP-Parser
Ответить | Правка | К родителю #11 | Наверх | Cообщить модератору

79. "Предварительный выпуск проекта PXP, развивающего расширенный..."  –1 +/
Сообщение от Аноним (80), 17-Май-23, 15:51 
А что, самая очевидная причина тебе почему-то не подходит? (что раст - полное _г_вно)
Ответить | Правка | К родителю #5 | Наверх | Cообщить модератору

6. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от bircoph (ok), 16-Май-23, 18:48 
Слава mojo покоя не даёт?
Ответить | Правка | Наверх | Cообщить модератору

8. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (27), 16-Май-23, 18:50 
Mojo пока что топчик. Ничего лучше программистская языкологогия пока что не смогла придумать.
Ответить | Правка | Наверх | Cообщить модератору

69. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от 1 (??), 17-Май-23, 09:17 
Ну когда введут операторы складывания эмодзи (например человечек + конь = кентавр) ... модным молодёжным это зайдёт.
Ответить | Правка | Наверх | Cообщить модератору

75. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (75), 17-Май-23, 14:28 
ЧатЖПТ кстати умеет складывать эмодзи если что. Но его надо правильно попросить.
Ответить | Правка | Наверх | Cообщить модератору

82. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от A no name (?), 17-Май-23, 17:19 
ну позязя?
Ответить | Правка | Наверх | Cообщить модератору

9. "Предварительный выпуск проекта PXP, развивающего расширенный..."  –1 +/
Сообщение от Анонимусс (?), 16-Май-23, 18:55 
> первый прототипы пытались разрабатывать на Rust, но потом отказались от этой идеи

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

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

Ответить | Правка | Наверх | Cообщить модератору

14. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +4 +/
Сообщение от Бывалый смузихлёб (?), 16-Май-23, 19:01 
парсер написать в принципе непростая задача
а на ЯП с уродливостью синтаксиса уровня раста - и вовсе попахивает наказанием за грехи при жизни

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

Ответить | Правка | Наверх | Cообщить модератору

31. "Предварительный выпуск проекта PXP, развивающего расширенный..."  –2 +/
Сообщение от Анонин (?), 16-Май-23, 20:24 
Это в треде про пыху пишут что раст уродливый, серьезно?
Что вообще может быть отвратительнее синтаксиса пыхи?
Ответить | Правка | Наверх | Cообщить модератору

35. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +3 +/
Сообщение от Анонус (?), 16-Май-23, 20:43 
Перл?
Ответить | Правка | Наверх | Cообщить модератору

36. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (36), 16-Май-23, 20:45 
Может вы его с перл перепутали?
Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

59. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +5 +/
Сообщение от Круз (?), 17-Май-23, 03:42 
Rust.
Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

92. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Бздительный поцыент (?), 18-Май-23, 11:55 
Питон с хрустом.
Синтаксис пыхи, за некоторыми вычетами, сильно си-подобен в целом.
Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

12. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (12), 16-Май-23, 18:59 
define('LARAVEL_START', microtime(true));

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

Ответить | Правка | Наверх | Cообщить модератору

16. Скрыто модератором  +/
Сообщение от Аноним (-), 16-Май-23, 19:20 
Ответить | Правка | Наверх | Cообщить модератору

18. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (18), 16-Май-23, 19:38 
Там X или Х по центру?
Ответить | Правка | Наверх | Cообщить модератору

52. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +2 +/
Сообщение от Аноним (52), 16-Май-23, 23:06 
PXP = P² . Пых квадрат.
Ответить | Правка | Наверх | Cообщить модератору

20. Скрыто модератором  +1 +/
Сообщение от Аноним (-), 16-Май-23, 19:49 
Ответить | Правка | Наверх | Cообщить модератору

23. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Kusb (?), 16-Май-23, 20:02 
Я бы хотел ОС на компилируемом php. И скрипты там на php.
Ответить | Правка | Наверх | Cообщить модератору

26. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (27), 16-Май-23, 20:12 
И чем же тебе таким KPHP не угодил, от Пашкета?
Ответить | Правка | Наверх | Cообщить модератору

28. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Kusb (?), 16-Май-23, 20:14 
> И чем же тебе таким KPHP не угодил, от Пашкета?

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

Ответить | Правка | Наверх | Cообщить модератору

30. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Kusb (?), 16-Май-23, 20:15 
Оно сильно захочет обычную ОС?
Ответить | Правка | Наверх | Cообщить модератору

34. "Предварительный выпуск проекта PXP, развивающего расширенный..."  –1 +/
Сообщение от BrainFucker (ok), 16-Май-23, 20:40 
> Написанный на PXP код транслируется в обычные PHP-скрипты, выполняемые при помощи штатного интерпретатора PHP.

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

Ответить | Правка | Наверх | Cообщить модератору

37. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от yaskhan (?), 16-Май-23, 21:07 
Я написал транспилер с Питона, но похоже всем все равно. Или ее никто не видит потому что это форк.
Ответить | Правка | Наверх | Cообщить модератору

70. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +2 +/
Сообщение от n00by (ok), 17-Май-23, 09:49 
Запилите новость, увидите, что всё равно. 500 экспертов будут писать три дня и три ночи, как им это всё безразлично.
Ответить | Правка | Наверх | Cообщить модератору

90. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (90), 18-Май-23, 05:01 
Это интересно. Но если не опубликуешь свой проект хоть где-нибудь, то о нем никто и не узнает, логично же. Сейчас реальность такова, что нужно приложить хотя бы какие-то усилия по промоушену своего проекта. Напиши на хабре или для начала обсуди здесь на форуме.
Ответить | Правка | К родителю #37 | Наверх | Cообщить модератору

43. "Предварительный выпуск проекта PXP, развивающего расширенный..."  –1 +/
Сообщение от Golangdev (?), 16-Май-23, 21:54 
Зачем это ?)

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

Ответить | Правка | Наверх | Cообщить модератору

54. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (54), 16-Май-23, 23:59 
Так на го от безнадеги переходят, иначе бы переходили на Карбон и Мойо
Ответить | Правка | Наверх | Cообщить модератору

67. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Ilya Indigo (ok), 17-Май-23, 08:15 
Я не перехожу, и мои коллеги не переходят и подобный бред слышу впервые!
Ответить | Правка | К родителю #43 | Наверх | Cообщить модератору

87. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Golangdev (?), 18-Май-23, 01:39 
Ну значит вы не во что (пока) не упёрлись, вестимо.

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

88. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Ilya Indigo (ok), 18-Май-23, 02:20 
У меня недавно возникла проблема в том, что 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 вообще можно использовать?

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

Ответить | Правка | Наверх | Cообщить модератору

89. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Golangdev (?), 18-Май-23, 02:39 
> Как с эти в пайтоне дела обстоят?

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

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

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

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

91. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Хухрымухры (ok), 18-Май-23, 11:00 
В linux есть flock для защиты от повторного запуска комманды...

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

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

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

Ответить | Правка | К родителю #88 | Наверх | Cообщить модератору

93. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Бздительный поцыент (?), 18-Май-23, 11:58 
Файберы - это таки не нормальная многопоточка с разнесением по тредам, а просто возможность прыгать между корутинами в пределах одного процесса/треда, самая-самая базовая. Впрочем, обвязка над таковой делается легко и ненавязчиво - и появляется достаточно удобная асинхронность. Но это таки не многопоточность. Есть какой-то навесной костыль для трединга, даже местами работает, но в продакшн такое страшно.
Ответить | Правка | Наверх | Cообщить модератору

95. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Ilya Indigo (ok), 18-Май-23, 12:05 
> В 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-скриптов, то нужно их самостоятельно ставить в очередь и обрабатывать порциями, в зависимости от ресурсов сервака.

Ответить | Правка | К родителю #91 | Наверх | Cообщить модератору

97. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Ilya Indigo (ok), 18-Май-23, 16:54 
> вызываю 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);
        }
    }
}

Ответить | Правка | К родителю #88 | Наверх | Cообщить модератору

102. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (102), 21-Май-23, 17:34 
> так что нужно использовать связку 'pgrep -f ...' + 'kill -9 ...'

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

Ответить | Правка | Наверх | Cообщить модератору

104. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Ilya Indigo (ok), 22-Май-23, 03:54 
Благодарю, да в этом примере 'pkill -9 -f ...' достаточно, не знал про него.
В реальном примере упростил, используя связку 'pgrep -cf ...' + 'pkill -9 -f ...', так как мне нужно знать есть ли вообще эти процессы или нет.
Ответить | Правка | Наверх | Cообщить модератору

107. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (102), 22-Май-23, 14:30 
> так как мне нужно знать есть ли вообще эти процессы или нет.

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

Ответить | Правка | Наверх | Cообщить модератору

101. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (102), 21-Май-23, 17:27 
> У меня недавно возникла проблема в том, что 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";'

Ответить | Правка | К родителю #88 | Наверх | Cообщить модератору

103. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (102), 21-Май-23, 18:20 
Т.е. даже вот так:
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";'

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

Ответить | Правка | Наверх | Cообщить модератору

105. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Ilya Indigo (ok), 22-Май-23, 04:26 
>> У меня недавно возникла проблема в том, что 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 я потеряю же после выхода?

Ответить | Правка | К родителю #101 | Наверх | Cообщить модератору

106. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (102), 22-Май-23, 14:22 
> https://www.php.net/manual/ru/function.pcntl-fork.php
> Я не понял как это использовать и что мне это даёт.

У вас была жалоба на отсутствие многопоточности в пхп, ну так это оно и есть. А нужно оно вам или нет - мне-то откуда знать? Вроде ещё треды есть, но там совсем как-то сложно, имхо.

> и по окончании или завершился сразу, не завершая при этом асинхронные процессы

С таким описанием вам нужен просто exec. Только зачем вам тогда pgrep, kill и всё остальное?...

> С proc_open() не разобрался показалось слишком сложной и не понятно что такое pipe-ы

Пайпы - это потоки STDIN, STDOUT и STDERR для запущенного процесса.

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

Если вам не нужно общаться с этим процессом, то и не работайте с этими пайпами, просто закройте их перед вызовом proc_close. Или вместо пайпов передайте константы [STDIN, STDOUT, STDOUT] - тогда и закрывать ничего не нужно будет. По вашей ссылке все примеры есть.

> а получить я от него хочу только pid или код возврата,

Ну вот тот же PID и можно получить через пайп:

php -r '$res=proc_open("php -r \"echo getmypid(), \\\"\n\\\"; sleep(15);\"", array(["pipe","r"], ["pipe","w"], ["pipe","w"]), $p); echo implode("\n",proc_get_status($res)), "\n\n"; echo fread($p[1], 10);';

> С proc_get_status($res) мне в конце скрипта в бесконечном цикле с секундной задержкой каждый запущенный процесс опрашивать что ли нужно перед выходом, чтобы получить код возврата?

А как вы это сейчас делаете с pgrep? Да, только так. Если через форк делать, то есть ещё pcntl_wait. Но судя по вашему 'kill -9' - дочерние процессы вам нужно прибивать принудительно, а значит wait вам не подойдёт.

> Иначе $res я потеряю же после выхода?

После выхода чего? При завершении родительского процесса? - Да, потеряете. Но тогда это уже и не мультипоточность, а просто запускалка процессов. Тогда вам опять же нужен exec, а не вот это вот всё.

Ответить | Правка | Наверх | Cообщить модератору

108. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Ilya Indigo (ok), 22-Май-23, 14:59 
Благодарю за разъяснения!

Если я правильно понял эти ф-ии предназначены для web-сервиса, который запускается через systemd, запускает несколько процессов и потом не закрывая их общается с ними передавая им новые задачи и получая от них новые результаты.
А пытался я это применить на cli-скрипт который запускается ежеминутно кроном и котороый, при необходимости, запускает параллельные асинхронные процессы, и понятно почему у меня не получилось.

Теперь немного больше понял как в принципе устроена многопоточность и понимаю что в php это работает, по крайней мере ф-ии для этого есть.

Ответить | Правка | Наверх | Cообщить модератору

60. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (62), 17-Май-23, 03:45 
> поддержка многострочных замыканий:

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

74. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от vitalif (ok), 17-Май-23, 14:01 
Что вообще за многострочные замыкания? В пхп же всегда были анонимные функции и они всегда были многострочные
Ответить | Правка | Наверх | Cообщить модератору

65. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (65), 17-Май-23, 05:34 
Блин ! fork php нужен ! иначе реально его угробят "сахаром"  :(
Ответить | Правка | Наверх | Cообщить модератору

83. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от A no name (?), 17-Май-23, 17:21 
дык ещё четыре версии назад =)
Ответить | Правка | Наверх | Cообщить модератору

68. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +1 +/
Сообщение от Аноним (68), 17-Май-23, 08:48 
зачем его вообще куда-то развивать? php4 вроде последняя версия котороя выполняла то для чего он задумывался
Ответить | Правка | Наверх | Cообщить модератору

84. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от A no name (?), 17-Май-23, 17:22 
о! два стакана балтийского чаю сему сударю!
Ответить | Правка | Наверх | Cообщить модератору

71. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от vitalif (ok), 17-Май-23, 09:57 
Сделали транспайлер пхп в пхп с 1 фичей. Гениально! Шедевр!
Ответить | Правка | Наверх | Cообщить модератору

96. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (96), 18-Май-23, 13:33 
Смотри на наших глазах JS переизобретают. Вот если снять $ с переменных,
то в чем разница?
Ответить | Правка | Наверх | Cообщить модератору

73. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Вы забыли заполнить поле Name (?), 17-Май-23, 12:22 
А как поживает хип-хоп от запрещённой соц сети, у них же тоже был свой нескучный пых?
Ответить | Правка | Наверх | Cообщить модератору

76. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Аноним (75), 17-Май-23, 14:29 
Все эти любители хип-хоп пошли на Хак.
Ответить | Правка | Наверх | Cообщить модератору

100. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Вы забыли заполнить поле Name (?), 19-Май-23, 21:50 
> Все эти любители хип-хоп пошли на Хак.

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

94. "Предварительный выпуск проекта PXP, развивающего расширенный..."  +/
Сообщение от Бздительный поцыент (?), 18-Май-23, 11:59 
В целом сразу понятна ЦА, потому что в большинстве стран PHP и PXP до степени смешения далеко.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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