Sujet : Re: good to know: tcl static "regexp" is faster than tcl "string" operation
De : eric.boudaillier (at) *nospam* gmail.com (eric)
Groupes : comp.lang.tclDate : 02. Jan 2025, 12:04:50
Autres entêtes
Organisation : novaBBS
Message-ID : <96487bdefbceb235c3b7bfbf6a358ae9@www.novabbs.com>
References : 1 2 3
User-Agent : Rocksolid Light
On Tue, 31 Dec 2024 18:33:41 +0000, aotto1968 wrote:
....
On 31.12.24 14:46, Rich wrote:
>
But neither is quite as fast as string match (athough regex is close):
This kind of regexp generates bytecode using string match instead.
The time difference between both is due to the if-else construct.
tcl::unsupported::disassemble proc test-1
ByteCode 0x0450C010, refCt 1, epoch 18, interp 0x0442C8C0 (epoch 18)
Source "\n if {[regexp ^:: $val]} {\n return true\n } e..."
Cmds 4, src 81, inst 36, litObjs 3, aux 0, stkDepth 2, code/src 0.00
Proc 0x04551488, refCt 1, args 1, compiled locals 1
slot 0, scalar, arg, "val"
Commands 4:
1: pc 0-34, src 4-79 2: pc 0-5, src 9-23
3: pc 9-20, src 34-44 4: pc 23-34, src 63-74
Command 1: "if {[regexp ^:: $val]} {\n return true\n } else
{..."
Command 2: "regexp ^:: $val..."
(0) push1 0 # "::*"
(2) loadScalar1 %v0 # var "val"
(4) strmatch +0
(6) nop
(7) jumpFalse1 +16 # pc 23
Command 3: "return true..."
(9) startCommand +12 1 # next cmd at pc 21, 1 cmds start here
(18) push1 1 # "true"
(20) done
(21) jump1 +14 # pc 35
Command 4: "return false..."
(23) startCommand +12 1 # next cmd at pc 35, 1 cmds start here
(32) push1 2 # "false"
(34) done
(35) done
Eric
--