|
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 +/– |
А другие примеры есть? Если целью является поддержка математических библиотек, то можно разрешить перегрузку путём написания плагинов к компилятору. Благо их будет раз два и обчёлся. А давать доступ к перегрузке произвольному стороннему коду - страшное зло.
| |
|
|
5.41, Аноним (41), 21:23, 16/05/2023 [^] [^^] [^^^] [ответить]
| +/– |
Дак там всего несколько кейсов придумали, на скидку: with overflow (zig), и более типичные matrix и vector (на манер glsl)
| |
|
4.42, Аноним (15), 21:49, 16/05/2023 [^] [^^] [^^^] [ответить]
| +2 +/– |
> А другие примеры есть? Если целью является поддержка математических библиотек, то можно разрешить перегрузку путём написания плагинов к компилятору
Каких ещё нахрен плагинов, к какому нахрен компилятору? Это обязано быть в стандарте языка.
> Благо их будет раз два и обчёлся. А давать доступ к перегрузке произвольному стороннему коду - страшное зло.
Нет, это базовая и абсолютно обязательная вещь, с которой начинается любой ЯВУ.
| |
|
3.29, Аноним (29), 20:15, 16/05/2023 [^] [^^] [^^^] [ответить]
| +/– |
Почему тогда в C++ нельзя просто делать [1] + [2], а надо воеичий push_back писать? Ну правиславно.
И на процессоре как это выглядит? Вот +-/* на процессоре есть, а твоего поделия - нет.
| |
|
4.57, Анониссимус (?), 02:34, 17/05/2023 [^] [^^] [^^^] [ответить]
| +2 +/– |
А потому что непонятно. Что ты имел ввиду? Конкатенацию? Поэлементное сложение? Сумму всех элементов?
Перегрузка применима и необходима там, где действие оператора очевидно и понятно. Иначе начинаются всякие приколы из жабаскрипта и петухона.
| |
|
3.80, Аноним (80), 15:53, 17/05/2023 [^] [^^] [^^^] [ответить]
| +1 +/– |
Макаки вроде тебя только о комплексных числах и вспоминают при "перегрузке операторов"! Что говорит само за себя - перегрузка попросту не нужна.
| |
|
4.99, Анонист (?), 17:49, 19/05/2023 [^] [^^] [^^^] [ответить]
| +/– |
Ну реально. Вот видишь ты a + b и поди скажи что это такое, то ли строки конкатенируем, то от ин-ты складываем, то ли делаем rm -rf , потому что операторы можно перегружать.
| |
|
|
2.61, Аноним (62), 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 +/– |
это в каком году случилось? вернее так: на сколько десятилетий (!) они отстали от парсеров стд-библиотек других языков?
| |
|
|
|
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 +/– |
Не умеет, по ссылке какой-то костыль с гитхаба, написанный на пыхе.
| |
|
2.79, Аноним (80), 15:51, 17/05/2023 [^] [^^] [^^^] [ответить]
| –1 +/– |
А что, самая очевидная причина тебе почему-то не подходит? (что раст - полное _г_вно)
| |
|
|
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 [^] [^^] [^^^] [ответить]
| +/– |
ЧатЖПТ кстати умеет складывать эмодзи если что. Но его надо правильно попросить.
| |
|
|
|
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 +/– |
Это в треде про пыху пишут что раст уродливый, серьезно?
Что вообще может быть отвратительнее синтаксиса пыхи?
| |
|
|
1.12, Аноним (12), 18:59, 16/05/2023 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– |
define('LARAVEL_START', microtime(true));
Хотели писать на расте, в итоге переписали на ларавель с симфони, как обычно.
| |
|
|
3.28, Kusb (?), 20:14, 16/05/2023 [^] [^^] [^^^] [ответить]
| +/– |
> И чем же тебе таким KPHP не угодил, от Пашкета?
А в принципе да. Но там скорее всего не будет некоторых возможностей для создания ОС и ассемблерных вставок, например. :) Может рантайм не к месту.
Но kphp может быть лучшим вариантом для создания ОС на диалекте PHP.
| |
|
|
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 [^] [^^] [^^^] [ответить]
| +/– |
Так на го от безнадеги переходят, иначе бы переходили на Карбон и Мойо
| |
|
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 ...', так как мне нужно знать есть ли вообще эти процессы или нет.
| |
|
|
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 +/– | У вас была жалоба на отсутствие многопоточности в пхп, ну так это оно и есть А ... большой текст свёрнут, показать | |
|
|
|
|
|
|
1.60, Аноним (62), 03:45, 17/05/2023 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
> поддержка многострочных замыканий:
и приводится пример, который может быть записан в одну строку. Никаких \.
> как сокращённые и блочные варианты выражения "match"
if let из rust не дает покоя?
> неизменяемые переменные
опять же косит в сторону rust
| |
|
2.74, vitalif (ok), 14:01, 17/05/2023 [^] [^^] [^^^] [ответить]
| +/– |
Что вообще за многострочные замыкания? В пхп же всегда были анонимные функции и они всегда были многострочные
| |
|
1.68, Аноним (68), 08:48, 17/05/2023 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– |
зачем его вообще куда-то развивать? php4 вроде последняя версия котороя выполняла то для чего он задумывался
| |
|
2.96, Аноним (96), 13:33, 18/05/2023 [^] [^^] [^^^] [ответить]
| +/– |
Смотри на наших глазах JS переизобретают. Вот если снять $ с переменных,
то в чем разница?
| |
|
|