Deutsch   English   Français   Italiano  
<vl6p43$3fp68$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.misty.com!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: aotto1968 <aotto1968@t-online.de>
Newsgroups: comp.lang.tcl
Subject: Re: good to know: tcl static "regexp" is faster than tcl "string"
 operation
Date: Thu, 2 Jan 2025 20:23:45 +0100
Organization: A noiseless patient Spider
Lines: 62
Message-ID: <vl6p43$3fp68$1@dont-email.me>
References: <vl0gfm$26irh$1@dont-email.me> <vl0sk4$28nvd$1@dont-email.me>
 <vl1de5$2bnb8$2@dont-email.me>
 <96487bdefbceb235c3b7bfbf6a358ae9@www.novabbs.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Thu, 02 Jan 2025 20:23:47 +0100 (CET)
Injection-Info: dont-email.me; posting-host="9d3496f00138e55f526a31e5dddeac6d";
	logging-data="3663048"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+ozzSrjlMHEhdAMpq04/KgJ2vsY3LC5F0="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:Vdc/Zoq7RaGSEvRalKJdEE1EeTM=
Content-Language: en-US
In-Reply-To: <96487bdefbceb235c3b7bfbf6a358ae9@www.novabbs.com>
Bytes: 3245

On 02.01.25 12:04, eric wrote:
> 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
> 
> -- 

other stuff

# OLD

proc ::myoo::ClassIs {myR cls} {
   upvar $myR my
   expr {[llength [lsearch -exact -sorted [set $my(__CLASS__)::__SUPER__SORTED__] $cls]] > 0}
}

# want to have

proc ::myoo::ClassIs {myR cls} {
   upvar $myR my
   lsearch -exists -exact -sorted [set $my(__CLASS__)::__SUPER__SORTED__] $cls
}

ONE simple FLAG erase a lot of code.