From: Sebastian Gniazdowski <psprint@zdharma.org>
To: zsh-workers@zsh.org
Subject: Performance tests of quoting and dequoting, printf -v turned out slow
Date: Fri, 9 Mar 2018 07:22:46 +0100 [thread overview]
Message-ID: <etPan.5aa22836.70671812.159ee@zdharma.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 668 bytes --]
Hello
Two scripts:
- short.txt
Test of quoting, (q)-flag vs. printf -v output '%q '
result: 35 ms vs. 26.6 sec
- Q_short.txt – test of dequoting, (Q)-flag vs. eval "str=$quoted"
result: 25 ms vs. 77 ms
I've compared "printf -v" code to Bash 4.4 and it yields 227 ms there, so much better than 26.6 sec. So while "Bash can serialize/deserialize too, let's compare speed of this method" is interesting thing and I share, performance of "printf -v" on Zsh is troubling. Any idea from where it comes from and if it can be improved?
https://github.com/zdharma/hacking-private/tree/master/quoting
--
Sebastian Gniazdowski
psprint /at/ zdharma.org
[-- Attachment #2: Q_short.txt --]
[-- Type: text/plain, Size: 574 bytes --]
# This file should be sourced.
# It tests performance of dequoting, (Q) vs eval "s=$quoted"
INPUT='ice as"program" pick"$ZPFX/bin/prll_(qer|bfr)" src"prll.sh" make"install PREFIX=$ZPFX"'
INPUT="${(q)INPUT}"
# The same output
eval "str=$INPUT"
print -r -- "$str"
print -r -- "${(Q)INPUT}"
Qflag() {
local OUTPUT
repeat 50000; do
OUTPUT="${(Q)INPUT}"
done
}
evl() {
local OUTPUT
repeat 50000; do
eval "OUTPUT=$INPUT"
done
}
typeset -F2 SECONDS=0
Qflag
print "(Q)-flag result: $SECONDS"
SECONDS=0
evl
print "eval result: $SECONDS"
[-- Attachment #3: short.txt --]
[-- Type: text/plain, Size: 555 bytes --]
# This file should be sourced.
# It tests performance of quoting, (q) vs printf '%q '.
INPUT='ice as"program" pick"$ZPFX/bin/prll_(qer|bfr)" src"prll.sh" make"install PREFIX=$ZPFX"'
# The same output
printf '%q ' "$INPUT"
print
print -r -- "${(q)INPUT}"
qflag() {
local OUTPUT
repeat 10000; do
OUTPUT="${(q)INPUT}"
done
}
prtf() {
local OUTPUT
repeat 10000; do
printf -v OUTPUT '%q ' "$INPUT"
done
}
typeset -F3 SECONDS=0
qflag
print "(q)-flag result: $SECONDS"
SECONDS=0
prtf
print "printf result: $SECONDS"
next reply other threads:[~2018-03-09 6:23 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-09 6:22 Sebastian Gniazdowski [this message]
2018-03-09 13:23 ` Stephane Chazelas
[not found] ` <etPan.5aa28b1e.77e79f33.159ee@AirmailxGenerated.am>
2018-03-09 13:39 ` Sebastian Gniazdowski
2018-03-09 14:53 ` Stephane Chazelas
2018-03-10 8:36 ` Sebastian Gniazdowski
2018-03-10 15:03 ` Stephane Chazelas
[not found] ` <etPan.5aa3f656.1efba338.159ee@AirmailxGenerated.am>
2018-03-10 16:53 ` Sebastian Gniazdowski
2018-03-10 15:40 ` Oliver Kiddle
2018-03-11 8:33 ` Bart Schaefer
2018-03-13 11:28 ` Sebastian Gniazdowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=etPan.5aa22836.70671812.159ee@zdharma.org \
--to=psprint@zdharma.org \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).