Path: ...!weretis.net!feeder9.news.weretis.net!i2pn.org!i2pn2.org!.POSTED!not-for-mail From: neumann@wu-wien.ac.at (gustafn) Newsgroups: comp.lang.tcl Subject: Re: Performance of list / array / dict compared Date: Mon, 19 Aug 2024 08:35:29 +0000 Organization: novaBBS Message-ID: <52b7365dfcec510a4600ab6b0daad03c@www.novabbs.com> References: <96ddc76b99ce6bf7397a5158fece845f@www.novabbs.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Info: i2pn2.org; logging-data="3097296"; mail-complaints-to="usenet@i2pn2.org"; posting-account="p+4Dm87JGuJs8u5UavFXrfM1jr+8eOP5kauH444y/E8"; User-Agent: Rocksolid Light X-Rslight-Posting-User: 5290a2eaf9a37a468f724ff23c0a97a2f047b83d X-Rslight-Site: $2y$10$JTGnLlzcVkOwQiVeyu4AweKHwxkwgEHas.UM/SLZQ9aEiCN2o/b3O X-Spam-Checker-Version: SpamAssassin 4.0.0 Bytes: 2940 Lines: 65 Hi RodionGork, I took a quick look at the "primes" examples in your comparison on the GitHub page. Using any data structures other than lists does not make sense for this example. One could get an improvement of about 5% by putting the outer loop into a proc. Most of the time in this example is spent in the "is_prime" proc. One can get much bigger improvements by using critcl for the is_prime function (see below): baseline list 1766907.44 100.00 loop proc 1689220.00 95.60 is_prime_list_c 118298.50 6.70 This is in the spirit of thinking in "system languages" and "glue languages" by John Ousterhout, where one should find the right mix for the applications, when performance matters. all the best -g =================================================================================== package require critcl critcl::cproc is_prime_list_c {Tcl_Interp* interp list primes int x} int { int i; for (i=0; i x) return 1; if (x%d == 0) return 0; } return -1; } critcl::load =================================================================================== =================================================================================== proc run_list_c {} { set primes {2 3 5 7} set n $::env(MAXN) for {set i 9} {1} {incr i 2} { if {[is_prime_list_c $primes $i]} { lappend primes $i if {[llength $primes] == $n} { puts "primes\[$n\] = $i" break } } } } ===================================================================================