Subject: | |
From: | |
Reply To: | |
Date: | Fri, 15 Apr 2011 22:26:36 +0200 |
Content-Type: | text/plain |
Parts/Attachments: |
|
|
Joseph Wright writes:
> On 14/04/2011 09:44, Will Robertson wrote:
> > * These should probably be consistent.
> > * I think returning a quark is dangerous in case of sloppy package authors.
>
> If we want consistency between \seq_... and \prop_..., then that is fine
> but we also need to worry about performance.
right let's worry about performance (you know I do that quite often :-)
> I'm worried about property
> lists, as they are used a lot in siunitx. With the short test file
>
> \documentclass{article}
> \usepackage{expl3}
> \begin{document}
> \ExplSyntaxOn
> \prop_new:N \test
> \tl_new:N \testa
> \prop_put:Nnn \test { a } { b }
> \pdfresettimer
> \prg_replicate:nn { 10000 }
> {
> \prop_get:NnN \test { a } \testa
> \quark_if_no_value:NTF \test { } { }
> }
> \showthe\pdfelapsedtime
>
> \pdfresettimer
> \prg_replicate:nn { 10000 }
> {
> \prop_if_in:NnTF \test { a }
> {
> \prop_get:NnN \test { a } \testa
> }
> { }
> }
> \showthe\pdfelapsedtime
> \end{document}
well try this one as well which is what I was thinking of (kind of):
\cs_new:Npn \prop_get:NnNF #1#2#3#4 {
\prop_get:NnN #1 {#2} #3
\quark_if_no_value:NF
{
\cs_set_eq:NN #3 \c_undefined
#4
}
}
\pdfresettimer
\prg_replicate:nn { 50000 }
{
\prop_get:NnNF \test { a } \testa
{ }
}
\showthe\pdfelapsedtime
> I find that the quark-based approach is about twice as fast as using
> \prop_if_in:Nn. Granted, this is somewhat artificial, but I do
> essentially this a lot inside siunitx and do not really want to loose
> speed if I can avoid it.
basically it tells us that \prop_if_in:Nn is fairly inefficient and that in
turn is due to it using \quark_if_no_value:nTF I guess. Saving the result and
then checking it is much much faster. Perhaps that implementation should
change.
frank
|
|
|