Core Benchmark Results

000 VERSIONS: 1:8.4a3 1:8.3.3 1:8.2.3 1:8.1.1 1:8.0.5 1:7.6p2 1:7.5p1
001 CATCH return ok 11 6 7 4 5 28 17
002 CATCH return error 70 64 275 54 204 146 33
003 CATCH no catch used 10 6 7 13 4 24 9
004 IF if true numeric 17 11 13 7 9 152 61
005 IF elseif true numeric 20 15 16 20 11 299 292
006 IF else true numeric 20 15 16 15 11 318 82
007 IF if true num/num 17 12 281 22 9 329 174
008 IF if false num/num 17 12 13 13 9 202 182
009 IF if false al/num 27 20 20 29 17 467 121
010 IF if true al/al 31 26 26 51 169 292 184
011 IF if false al/al 31 25 25 51 60 217 243
012 IF if true al 32 25 25 42 51 214 76
013 IF elseif true al 47 39 338 89 156 358 154
014 IF else true al 46 40 42 71 51 292 323
015 SWITCH first true 63 42 103 58 73 391 241
016 SWITCH second true 58 39 153 65 62 340 282
017 SWITCH ninth true 67 44 238 73 112 391 284
018 SWITCH default true 62 38 46 73 77 492 292
019 DATA create in a list 4883 4083 15014 12925 7886 40180 29501
020 DATA create in an array 5388 4916 19172 12827 16792 53723 40784
021 DATA access in a list 4028 3546 15346 10386 7024 182889 175028
022 DATA access in an array 3507 3223 14156 6966 7640 43232 39744
023 EVAL cmd eval in list obj var 26 22 52 40 84 27 26
024 EVAL cmd eval as list 24 21 49 88 144 22 52
025 EVAL cmd eval as string 60 50 54 79 90 26 64
026 EVAL cmd and mixed lists 3347 3546 32485 21937 13914 3017 2112
027 EVAL list cmd and mixed lists 3403 3591 40366 19014 14703 2936 2259
028 EVAL list cmd and pure lists 543 582 40115 21974 12611 2653 2245
029 EXPR unbraced 153 167 502 23 331 313 365
030 EXPR braced 29 25 29 53 92 505 386
031 EXPR inline 31 30 40 68 59 321 177
032 EXPR one operand 11 6 158 9 11 47 65
033 EXPR ten operands 18 13 97 13 20 159 141
034 EXPR fifty operands 48 43 45 71 85 708 430
035 EXPR incr with incr 16 11 10 16 22 31 45
036 EXPR incr with expr 11 7 9 11 13 73 74
037 FCOPY std: 160010 bytes 10069 10242 46300 25104 26557
038 FCOPY binary: 160010 bytes 9932 9892 41776 25211
039 FCOPY encoding: 160010 bytes 9818 9831 44598 25972
040 KLIST shuffle0 llength 1 144 127 554 271 367
041 KLIST shuffle0 llength 10 457 413 1592 901 728
042 KLIST shuffle0 llength 100 3986 3552 13565 8229 6484
043 KLIST shuffle0 llength 1000 44083 41766 164223 92480 81157
044 KLIST shuffle0 llength 10000 563245 533804 2073612 1214997 1161217
045 KLIST shuffle1 llength 1 84 85 367 163 149
046 KLIST shuffle1 llength 10 358 333 1371 718 634
047 KLIST shuffle1 llength 100 6374 5238 12737 9243 8576
048 KLIST shuffle1 llength 1000 1190696 1194146 1770024 1762135 1736049
049 KLIST shuffle1a llength 1 110 100 94 172 150
050 KLIST shuffle1a llength 10 474 368 404 768 910
051 KLIST shuffle1a llength 100 4667 3625 3833 8986 9480
052 KLIST shuffle1a llength 1000 47818 37340 39248 84798 95305
053 KLIST shuffle1a llength 10000 474513 380522 408005 861405 1004602
054 KLIST shuffle2 llength 1 104 99 108 196 229
055 KLIST shuffle2 llength 10 440 375 481 938 1080
056 KLIST shuffle2 llength 100 3762 3625 4250 8904 9803
057 KLIST shuffle2 llength 1000 39573 37028 45651 95513 116933
058 KLIST shuffle2 llength 10000 474558 433771 527055 1176566 1304458
059 KLIST shuffle3 llength 1 104 98 102 217 170
060 KLIST shuffle3 llength 10 380 335 376 786 832
061 KLIST shuffle3 llength 100 3408 2883 3413 7161 7632
062 KLIST shuffle3 llength 1000 38716 33237 37667 87353 82985
063 KLIST shuffle3 llength 10000 945771 777699 844383 1789387 1732151
064 KLIST shuffle4 llength 1 114 102 100 202 178
065 KLIST shuffle4 llength 10 431 374 416 837 876
066 KLIST shuffle4 llength 100 3871 3250 3758 8572 8278
067 KLIST shuffle4 llength 1000 40201 32119 38186 82985 80450
068 KLIST shuffle4 llength 10000 393369 330472 398724 874454 834612
069 STR/LIST length, obj shimmer 2390 2767 2333 905 28 2585 2638
070 LIST length, pure list 18 13 13 21 18 2023 1837
071 STR length of a LIST 15 12 12 529 23 525 400
072 LIST exact search, first item 19 11 14 17 32 2303 1693
073 LIST exact search, middle item 69 25 27 46 38 1787 1944
074 LIST exact search, last item 132 48 50 90 111 2261 2009
075 LIST exact search, non-item 314 110 121 212 220 2099 2118
076 LIST sorted search, first item 23 12 12 16 29 1862 1610
077 LIST sorted search, middle item 24 26 26 42 40 1623 2252
078 LIST sorted search, last item 24 52 49 84 121 2145 1784
079 LIST sorted search, non-item 23 111 122 201 257 1999 2057
080 LIST exact search, untyped item 131 47 51 80 101 2166 2218
081 LIST exact search, typed item 128 48 49 77 111 2072 1872
082 LIST sorted search, typed item 19 46 50 93 104 1887 2221
083 LIST sort 3299 3578 3293 6723 7021 10959 9644
084 LIST typed sort 2739 2943 2660 4737 4651 28889 23969
085 LIST remove first element 317 296 363 806 866 625 522
086 LIST remove middle element 325 291 358 692 876 656 677
087 LIST remove last element 318 293 360 689 879 754 675
088 LIST replace first element 310 289 346 722 917 727 978
089 LIST replace middle element 316 286 353 693 1045 1024 876
090 LIST replace last element 316 283 346 963 832 1450 1243
091 LIST replace first el with multiple 333 304 372 819 938 702 612
092 LIST replace middle el with multiple 319 310 351 691 736 1088 1123
093 LIST replace last el with multiple 319 282 347 813 740 1413 1313
094 LIST replace range 294 282 343 744 866 1198 971
095 LIST remove in mixed list 389 374 2195 833 999 829 617
096 LIST replace in mixed list 377 352 2184 1054 925 756 592
097 LIST index first element 18 10 13 16 25 451 375
098 LIST index middle element 17 10 13 16 23 516 536
099 LIST index last element 17 11 13 13 17 622 663
100 LIST insert an item at start 291 298 366 775 805 729 563
101 LIST insert an item at middle 269 266 370 684 667 978 630
102 LIST insert an item at "end" 257 254 349 670 1013 1779 1200
103 LIST small, early range 23 19 16 42 35 500 383
104 LIST small, late range 23 18 16 28 38 618 685
105 LIST large, early range 37 29 24 54 108 511 697
106 LIST large, late range 40 30 21 81 131 567 551
107 LIST append to list 409 401 396 917 1032 737 682
108 LIST join list 1053 1072 1066 1818 1453 3672 3167
109 LOOP for, iterate list 6616 5198 5372 13766 9653 662376 583297
110 LOOP foreach, iterate list 1919 1845 1952 3750 3553 11561 12556
111 LOOP for (to 1000) 2566 2674 3065 4639 4867 66896 73851
112 LOOP while (to 1000) 2568 2942 3065 4551 4637 69891 80404
113 LOOP for, iterate string 6456 9440 9637 141594 14530 219770 199570
114 LOOP foreach, iterate string 2240 2249 3955 9099 8147 15468 13206
115 MAP string 1 val 679 5931 6028 9096 (8.2+) (8.2+) (8.2+)
116 MAP string 2 val 1562 6643 6877 12943 (8.2+) (8.2+) (8.2+)
117 MAP string 3 val 1836 7673 7832 12825 (8.2+) (8.2+) (8.2+)
118 MAP string 4 val 2510 8429 8622 17267 (8.2+) (8.2+) (8.2+)
119 MAP string 1 val -nocase 3497 10259 10381 17685 (8.2+) (8.2+) (8.2+)
120 MAP string 2 val -nocase 6218 14570 15024 27379 (8.2+) (8.2+) (8.2+)
121 MAP string 3 val -nocase 8364 19344 18973 35569 (8.2+) (8.2+) (8.2+)
122 MAP string 4 val -nocase 10135 21861 22132 39660 (8.2+) (8.2+) (8.2+)
123 MAP regsub 1 val 3702 3954 4303 9663 1830 4430 3684
124 MAP regsub 2 val 16066 16981 18176 41500 4184 9394 11576
125 MAP regsub 3 val 21671 23258 24817 52315 6075 11441 12456
126 MAP regsub 4 val 26657 29335 31350 67973 8659 15319 13884
127 MAP regsub 1 val -nocase 3686 3913 4332 9463 2766 4729 4488
128 MAP regsub 2 val -nocase 15821 17024 18134 40735 5881 9546 11911
129 MAP regsub 3 val -nocase 20987 23228 24747 52639 8625 12501 14437
130 MAP regsub 4 val -nocase 26227 29397 31314 66937 11664 14510 16818
131 MAP string, no match 926 7712 8028 14020 (8.2+) (8.2+) (8.2+)
132 MAP string -nocase, no match 6726 18725 18933 35683 (8.2+) (8.2+) (8.2+)
133 MAP regsub, no match 1149 2764 2830 6704 1843 3352 4823
134 MAP regsub -nocase, no match 1151 2785 2890 6609 3563 4499 5249
135 MAP string short 37 41 39 116 (8.2+) (8.2+) (8.2+)
136 MAP regsub short 164 180 193 308 154 244 432
137 MTHD direct ns proc call 10 6 8 3 7
138 MTHD imported ns proc call 11 6 7 5 7
139 MTHD interp alias proc call 25 18 18 18 9
140 MTHD indirect proc eval 36 29 61 56 72
141 MTHD indirect proc eval #2 58 48 57 81 107
142 MTHD array stored proc call 14 9 10 22 19
143 MTHD switch method call 50 38 83 119 172
144 MTHD ns lookup call 99 81 216 374 376
145 MTHD inline call 5 3 3 2 2
146 PROC explicit return 15 7 8 7 7 11 11
147 PROC implicit return 11 6 7 4 11 16 15
148 PROC explicit return (2) 12 7 8 13 13 14 10
149 PROC implicit return (2) 10 6 7 10 18 21 24
150 PROC explicit return (3) 10 7 7 4 14 14 25
151 PROC implicit return (3) 10 6 7 3 12 10 18
152 PROC heavily commented 10 5 6 12 5 629 753
153 PROC do-nothing, no args 8 5 28 38 4 5 2
154 PROC do-nothing, one arg 10 5 6 9 8 15 21
155 PROC local links with global 1579 1569 1626 3586 4533 7955 11505
156 PROC local links with upvar 1287 1166 1387 2806 2922 8371 10317
157 PROC local links with variable 1195 1101 1334 2614 1050 9091 9212
158 READ 595K, gets 340064 299797 306109 819327 372526 978472 985676
159 READ 595K, read 77751 97698 97019 227338 2936958 3774669 3834017
160 READ 595K, read & size 77606 97909 97074 242255 124776 3696432 3704813
161 READ 3050b, gets 1869 1641 2052 4118 954 2074 2201
162 READ 3050b, read 522 494 494 789 748 503 415
163 READ 3050b, read & size 569 534 530 790 410 467 361
164 BREAD 595K, gets 350077 292326 304961 833500 365165 953379 979961
165 BREAD 595K, read 50105 50454 50018 228963 2952787 3640795 3741298
166 BREAD 595K, read & size 50303 50486 50140 246365 87019 3685978 3688120
167 BREAD 3050b, gets 2097 1777 1774 5220 1062 2208 2178
168 BREAD 3050b, read 340 347 334 1310 412 458 359
169 BREAD 3050b, read & size 396 389 369 1144 1230 390 495
170 REGEXP literal regexp 39 37 38 42 31 26 26
171 REGEXP var-based regexp 41 40 40 55 45 30 61
172 REGEXP count all matches 137 139 530 1280 1332 2277 2776
173 REGEXP extract all matches 169 177 616 1790 1129 3068 3620
174 STARTUP time to launch tclsh 21138 20425 18293 85723 102877 70500 90323
175 STR str [string compare] 18 26 24 17 26 199 193
176 STR str [string equal] 18 25 23 68 38 160 198
177 STR str $a equal "" 17 26 24 81 52 670 410
178 STR str num == "" 19 14 24 36 52 338 419
179 STR str $a eq $b 22 33 31 39 56 231 261
180 STR str $a ne $b 23 31 30 85 47 226 265
181 STR str $a eq $b (same obj) 22 33 36 161 53 271 338
182 STR str $a ne $b (same obj) 21 33 30 28 57 203 235
183 STR length (==4010) 15 14 13 678 17 508 867
184 STR index 0 26 19 19 487 30 522 614
185 STR index 100 21 24 19 500 43 491 601
186 STR index 500 21 18 19 483 42 489 493
187 STR index2 0 21 19 19 494 27 485 583
188 STR index2 100 20 19 19 470 26 557 459
189 STR index2 500 21 19 19 484 40 764 468
190 STR first (success) 19 16 15 21 33 533 519
191 STR first (failure) 120 56 50 123 117 697 822
192 STR first (total failure) 109 42 28 54 57 545 631
193 STR last (success) 19 229 224 469 18 815 728
194 STR last (failure) 90 99 91 185 201 657 859
195 STR last (total failure) 82 90 83 135 151 584 1153
196 STR match, simple (success early) 17 14 13 25 33 503 489
197 STR match, simple (success late) 16 14 13 11 27 619 502
198 STR match, simple (failure) 17 15 13 26 36 421 680
199 STR match, simple (total failure) 16 18 13 17 30 456 378
200 STR match, complex (success early) 17 23 22 33 35 466 448
201 STR match, complex (success late) 145 1020 1040 2173 926 1529 1676
202 STR match, complex (failure) 122 1011 1010 1785 964 1357 1698
203 STR match, complex (total failure) 90 994 994 1844 1216 1725 1602
204 STR range, index 100..200 of 4010 26 21 21 716 25 589 609
205 STR replace, no replacement 79 270 264 570 166 1217 1315
206 STR replace, equal replacement 92 277 257 526 140 1560 1263
207 STR replace, longer replacement 95 270 265 551 103 1563 1309
208 STR repeat, abcdefghij * 10 19 22 22 21 199 997 963
209 STR repeat, abcdefghij * 100 39 72 74 120 1267 8488 9065
210 STR repeat, abcdefghij * 1000 245 565 557 798 12264 81587 86928
211 STR repeat, 4010 chars * 10 314 797 671 1971 1494 11891 7688
212 STR repeat, 4010 chars * 100 7347 18287 18194 47967 69328 105423 107290
213 STR reverse iter1, 100 chars 1285 1628 1425 4104 1871 8459 8704
214 STR reverse iter1, 100 uchars 1264 1768 1436 4448 1864 8250 9034
215 STR reverse iter2, 100 chars 808 1252 1168 3860 2099 8379 8292
216 STR reverse iter2, 100 uchars 807 1259 1096 4086 1602 9513 5431
217 STR reverse recur1, 100 chars 4092 4770 3998 8749 8470 20868 11271
218 STR reverse recur1, 100 uchars 4169 5467 4767 8794 9075 21634 13821
219 STR split, 4010 chars 2663 2138 8847 23626 18954 4372 3169
220 STR split, 12100 uchars 7207 6395
221 STR split iter, 4010 chars 9349 9372 16664 39846 35962 52886 48521
222 STR split iter, 12100 uchars 28171 28299
223 STR append 100 82 71 108 164 1055 1145
224 STR append (1KB + 1KB) 65 55 49 96 79 236 290
225 STR append (10KB + 1KB) 186 193 196 474 75 215 213
226 STR append (1MB + 2b * 1000) 37786 70498 74635 178639 12391 82339 84345
227 STR append (1MB + 1KB) 29729 63374 61479 136891 68 215 335
228 STR append (1MB + 1KB * 20) 29635 64566 61865 127033 270 1551 1724
229 STR append (1MB + 1KB * 1000) 66605 94413 101998 177875 10955 78370 81930
230 STR append (1MB + 1MB * 3) 126103 153051 157370 282029 218 248 876
231 STR append (1MB + 1MB * 5) 157407 303871 315407 1051814 45 543 342
232 STR append (1MB + (1b + 1K + 1b) * 100) 33118 63834 69167 290360 2398 8930 9893
233 STR info locals match 828 818 993 2025 1518 8071 9043
234 TRACE no trace set 35 25 26 18 27 42 91
235 TRACE read 35 26 26 16 59 128 113
236 TRACE write 35 25 26 16 55 78 78
237 TRACE unset 35 26 26 16 70 94 112
238 TRACE all set (rwu) 35 25 25 18 59 77 105
239 UNSET var exists 14 8 9 8 16 27 37
240 UNSET catch var exists 16 9 10 52 20 61 58
241 UNSET catch var !exist 69 64 59 191 120 77 96
242 UNSET info check var exists 19 14 13 69 27 80 78
243 UNSET info check var !exist 16 11 11 6 17 73 64
244 UNSET nocomplain var exists 14 9 10 35 20 52 56
245 UNSET nocomplain var !exist 14 64 59 157 122 90 109
246 VAR access locally set 14 8 10 18 20 106 67
247 VAR access local proc arg 14 9 10 6 26 88 110
248 VAR access global 34 25 26 101 61 82 121
249 VAR access upvar 36 29 30 103 65 97 101
250 VAR set scalar 10 6 7 4 11 35 74
251 VAR set array element 18 12 14 9 33 59 35
252 VAR 100 'set's in array 162 133 160 296 292 917 827
253 VAR 'array set' of 100 elems 293 251 264 741 816 1063 993