The OpenNET Project / Index page

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



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

Оглавление

Релиз командного интерпретатора Bash 5.1, opennews (?), 08-Дек-20, (0) [смотреть все]

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


217. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от VINRARUS (ok), 08-Дек-20, 23:41 
Тогда уже не "((D+=1))", а "((D++))" наверно.

Даже такими титаническими усилиями оно значительно медленнее даша. А также у меня огромные вопросы к смыслу таких усилий и того какое это имеет отношение к shell.

ПС: я тоже читерить умею
time dash -c 'D=1; while true; do case "$D" in 1000000) exit;; esac; D="$((D+1))"; done'

real    0m0,964s
user    0m0,958s
sys     0m0,004s

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

218. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 08-Дек-20, 23:55 
> Тогда уже не "((D+=1))", а "((D++))" наверно.

А какая разница?

> Даже такими титаническими усилиями оно значительно медленнее даша. А также у меня
> огромные вопросы к смыслу таких усилий и того какое это имеет
> отношение к shell.

Что там титанического? В моём коде ничего титаническго, совершенно 0 усилий. Никаких хаков. Я всегда только так и пишу.

 ~ time dash -c 'D=1; while [ "$D" -lt 1000000 ]; do D="$((D+1))"; done'

real    0m1.740s
user    0m1.738s
sys     0m0.000s

$  time dash -c 'D=1; while true; do case "$D" in 1000000) exit;; esac; D="$((D+1))"; done'

real    0m1.097s
user    0m1.095s
sys     0m0.001s

$  time zsh -c 'declare -i D=1; while ((D<1000000)); do ((D+=1)); done'

real    0m0.682s
user    0m0.681s
sys     0m0.000s

Итого, даш даже с грязнохаками слился "башизмам".

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

222. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от VINRARUS (ok), 09-Дек-20, 00:50 
>> Тогда уже не "((D+=1))", а "((D++))" наверно.
> А какая разница?

Если б bash нормально был написан то наверно никакой бы небыло, но по факту быстрее.

>> Даже такими титаническими усилиями оно значительно медленнее даша. А также у меня
>> огромные вопросы к смыслу таких усилий и того какое это имеет
>> отношение к shell.
> Что там титанического? В моём коде ничего титаническго, совершенно 0 усилий. Никаких
> хаков. Я всегда только так и пишу.

Ну да, обьясни интерпритатуру сначала шо тот набор цыфр это номер, а не слово, потом используй какие то левые С подобные конструкцыи, шобы интерпритатор исполнял роль тупого транслятора, а в итоге получи пшык в кепке.

> Итого, даш даже с грязнохаками слился "башизмам".

Слился в чом, в сложении? xD
И да, я з zsh не знаком, по этому ничего про него сказать не могу, в отличии от забаганого баша.

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

227. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 09-Дек-20, 01:19 
Какие баги? Нет никаких багов. А по синтаксису, это обычный bash синтаксис и встроенный оператор объявления массивов, переменных, объявления переменных глобальными и всего остального, ему уж лет сколько. От объявления переменной числом баш не выигрывает на таком "тесте", это зш оптимизирует на 20% или сколько там, но вообще для счётчиков довольно эффективно. Я просто объявляю все числа числами, очень удобно.

Вон там соседний ответ, расскажи пожалуйста, как удалить последний элемент массива в dash и как складывать числа в dash, я хочу сравнить производительность на сложении чисел (числа простые строки в массиве, без всего).

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

273. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от VINRARUS (ok), 09-Дек-20, 19:29 
>Я просто объявляю все числа числами, очень удобно.

А я не обьявляю числа числами так как в этом нет необходимости — ещо удобнее.
>Вон там соседний ответ, расскажи пожалуйста, как удалить последний элемент массива в dash и как складывать числа в dash, я хочу сравнить производительность на сложении чисел (числа простые строки в массиве, без всего).

raye="2 4 8 16 32 64 128 256 512 1024"
raye="${raye% *}"
echo "$raye"

На какую купку складывать?

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

279. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 09-Дек-20, 22:42 
А ничего особенного, типичная задача сложить миллион другой чисел, что такого. Как узнать в даше что это даш? Я так понял сложение чисел это слишком сложная задача для даша, поскольку массивов нет количество элементов я тоже узнать не могу? Это фейл. Как мне получить последнее значение в строке? Его нужно сохранить в отдельную переменную и только потом удалить. А нное значение? Зачем нужен шел который не умеет даже таких базовых вещей? Тот же tcsh и то больше может, хотя казалось бы. Но, тот складывать вообще не умеет, так что массивы ему не помогут.

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

Ещё не понял, почему у даша в конце 3 значения к удалению, когда у баша и зш их 2 (вообще должно быть одно, но просто файл такой). Я удаляю любые повторяющиеся значения в цикле проверяя корректность содержимого регуляркой, чего даш тоже не умеет. Можно нагородить сед наверно, но мне лень.

Значения разделены не пробелами, а новой строкой, поэтому удалил их вот так

raye="${raye%
*}"
поскольку башевого $'\n' тоже нет.

Потребление памяти у даша 32мб и у баша 200мб, у зш 90мб. Ну т.е. в принципе пусть живёт, но это насилие над пользователем, а не шел -- куча "нельзя". У баша без массива потребление памяти  120 мегабайт и у зш 15мб (я не уверен что сделал это корректно, for по строке разделённой \n он что-то не смог похоже).

Получается зш практически однозначный победитель, он позволяет использовать разнообразные башизмы и при этом наиболее эффективен.

Интересный факт: если избежать присвоения копии массива в zsh (поскольку он может только копировать, но не занулять? значит, неосуществимо) его потребление памяти в варианте с массивом падает в 2 раза до 50мб.

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

280. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от VINRARUS (ok), 10-Дек-20, 00:05 
>Как узнать в даше что это даш?

whatshell.sh
>Я так понял сложение чисел это слишком сложная задача для даша, поскольку массивов нет количество элементов я тоже узнать не могу? Это фейл.

Стопэ. Отстань со своими ращосками от тех у кого нет волос. ;)
Вот тебе красивая сума всех аргументов и без масивов:
raye(){
SUM=0
N=$#
while [ -n "$1" ]
do
SUM=$((SUM+$1))
shift
done
}
raye 2 4 8 16 32 64 128 256 512 1024
echo "Z$N: $SUM"

И через $2 внутри функцыи можна обращаться к конкретной позицыи.

>Но, блин, серьёзно, шел без массивов это что-то ты даже параметры не сможешь передать программе поскольку они будут одной строкой

Ой, нет, без волос не умирают. Нет, мозги не испарятся без них. А если холодно есть кепка.
# yes "1
2
3
4"

>Значения разделены не пробелами, а новой строкой

А как они добавляются в волосы, ой, то есть в масив?
Я с масивами никогда не работал и до сих пор не понимаю нашо они нада.

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

224. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 09-Дек-20, 01:11 
tcsh похоже победитель:

 $  time tcsh ~/bin/cshvariant.sh

real    9m20.743s
user    6m18.812s
sys     3m31.950s

Бтв как удалить последний элемент из массива в zsh?

Вот это чёт не прокатывает unset 'raye[${#raye[@]}-1]' (в баше работает), а то в баше я просто напишу unset raye[-1] и всё норм.

Короче только вот так, raye=("${(@)raye[1,$#raye-1]}")

В итоге, на более реальной задаче баш складывает несколько чисел (300000 чисел) за

real    0m34.796s
user    0m2.884s
sys     0m3.044s

и зш за

real    0m35.218s
user    0m2.913s
sys     0m3.113s

вот и всё. :(

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

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

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

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




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

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