Difference between revisions of "Module talk:String"
Jump to navigation
Jump to search
Arcangelus (talk | contribs) |
Arcangelus (talk | contribs) m |
||
Line 3: | Line 3: | ||
:I probably should have put this on a test page first. The main reason was that earlier testing suggested this to be faster than the parser functions. Because I wanted to be sure, I imported this module to test function by function. Unfortunately, I lack the time to do it in on 1 go. What I have tested since then: | :I probably should have put this on a test page first. The main reason was that earlier testing suggested this to be faster than the parser functions. Because I wanted to be sure, I imported this module to test function by function. Unfortunately, I lack the time to do it in on 1 go. What I have tested since then: | ||
− | ::<nowiki>{{#len:string}}</nowiki> is faster than <nowiki>{{#invoke:String|len|target_string}}</nowiki> | + | ::<code><nowiki>{{#len:string}}</nowiki></code> is faster than <code><nowiki>{{#invoke:String|len|target_string}}</nowiki></code> |
− | ::<nowiki>{{#pos:string|search term|offset}}</nowiki> is faster than <nowiki>{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}</nowiki>. | + | ::<code><nowiki>{{#pos:string|search term|offset}}</nowiki></code> is faster than <code><nowiki>{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}</nowiki></code>. |
:::'''String|find''' always gives #pos:string +1 | :::'''String|find''' always gives #pos:string +1 | ||
− | ::<nowiki>{{#sub:string|start|length}}</nowiki> is faster than <nowiki>{{#invoke:String|sub|target_string|start_index|end_index}}</nowiki> | + | ::<code><nowiki>{{#sub:string|start|length}}</nowiki></code> is faster than <code><nowiki>{{#invoke:String|sub|target_string|start_index|end_index}}</nowiki></code> |
:::The index are of by 1. Again. | :::The index are of by 1. Again. | ||
− | ::<nowiki>{{#count:string|substring}}</nowiki> is faster than <nowiki>{{#invoke:String|count|source_str|pattern_string|plain_flag}}</nowiki> | + | ::<code><nowiki>{{#count:string|substring}}</nowiki></code> is faster than <code><nowiki>{{#invoke:String|count|source_str|pattern_string|plain_flag}}</nowiki></code> |
− | :::'''String|count''' does accept Ustring patterns, but I'm uncertain of benefit. | + | :::'''String|count''' <s>does accept Ustring patterns, but I'm uncertain of benefit.</s> Misread this. There is no upside here. |
− | ::<nowiki>{{#invoke:String|join|separator|string1|string2|...}}</nowiki> has no equivalent. Unsure of use case. | + | ::<code><nowiki>{{#invoke:String|join|separator|string1|string2|...}}</nowiki></code> has no equivalent. Unsure of use case. |
− | ::<nowiki>{{#replace:string|search term|replacement term}}</nowiki> is faster than <nowiki>{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}</nowiki> | + | ::<code><nowiki>{{#replace:string|search term|replacement term}}</nowiki></code> is faster than <code><nowiki>{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}</nowiki></code> |
:::'''String|replace''' has additional options. | :::'''String|replace''' has additional options. | ||
::'''String|escapePattern''' seems to have no equivalent. Maybe #urlencode, but that doesn't work here. Limited utility. | ::'''String|escapePattern''' seems to have no equivalent. Maybe #urlencode, but that doesn't work here. Limited utility. | ||
::'''String|rep''' seems to have no equivalent. | ::'''String|rep''' seems to have no equivalent. | ||
− | ::'''String|endswith''' is maybe equivalent to {{#if:{{#sub:string|start|length}}|yes}}. That would make endswith | + | ::'''String|endswith''' <s>is maybe equivalent to <code><nowiki>{{#if:{{#sub:string|start|length}}|yes}}</nowiki></code>. That would make endswith (marginally) faster.</s> |
+ | :::EDIT: A better fit is #pos within an #if: <code><nowiki>{{#if:{{#pos:string|search}}|yes}}</nowiki></code>. That would make it equal and less versatile. | ||
::'''string|match''' seems to have no equivalent. REGEX is not something I'm good with, so I can't evaluate it right now. | ::'''string|match''' seems to have no equivalent. REGEX is not something I'm good with, so I can't evaluate it right now. | ||
− | :All in all, it seems several parts of thus module have worse performance. The REGEX option may be useful, but I can barely read it. I did not try a scaling test.[[User:Arcangelus|Arcangelus]] ([[User talk:Arcangelus|talk]]) | + | :All in all, it seems several parts of thus module have worse performance. The REGEX option may be useful, but I can barely read it. I did not try a scaling test. |
+ | :--[[User:Arcangelus|Arcangelus]] ([[User talk:Arcangelus|talk]]) | ||
+ | ::Some more testing done. | ||
+ | ::Removing the following functions due to redundancy: | ||
+ | ::*'''String|len''' (strictly worse than #len) | ||
+ | ::*'''String|sub''' (Slower than #sub) | ||
+ | ::*'''String|endswith''' (Equal to #pos within an #if) | ||
+ | ::The following overlap with parser functions, but accepts REGEX: | ||
+ | ::*'''String|find''' (Slower than #pos). | ||
+ | ::*'''String|replace''' (Slower than #replace). | ||
+ | ::*'''String|count''' (Slower than #count). | ||
+ | :::*Faster than #count if searching for 3+ letters (due to the added #expr required to get the same number) <!-- {{#expr:{{#count:Papalelepípedo|a}}+{{#count:Papalelepípedo|e}}+{{#count:Papalelepípedo|l}} }} vs {{#invoke:String|count|Papalelepípedo|[ael]|plain=false}}--> | ||
+ | ::*'''string|match''' overlaps with #sub, but geared for REGEX more than anything else. | ||
+ | ::The following have no parser function equivalent: | ||
+ | ::*'''String|escapePattern'''. May delete for lack of purpose. | ||
+ | ::*'''String|rep'''. May delete for lack of purpose. | ||
+ | ::*'''String|join'''. May delete for lack of purpose. | ||
+ | ::*'''String|pos'''. Unsure. This is the opposite of #pos, so while it may have purpose it can also be confusing. | ||
+ | ::--[[User:Arcangelus|Arcangelus]] ([[User talk:Arcangelus|talk]]) 16:59, 9 August 2024 (UTC) |
Revision as of 16:59, 9 August 2024
The wiki supports parser functions like 4 and 1 . Why add this? if there's a reason, should we retrofit existing uses of the parser functions? - Harakoni (Wiki Moderator) (talk) 22:01, 8 August 2024 (UTC)
- I probably should have put this on a test page first. The main reason was that earlier testing suggested this to be faster than the parser functions. Because I wanted to be sure, I imported this module to test function by function. Unfortunately, I lack the time to do it in on 1 go. What I have tested since then:
{{#len:string}}
is faster than{{#invoke:String|len|target_string}}
{{#pos:string|search term|offset}}
is faster than{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}
.- String|find always gives #pos:string +1
{{#sub:string|start|length}}
is faster than{{#invoke:String|sub|target_string|start_index|end_index}}
- The index are of by 1. Again.
{{#count:string|substring}}
is faster than{{#invoke:String|count|source_str|pattern_string|plain_flag}}
- String|count
does accept Ustring patterns, but I'm uncertain of benefit.Misread this. There is no upside here.
- String|count
{{#invoke:String|join|separator|string1|string2|...}}
has no equivalent. Unsure of use case.{{#replace:string|search term|replacement term}}
is faster than{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
- String|replace has additional options.
- String|escapePattern seems to have no equivalent. Maybe #urlencode, but that doesn't work here. Limited utility.
- String|rep seems to have no equivalent.
- String|endswith
is maybe equivalent to{{#if:{{#sub:string|start|length}}|yes}}
. That would make endswith (marginally) faster.- EDIT: A better fit is #pos within an #if:
{{#if:{{#pos:string|search}}|yes}}
. That would make it equal and less versatile.
- EDIT: A better fit is #pos within an #if:
- string|match seems to have no equivalent. REGEX is not something I'm good with, so I can't evaluate it right now.
- All in all, it seems several parts of thus module have worse performance. The REGEX option may be useful, but I can barely read it. I did not try a scaling test.
- --Arcangelus (talk)
- Some more testing done.
- Removing the following functions due to redundancy:
- String|len (strictly worse than #len)
- String|sub (Slower than #sub)
- String|endswith (Equal to #pos within an #if)
- The following overlap with parser functions, but accepts REGEX:
- String|find (Slower than #pos).
- String|replace (Slower than #replace).
- String|count (Slower than #count).
- Faster than #count if searching for 3+ letters (due to the added #expr required to get the same number)
- string|match overlaps with #sub, but geared for REGEX more than anything else.
- The following have no parser function equivalent:
- String|escapePattern. May delete for lack of purpose.
- String|rep. May delete for lack of purpose.
- String|join. May delete for lack of purpose.
- String|pos. Unsure. This is the opposite of #pos, so while it may have purpose it can also be confusing.
- --Arcangelus (talk) 16:59, 9 August 2024 (UTC)