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. Сообщение от Аноним (1), 16-Май-23, 18:36   +4 +/
PHP никогда не умрет!)
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #22

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

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #15, #49, #61

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

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

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

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

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

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

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

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

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

10. Сообщение от Аноним (10), 16-Май-23, 18:55   +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);
}
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #19

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

12. Сообщение от Аноним (12), 16-Май-23, 18:59   +1 +/
define('LARAVEL_START', microtime(true));

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #31

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

16. Сообщение от Аноним (-), 16-Май-23, 19:20   +/
Я конечно слышал о вэб-фреймворке на ассемблере через CGI, но блин... Зачем для вэбни раст?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

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

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

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

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

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

22. Сообщение от YetAnotherOnanym (ok), 16-Май-23, 19:55   +5 +/
Будет гнить под грудой бесконечно добавляемого сахара.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #25

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

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

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

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

27. Сообщение от Аноним (27), 16-Май-23, 20:14   +/
Не примерно 300 миллионов лет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #21 Ответы: #72

28. Сообщение от Kusb (?), 16-Май-23, 20:14   +/
> И чем же тебе таким KPHP не угодил, от Пашкета?

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #26 Ответы: #30

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15 Ответы: #57

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

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

32. Сообщение от YetAnotherOnanym (ok), 16-Май-23, 20:27   +/
Ога. Чтобы не утруждать мозг контролем, что за операнды в выражении. Очень удобно, когда надо кодить быстро и много, самое то для макакинга.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15 Ответы: #44, #63

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

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

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

35. Сообщение от Анонус (?), 16-Май-23, 20:43   +3 +/
Перл?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31

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

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

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

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

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

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

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

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

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

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

43. Сообщение от Golangdev (?), 16-Май-23, 21:54   –1 +/
Зачем это ?)

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #54, #67

44. Сообщение от Аноним (15), 16-Май-23, 21:55   +1 +/
> Чтобы не утруждать мозг контролем, что за операнды в выражении

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32 Ответы: #51

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

46. Сообщение от Аноним (10), 16-Май-23, 22:04   +/
И даже даже такое есть

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

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

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

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

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

51. Сообщение от Аноним (51), 16-Май-23, 23:03   +1 +/
>кодить быстро и много - это плохо, но не написано с какого это такого хрена.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #44 Ответы: #55

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

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

55. Сообщение от Аноним (55), 16-Май-23, 23:59   +1 +/
Вот именно поэтому и нужна автоматизация, чтобы снижать "много" до приемлимого уровня.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #51 Ответы: #64

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

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

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

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

60. Сообщение от Аноним (64), 17-Май-23, 03:45   +/
> поддержка многострочных замыканий:

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

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

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

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

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

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

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

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

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

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

63. Сообщение от Аноним (64), 17-Май-23, 03:54   +/
Со статической типизацией это контролирует компилятор. С динамической - непредсказуемо. Приводить каждый операнд к нужному типу.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32

64. Сообщение от Аноним (64), 17-Май-23, 04:00   +/
Сжимать "медленно" до "быстро" за счет автоматизации. Это высвобождает время, чтобы делать "много"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

86. Сообщение от 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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #67 Ответы: #88

88. Сообщение от 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ообщить модератору
Родитель: #87 Ответы: #89, #91, #97, #101

89. Сообщение от Golangdev (?), 18-Май-23, 02:39   +1 +/
> Как с эти в пайтоне дела обстоят?

Хоть я 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ообщить модератору
Родитель: #88

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #88 Ответы: #93, #95

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

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

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

95. Сообщение от 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-скриптов, то нужно их самостоятельно ставить в очередь и обрабатывать порциями, в зависимости от ресурсов сервака.

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

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

97. Сообщение от 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);
        }
    }
}

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #88 Ответы: #102

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

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

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

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

101. Сообщение от Аноним (102), 21-Май-23, 17:27   +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";'

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #88 Ответы: #103, #105

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #97 Ответы: #104

103. Сообщение от Аноним (102), 21-Май-23, 18:20   +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";'

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

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

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

105. Сообщение от 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 я потеряю же после выхода?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #101 Ответы: #106

106. Сообщение от Аноним (102), 22-Май-23, 14:22   +1 +/
> 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ообщить модератору
Родитель: #105 Ответы: #108

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

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

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

108. Сообщение от Ilya Indigo (ok), 22-Май-23, 14:59   +/
Благодарю за разъяснения!

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

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

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


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

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




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

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