[Jeffrey Hobbs]: There have been discussions about the changing relative speed of Tcl over the years (primarily rotating around the addition of the byte-code compiler - faster, but then also the changes to support i18n - slower). I created the tclbench [http://tcllib.sf.net/] application to get a better understanding of what has truly happened to performance over the years, with the forward looking view of finding the pain points and fixing them. Anyone can get tclbench from CVS [http://tcllib.cvs.sourceforge.net/tcllib/] to do relative benchmarks themselves, but below I've posted the results from a full run over the benchmark suite. All builds represent the final code of that version. A few have noted that these numbers aren't the easiest to read overall, which I can agree with. Take a look at the [Tcl Normalized Benchmarks] that set 8.4 as a norm of 1.0 to compare against. For those looking for more complete version-by-version comparisons, see [Tcl Extended Benchmarks]. If you've got BLT handy, then here is a little code for [Plotting Tcl Benchmarks]. The speed enhancements in 8.4 are primarily achieved by work done by myself and Eric Melski at Ajuba and continued at [ActiveState]. Addition optimizations are also done by [Miguel Sofer]. Additional major enhancements in 8.5 done by [JH], [Miguel Sofer] and [Donal Fellows]. For those interested in the use of threads for concurrent processing, please see the [Tcl Benchmarks with Threads]. The ''numbers are microseconds'', but you should only look at them relative to each other. ''Lower is better.'' There is some fluctuation expected as Tcl's 'time' does wall timing, not true cpu time. In any case, these were done on a P4 1.9ghz with 1GB physmem running SuSE 9.2. All interpreters were compiled static with no threads using gcc 3.3.4 (pre 3.3.5 20040809) with -O2 (no -mcpu modifiers). ---- TCL_INTERP: 1:8.5b2.1 2:8.4.17 3:8.3.5 4:8.2.3 5:8.0.5 6:7.6p2 STARTED 2007-11-16 11:21:08 (runbench.tcl v1.20) Benchmark 1:8.5b2.1 /home/jeffh/install/linux-ix86/bin/canon8.5 abbccdeeeffghkllmmmmnpprrssstuvw 00:02:08 elapsed 124194 milliseconds Benchmark 2:8.4.17 /home/jeffh/install/linux-ix86/bin/canon8.4 abbccdeeeffghkllmmmmnpprrssstuvw 00:02:25 elapsed 140805 milliseconds Benchmark 3:8.3.5 /home/jeffh/install/linux-ix86/bin/canon8.3 abbccdeeeffghkllmmmmnpprrssstuvw 00:04:01 elapsed 239211 milliseconds Benchmark 4:8.2.3 /home/jeffh/install/linux-ix86/bin/canon8.2 abbccdeeeffghkllmmmmnpprrssstuvw 00:03:56 elapsed 235704 milliseconds Benchmark 5:8.0.5 /home/jeffh/install/linux-ix86/bin/canon8.0 abbccdeeeffghkllmmmmnpprrssstuvw 00:02:52 elapsed 164640 milliseconds Benchmark 6:7.6p2 /home/jeffh/install/linux-ix86/bin/canon7.6 abbccdeeeffghkllmmmmnpprrssstuvw 00:07:01 elapsed 411967 milliseconds 000 VERSIONS: 1:8.5b2.1 2:8.4.17 3:8.3.5 4:8.2.3 5:8.0.5 6:7.6p2 001 ARRAY genKeys 50 262.01 296.83 335.00 317.00 294.00 412.00 002 ARRAY genKeys 500 2198.98 2549.10 2106.00 1834.00 1642.00 2862.00 003 ARRAY makeHash 500 50 60838.28 56050.50 55720.00 70902.00 63804.00 74695.00 004 BASE64 decode 10 101.12 120.13 148.00 143.00 130.00 -=- 005 BASE64 decode 100 818.23 953.50 1178.00 1223.00 1069.00 -=- 006 BASE64 decode 1000 7948.00 9122.85 11429.00 11784.00 11212.00 -=- 007 BASE64 decode 10000 76800.40 90911.90 113699.0 119166.0 103481.0 -=- 008 BASE64 decode2 10 99.32 124.17 145.00 148.00 125.00 -=- 009 BASE64 decode2 100 812.35 936.25 1152.00 1191.00 1036.00 -=- 010 BASE64 decode2 1000 7613.65 8936.10 11117.00 11777.00 10138.00 -=- 011 BASE64 decode2 10000 75943.10 89038.50 110281.0 117102.0 102030.0 -=- 012 BASE64 decode3 10 57.37 61.66 86.00 87.00 74.00 -=- 013 BASE64 decode3 100 377.07 442.70 676.00 670.00 587.00 -=- 014 BASE64 decode3 1000 3441.40 4008.05 6392.00 6406.00 5673.00 -=- 015 BASE64 decode3 10000 33785.20 40319.30 64162.00 64523.00 56981.00 -=- 016 BASE64 encode 10 79.80 81.40 113.00 117.00 107.00 -=- 017 BASE64 encode 100 516.42 518.40 821.00 839.00 856.00 -=- 018 BASE64 encode 1000 4886.40 4879.90 7985.00 8115.00 8106.00 -=- 019 BASE64 encode 10000 49842.40 48756.80 79848.00 83991.00 81568.00 -=- 020 BASE64 encode2 10 53.51 67.86 97.00 94.00 113.00 -=- 021 BASE64 encode2 100 373.80 476.90 815.00 808.00 1087.00 -=- 022 BASE64 encode2 1000 3625.20 4524.60 7919.00 7881.00 10772.00 -=- 023 BASE64 encode2 10000 36071.00 45168.20 78694.00 81331.00 107290.0 -=- 024 BASE64 encode3 10 41.85 43.25 56.00 54.00 46.00 -=- 025 BASE64 encode3 100 187.20 234.25 387.00 374.00 329.00 -=- 026 BASE64 encode3 1000 1607.45 2054.50 3608.00 3437.00 3019.00 -=- 027 BASE64 encode3 10000 15538.80 19798.30 36181.00 34282.00 30671.00 -=- 028 BIN bitset-v1 1000 chars 3732.08 4333.34 4858.00 5167.00 4274.00 -=- 029 BIN bitset-v1 5000 chars 17060.24 20149.11 22783.00 25375.00 21595.00 -=- 030 BIN bitset-v1 10000 chars 34528.53 40010.20 45100.00 49079.00 43058.00 -=- 031 BIN bitset-v2 1000 chars 2319.63 2433.38 2913.00 2693.00 2512.00 -=- 032 BIN bitset-v2 5000 chars 10849.42 11917.48 14666.00 13472.00 12597.00 -=- 033 BIN bitset-v2 10000 chars 23528.67 23573.47 29482.00 27277.00 25287.00 -=- 034 BIN bitset-v3 1000 chars 892.86 830.77 1616.00 1538.00 1295.00 -=- 035 BIN bitset-v3 5000 chars 4589.19 3783.94 8485.00 7860.00 6757.00 -=- 036 BIN bitset-v3 10000 chars 9165.25 7493.00 17131.00 15827.00 14067.00 -=- 037 BIN c scan, 1000b 277.45 273.94 129.00 130.00 99.00 -=- 038 BIN c scan, 5000b 913.44 1026.94 631.00 641.00 488.00 -=- 039 BIN c scan, 10000b 1791.19 1666.71 1432.00 1443.00 1167.00 -=- 040 BIN chars, 10000b 7976.80 7676.92 17328.00 16499.00 14019.00 -=- 041 BIN u char, 10000b 1699.41 -=- -=- -=- -=- -=- 042 CATCH error, complex 17.85 9.33 9.00 7.00 6.00 8.00 043 CATCH no catch used 5.77 3.69 3.00 4.00 3.00 4.00 044 CATCH return error 17.98 10.02 7.00 7.00 6.00 9.00 045 CATCH return except 4.77 3.34 3.00 3.00 2.00 4.00 046 CATCH return ok 6.20 3.90 4.00 3.00 3.00 5.00 047 DATA access in a list 184.69 259.10 632.00 608.00 563.00 12348.00 048 DATA access in an array 524.91 394.83 666.00 670.00 612.00 1801.00 049 DATA create in a list 216.02 210.84 737.00 644.00 656.00 1675.00 050 DATA create in an array 816.12 683.93 924.00 916.00 1225.00 2096.00 051 ENC iso2022-jp, gets 210.90 8217.77 2834.00 2814.00 -=- -=- 052 ENC iso2022-jp, read 159.40 8261.93 2743.00 2738.00 -=- -=- 053 ENC iso2022-jp, read & size 169.23 8276.03 2780.00 2810.00 -=- -=- 054 ENC iso8859-2, gets 196.60 283.63 195.00 169.00 -=- -=- 055 ENC iso8859-2, read 154.87 238.80 137.00 130.00 -=- -=- 056 ENC iso8859-2, read & size 159.27 250.57 146.00 140.00 -=- -=- 057 EVAL cmd and mixed lists 670.08 708.31 541.00 1527.00 1111.00 164.00 058 EVAL cmd eval as list 3.31 3.18 4.00 6.00 6.00 4.00 059 EVAL cmd eval as string 10.06 8.06 6.00 7.00 6.00 3.00 060 EVAL cmd eval in list obj var 5.09 4.20 3.00 9.00 7.00 4.00 061 EVAL list cmd and mixed lists 664.60 703.51 562.00 1544.00 1106.00 164.00 062 EVAL list cmd and pure lists 62.73 53.66 37.00 1547.00 1107.00 162.00 063 EXPR $a != $b int 2.17 2.47 2.00 2.00 2.00 9.00 064 EXPR $a != $b str (!= len) 4.86 5.34 5.00 5.00 5.00 15.00 065 EXPR $a != $b str (== len) 4.85 6.08 7.00 6.00 5.00 14.00 066 EXPR $a == $b int 2.07 2.52 2.00 2.00 2.00 10.00 067 EXPR $a == $b str (!= len) 4.63 5.24 5.00 5.00 5.00 14.00 068 EXPR $a == $b str (== len) 5.83 7.32 5.00 5.00 6.00 15.00 069 EXPR braced 5.84 4.66 7.00 4.00 4.00 22.00 070 EXPR fifty operands 8.65 8.04 10.00 9.00 7.00 32.00 071 EXPR incr with expr 1.72 1.59 2.00 1.00 1.00 3.00 072 EXPR incr with incr 1.57 1.54 2.00 1.00 1.00 3.00 073 EXPR inline 6.25 6.20 5.00 5.00 4.00 10.00 074 EXPR one operand 1.65 1.62 1.00 1.00 1.00 2.00 075 EXPR ten operands 2.71 2.76 3.00 3.00 2.00 8.00 076 EXPR unbraced 71.28 36.89 31.00 27.00 21.00 20.00 077 FCOPY binary: 160K 2392.34 2373.54 2431.00 2486.00 -=- -=- 078 FCOPY encoding: 160K 6953.41 6741.22 2391.00 2497.00 -=- -=- 079 FCOPY std: 160K 2395.06 2396.57 2395.00 2447.00 2887.00 2754.00 080 FILE exec interp 7678.53 6150.17 5785.00 4942.00 5409.00 2869.00 081 FILE exec interp: pkg require 25401.90 16862.70 13378.00 11819.00 7560.00 4169.00 082 FILE exists tmpfile (obj) 4.07 4.40 4.00 4.00 3.00 3.00 083 FILE exists ~ 3.48 3.69 93.00 88.00 3.00 6.00 084 FILE exists! tmpfile (obj) 3.63 3.95 4.00 4.00 3.00 3.00 085 FILE exists! tmpfile (str) 9.94 22.27 5.00 5.00 3.00 3.00 086 FILE glob tmpdir (60 entries) 130.85 159.45 122.00 135.00 96.00 94.00 087 FILE glob / all subcommands 6471.32 6722.30 6430.00 6435.00 5138.00 4931.00 088 FILE glob / atime 1168.27 1150.62 456.00 500.00 379.00 448.00 089 FILE glob / attributes 2293.36 2052.22 1363.00 1515.00 1054.00 -=- 090 FILE glob / dirname 199.37 605.84 288.00 356.00 298.00 308.00 091 FILE glob / executable 1130.02 1134.90 424.00 487.00 354.00 394.00 092 FILE glob / exists 1138.07 1143.67 415.00 487.00 357.00 398.00 093 FILE glob / extension 228.15 337.17 197.00 270.00 220.00 230.00 094 FILE glob / isdirectory 1148.47 1157.27 429.00 493.00 373.00 398.00 095 FILE glob / isfile 1150.33 1143.13 429.00 505.00 376.00 400.00 096 FILE glob / mtime 1157.17 1158.44 433.00 502.00 375.00 626.00 097 FILE glob / owned 1165.71 1174.62 443.00 512.00 394.00 414.00 098 FILE glob / readable 1137.16 1132.85 404.00 479.00 365.00 399.00 099 FILE glob / rootname 237.94 339.96 201.00 269.00 222.00 232.00 100 FILE glob / size 1162.60 1153.21 425.00 503.00 371.00 434.00 101 FILE glob / tail 201.95 473.43 254.00 328.00 274.00 277.00 102 FILE glob / writable 1141.31 1150.35 415.00 496.00 362.00 389.00 103 FILE recurse / -dir 4751.51 5953.52 4010.00 4187.00 4026.00 3874.00 104 FILE recurse / cd 5014.16 9111.18 3734.00 3779.00 3806.00 3545.00 105 GCCont_cpb::cGCC 50 87.88 83.06 199.00 197.00 149.00 -=- 106 GCCont_cpb::cGCC 500 492.41 421.06 1302.00 1338.00 1122.00 -=- 107 GCCont_cpb::cGCC 5000 4612.04 3639.32 11839.00 12446.00 10567.00 -=- 108 GCCont_cpbre1::cGCC 50 115.37 121.57 122.00 -=- -=- -=- 109 GCCont_cpbre1::cGCC 500 805.94 825.16 745.00 -=- -=- -=- 110 GCCont_cpbre1::cGCC 5000 7654.28 7840.16 6912.00 -=- -=- -=- 111 GCCont_cpbre2::cGCC 50 87.37 93.00 91.00 -=- -=- -=- 112 GCCont_cpbre2::cGCC 500 642.01 719.25 621.00 -=- -=- -=- 113 GCCont_cpbre2::cGCC 5000 6192.74 6811.24 5946.00 -=- -=- -=- 114 GCCont_cpbrs2::cGCC 50 33.60 35.80 100.00 100.00 -=- -=- 115 GCCont_cpbrs2::cGCC 500 131.80 135.85 742.00 761.00 -=- -=- 116 GCCont_cpbrs2::cGCC 5000 1075.14 1087.88 7062.00 7393.00 -=- -=- 117 GCCont_cpbrs::cGCC1 50 51.07 55.92 156.00 156.00 84.00 -=- 118 GCCont_cpbrs::cGCC1 500 159.82 164.86 886.00 912.00 194.00 -=- 119 GCCont_cpbrs::cGCC1 5000 1184.66 1207.58 7899.00 8201.00 1062.00 -=- 120 GCCont_cpbrs::cGCC2 50 46.68 51.48 162.00 160.00 81.00 -=- 121 GCCont_cpbrs::cGCC2 500 146.16 152.54 914.00 949.00 179.00 -=- 122 GCCont_cpbrs::cGCC2 5000 1086.34 1116.80 8240.00 8465.00 953.00 -=- 123 GCCont_cpbrs_trap::cGCC 50 103.76 109.61 106.00 113.00 66.00 -=- 124 GCCont_cpbrs_trap::cGCC 500 711.95 769.16 695.00 762.00 409.00 -=- 125 GCCont_cpbrs_trap::cGCC 5000 6736.56 7295.26 6579.00 7139.00 3634.00 -=- 126 GCCont_expr::cGCC 50 97.69 87.36 79.00 77.00 -=- -=- 127 GCCont_expr::cGCC 500 436.77 1022.94 971.00 960.00 -=- -=- 128 GCCont_expr::cGCC 5000 3829.30 76596.34 63702.00 57131.00 -=- -=- 129 GCCont_i::cGCC1 50 68.20 140.86 169.00 165.00 126.00 -=- 130 GCCont_i::cGCC1 500 534.60 1289.43 1536.00 1486.00 1278.00 -=- 131 GCCont_i::cGCC1 5000 5193.20 12551.62 14905.00 14696.00 12780.00 -=- 132 GCCont_i::cGCC2 50 54.68 52.74 87.00 96.00 67.00 -=- 133 GCCont_i::cGCC2 500 430.32 401.23 702.00 785.00 676.00 -=- 134 GCCont_i::cGCC2 5000 4218.88 3969.30 6947.00 7871.00 6838.00 -=- 135 GCCont_i::cGCC3 50 49.55 46.43 77.00 91.00 63.00 -=- 136 GCCont_i::cGCC3 500 372.26 337.61 631.00 711.00 619.00 -=- 137 GCCont_i::cGCC3 5000 3613.68 3266.28 6053.00 7165.00 6227.00 -=- 138 GCCont_r1::cGCC 50 73.96 163.93 236.00 212.00 165.00 -=- 139 GCCont_r1::cGCC 500 695.55 1595.81 2280.00 2021.00 1598.00 -=- 140 GCCont_r1::cGCC 5000 6968.24 15783.64 22759.00 19979.00 15806.00 -=- 141 GCCont_r2::cGCC 50 66.30 155.69 183.00 174.00 133.00 -=- 142 GCCont_r2::cGCC 500 571.35 1397.66 1662.00 1603.00 1311.00 -=- 143 GCCont_r2::cGCC 5000 5616.84 13827.50 16142.00 16119.00 13376.00 -=- 144 GCCont_r3::cGCC 50 71.25 155.38 179.00 179.00 134.00 -=- 145 GCCont_r3::cGCC 500 595.42 1406.14 1647.00 1620.00 1347.00 -=- 146 GCCont_r3::cGCC 5000 5823.22 13796.44 16111.00 16135.00 13276.00 -=- 147 GCCont_rsf1::cGCC 50 63.51 61.73 84.00 103.00 -=- -=- 148 GCCont_rsf1::cGCC 500 437.31 394.50 561.00 777.00 -=- -=- 149 GCCont_rsf1::cGCC 5000 4161.40 3679.70 5265.00 7604.00 -=- -=- 150 GCCont_rsf2::cGCC1 50 40.48 40.73 55.00 66.00 -=- -=- 151 GCCont_rsf2::cGCC1 500 223.26 208.75 333.00 426.00 -=- -=- 152 GCCont_rsf2::cGCC1 5000 2020.26 1838.06 3023.00 4002.00 -=- -=- 153 GCCont_rsf2::cGCC2 50 36.53 37.33 45.00 53.00 -=- -=- 154 GCCont_rsf2::cGCC2 500 213.48 198.51 302.00 398.00 -=- -=- 155 GCCont_rsf2::cGCC2 5000 1951.54 1736.62 2812.00 3782.00 -=- -=- 156 GCCont_rsf3::cGCC 50 37.44 37.14 44.00 54.00 -=- -=- 157 GCCont_rsf3::cGCC 500 210.96 200.43 303.00 396.00 -=- -=- 158 GCCont_rsf3::cGCC 5000 1933.66 1752.14 2799.00 3773.00 -=- -=- 159 GCCont_turing::cGCC 50 26.53 32.39 40.00 40.00 -=- -=- 160 GCCont_turing::cGCC 500 125.12 128.04 228.00 230.00 -=- -=- 161 GCCont_turing::cGCC 5000 1069.82 1108.32 2118.00 2137.00 -=- -=- 162 HEAPSORT size 10 113.54 101.40 132.00 129.00 1393.00 727.00 163 HEAPSORT size 50 1010.52 856.11 1097.00 1087.00 8234.00 5938.00 164 HEAPSORT size 100 2434.11 2119.75 2648.00 2607.00 17141.00 14021.00 165 HEAPSORT2 size 10 70.60 93.31 -=- -=- -=- -=- 166 HEAPSORT2 size 50 574.72 790.25 -=- -=- -=- -=- 167 HEAPSORT2 size 100 1402.50 1957.20 -=- -=- -=- -=- 168 IF 1/0 check 1.72 1.71 2.00 2.00 2.00 7.00 169 IF else true al 3.49 5.38 6.00 5.00 4.00 14.00 170 IF else true numeric 2.39 3.73 3.00 3.00 3.00 12.00 171 IF elseif true al 3.58 4.70 5.00 5.00 5.00 14.00 172 IF elseif true numeric 2.44 2.85 4.00 4.00 4.00 12.00 173 IF if false al/al 2.69 3.90 4.00 4.00 3.00 10.00 174 IF if false al/num 2.85 3.12 3.00 3.00 3.00 13.00 175 IF if false num/num 2.31 2.59 3.00 2.00 2.00 10.00 176 IF if true al 2.65 3.01 4.00 3.00 3.00 10.00 177 IF if true al/al 2.65 3.31 4.00 4.00 3.00 10.00 178 IF if true num/num 2.26 2.48 3.00 2.00 2.00 10.00 179 IF if true numeric 3.35 2.40 2.00 2.00 2.00 10.00 180 IF multi 1st true 2.31 2.43 2.00 2.00 2.00 16.00 181 IF multi 2nd true 2.44 2.51 3.00 3.00 3.00 17.00 182 IF multi 9th true 3.45 4.26 6.00 6.00 5.00 32.00 183 IF multi default true 3.67 4.21 6.00 6.00 6.00 32.00 184 KLIST shuffle0 llength 1 11.71 12.26 20.00 19.00 17.00 8.0+ 185 KLIST shuffle0 llength 10 40.72 43.52 76.00 73.00 69.00 8.0+ 186 KLIST shuffle0 llength 100 344.41 345.28 591.00 582.00 508.00 8.0+ 187 KLIST shuffle0 llength 1000 3971.49 3938.92 6430.00 6222.00 5499.00 8.0+ 188 KLIST shuffle0 llength 10000 92068.50 95918.50 113277.0 111659.0 95712.00 -=- 189 KLIST shuffle1-s llength 1 9.57 10.50 14.00 12.00 9.00 41.00 190 KLIST shuffle1-s llength 10 53.95 74.76 93.00 65.00 60.00 272.00 191 KLIST shuffle1-s llength 100 1075.69 1071.40 1405.00 949.00 883.00 4894.00 192 KLIST shuffle1-s llength 1000 61642.31 69865.78 66439.00 42532.00 45002.00 270498.0 193 KLIST shuffle1a llength 1 12.58 13.13 15.00 14.00 10.00 40.00 194 KLIST shuffle1a llength 10 71.86 74.83 84.00 80.00 70.00 341.00 195 KLIST shuffle1a llength 100 698.13 717.42 767.00 759.00 678.00 6333.00 196 KLIST shuffle1a llength 1000 7019.35 7248.84 7635.00 7732.00 6907.00 330389.0 197 KLIST shuffle1a llength 10000 74390.00 74914.80 80300.00 81306.00 76535.00 -=- 198 KLIST shuffle2 llength 1 12.98 11.53 17.00 15.00 17.00 41.00 199 KLIST shuffle2 llength 10 83.28 58.87 81.00 76.00 103.00 264.00 200 KLIST shuffle2 llength 100 825.82 552.03 757.00 698.00 951.00 2500.00 201 KLIST shuffle2 llength 1000 9172.97 6345.04 8287.00 7431.00 9825.00 25333.00 202 KLIST shuffle2 llength 10000 112780.2 81209.30 99509.00 91009.00 117807.0 -=- 203 KLIST shuffle3 llength 1 9.68 10.36 14.00 14.00 10.00 31.00 204 KLIST shuffle3 llength 10 53.74 51.32 71.00 65.00 60.00 247.00 205 KLIST shuffle3 llength 100 510.26 491.79 606.00 610.00 523.00 3170.00 206 KLIST shuffle3 llength 1000 5498.44 5231.51 6587.00 6524.00 5712.00 101754.0 207 KLIST shuffle3 llength 10000 97992.50 94799.60 110181.0 121676.0 108634.0 -=- 208 KLIST shuffle4 llength 1 9.79 11.06 15.00 15.00 11.00 32.00 209 KLIST shuffle4 llength 10 54.91 53.43 80.00 72.00 67.00 269.00 210 KLIST shuffle4 llength 100 518.53 506.89 690.00 656.00 592.00 4139.00 211 KLIST shuffle4 llength 1000 5156.37 5055.02 6821.00 6541.00 5792.00 176062.0 212 KLIST shuffle4 llength 10000 55824.10 55566.50 73462.00 69937.00 63144.00 -=- 213 KLIST shuffle5-s llength 1 6.16 5.64 6.00 6.00 5.00 26.00 214 KLIST shuffle5-s llength 10 40.20 42.74 54.00 36.00 33.00 171.00 215 KLIST shuffle5-s llength 100 518.18 597.26 757.00 443.00 420.00 2012.00 216 KLIST shuffle5-s llength 1000 19174.01 21709.60 25938.00 13926.00 14690.00 57967.00 217 KLIST shuffle5a llength 1 7.21 7.32 8.00 7.00 6.00 29.00 218 KLIST shuffle5a llength 10 50.50 47.51 48.00 44.00 38.00 205.00 219 KLIST shuffle5a llength 100 491.27 466.88 445.00 401.00 352.00 2553.00 220 KLIST shuffle5a llength 1000 5388.67 5057.30 4920.00 4374.00 3944.00 75134.00 221 KLIST shuffle5a llength 10000 95442.90 92041.60 92842.00 87894.00 85070.00 -=- 222 KLIST shuffle6 llength 1 2.13 2.03 -=- -=- -=- -=- 223 KLIST shuffle6 llength 10 24.54 23.09 -=- -=- -=- -=- 224 KLIST shuffle6 llength 100 242.39 213.30 -=- -=- -=- -=- 225 KLIST shuffle6 llength 1000 2450.61 2158.91 -=- -=- -=- -=- 226 KLIST shuffle6 llength 10000 28344.60 25894.80 -=- -=- -=- -=- 227 LIST append to list 2.50 2.53 4.00 4.00 3.00 3.00 228 LIST concat APPEND 2x10 12.02 12.38 20.00 13.00 10.00 6.00 229 LIST concat APPEND 2x100 89.39 98.12 116.00 101.00 88.00 23.00 230 LIST concat APPEND 2x1000 805.88 862.29 1010.00 907.00 764.00 160.00 231 LIST concat APPEND 2x10000 8914.36 9618.55 10909.00 9682.00 8549.00 1553.00 232 LIST concat CONCAT 2x10 4.15 4.64 5.00 11.00 8.00 7.00 233 LIST concat CONCAT 2x100 6.04 6.92 7.00 89.00 75.00 28.00 234 LIST concat CONCAT 2x1000 28.23 36.26 34.00 813.00 687.00 197.00 235 LIST concat CONCAT 2x10000 353.83 380.76 442.00 8688.00 7624.00 1920.00 236 LIST concat EVAL/LAPPEND 2x10 6.80 9.24 11.00 17.00 12.00 10.00 237 LIST concat EVAL/LAPPEND 2x100 14.17 13.84 14.00 41.00 34.00 49.00 238 LIST concat EVAL/LAPPEND 2x1000 67.22 56.08 49.00 263.00 244.00 366.00 239 LIST concat EVAL/LAPPEND 2x10000 768.52 730.72 584.00 3872.00 2605.00 3778.00 240 LIST concat FOREACH/LAPPEND 2x10 8.37 12.22 18.00 17.00 12.00 20.00 241 LIST concat FOREACH/LAPPEND 2x100 48.36 36.07 122.00 107.00 102.00 136.00 242 LIST concat FOREACH/LAPPEND 2x1000 446.67 338.01 1014.00 968.00 910.00 1146.00 243 LIST concat FOREACH/LAPPEND 2x10000 4570.02 3409.39 10478.00 9910.00 8837.00 11654.00 244 LIST concat SET 2x10 10.57 10.69 12.00 10.00 9.00 6.00 245 LIST concat SET 2x100 82.31 87.42 95.00 90.00 78.00 24.00 246 LIST concat SET 2x1000 753.60 797.67 882.00 822.00 686.00 172.00 247 LIST concat SET 2x10000 8285.99 8461.66 9993.00 8702.00 7668.00 1743.00 248 LIST exact search, first item 2.80 2.94 2.00 2.00 2.00 155.00 249 LIST exact search, last item 13.37 12.95 12.00 12.00 11.00 155.00 250 LIST exact search, middle item 4.73 4.64 4.00 4.00 3.00 151.00 251 LIST exact search, non-item 37.29 37.06 35.00 35.00 33.00 160.00 252 LIST exact search, typed item 7.30 8.39 12.00 12.00 11.00 153.00 253 LIST exact search, untyped item 13.30 13.29 12.00 12.00 12.00 151.00 254 LIST index first element 2.09 2.38 2.00 2.00 2.00 31.00 255 LIST index last element 2.36 2.56 2.00 2.00 2.00 49.00 256 LIST index middle element 2.19 2.36 2.00 2.00 2.00 42.00 257 LIST insert an item at "end" 16.73 17.89 19.00 17.00 14.00 113.00 258 LIST insert an item at middle 15.89 18.69 20.00 18.00 16.00 57.00 259 LIST insert an item at start 15.75 19.03 21.00 19.00 16.00 47.00 260 LIST iterate list 455.20 602.30 1301.00 1197.00 1284.00 127600.0 261 LIST join list 244.41 277.66 248.00 245.00 186.00 282.00 262 LIST large, early range 5.31 5.80 5.00 5.00 4.00 44.00 263 LIST large, late range 5.14 5.95 5.00 5.00 4.00 48.00 264 LIST length, pure list 2.09 2.25 2.00 2.00 2.00 170.00 265 LIST list 7.37 7.01 8.00 7.00 6.00 17.00 266 LIST lset foreach l 589.67 659.15 =8.4 =8.4 =8.4 =8.4 267 LIST lset foreach list 589.82 657.42 =8.4 =8.4 =8.4 =8.4 268 LIST lset foreach ""s l 140.30 170.99 =8.4 =8.4 =8.4 =8.4 269 LIST lset foreach ""s list 140.24 169.16 =8.4 =8.4 =8.4 =8.4 270 LIST regexp search, first item 3.08 5.61 5.00 7.00 2.00 156.00 271 LIST regexp search, last item 49.20 321.36 312.00 315.00 53.00 227.00 272 LIST regexp search, non-item 93.63 674.91 657.00 656.00 81.00 243.00 273 LIST remove first element 16.13 18.68 21.00 18.00 16.00 43.00 274 LIST remove in mixed list 16.22 23.36 24.00 424.00 20.00 56.00 275 LIST remove last element 16.01 18.86 21.00 17.00 15.00 62.00 276 LIST remove middle element 16.04 18.36 20.00 18.00 16.00 55.00 277 LIST replace first el with multiple 16.61 18.92 21.00 18.00 16.00 49.00 278 LIST replace first element 16.21 17.15 19.00 16.00 14.00 47.00 279 LIST replace in mixed list 16.35 22.04 23.00 423.00 20.00 59.00 280 LIST replace last el with multiple 16.77 17.66 19.00 16.00 15.00 129.00 281 LIST replace last element 16.56 17.23 19.00 16.00 14.00 113.00 282 LIST replace middle el with multiple 16.69 18.48 20.00 18.00 16.00 91.00 283 LIST replace middle element 16.73 17.55 18.00 16.00 14.00 88.00 284 LIST replace range 5.58 24.23 25.00 24.00 15.00 84.00 285 LIST small, early range 3.15 3.51 3.00 3.00 2.00 35.00 286 LIST small, late range 3.06 3.62 3.00 3.00 2.00 46.00 287 LIST sort 488.86 450.29 451.00 418.00 402.00 537.00 288 LIST sorted search, first item 3.31 3.13 2.00 2.00 2.00 152.00 289 LIST sorted search, last item 3.10 3.30 13.00 12.00 11.00 155.00 290 LIST sorted search, middle item 3.01 3.22 4.00 4.00 3.00 149.00 291 LIST sorted search, non-item 3.05 3.40 35.00 35.00 33.00 155.00 292 LIST sorted search, typed item 2.98 3.29 12.00 12.00 11.00 151.00 293 LIST typed sort 361.23 390.27 528.00 336.00 303.00 1765.00 294 LOOP for (to 1000) 239.63 270.89 490.00 513.00 517.00 3080.00 295 LOOP for, iterate list 352.80 495.23 970.00 1072.00 931.00 45006.00 296 LOOP for, iterate string 614.89 701.66 1362.00 1306.00 1178.00 7432.00 297 LOOP foreach, iterate list 378.93 254.60 382.00 400.00 381.00 1079.00 298 LOOP foreach, iterate string 425.48 298.70 423.00 732.00 714.00 1022.00 299 LOOP while (to 1000) 238.25 274.89 490.00 518.00 517.00 3055.00 300 LOOP while 1 (to 1000) 187.37 248.17 434.00 474.00 494.00 3238.00 301 MAP ([chars])-case regsub 59.13 53.85 48.00 53.00 11.00 16.00 302 MAP http mapReply 12905.58 20505.12 18750.00 19166.00 16352.00 7511.00 303 MAP regsub -nocase, no match 269.63 261.84 586.00 548.00 243.00 267.00 304 MAP regsub 1 val 206.44 212.26 815.00 809.00 138.00 244.00 305 MAP regsub 1 val -nocase 314.81 302.09 812.00 800.00 228.00 288.00 306 MAP regsub 2 val 567.07 568.00 3774.00 3750.00 360.00 581.00 307 MAP regsub 2 val -nocase 762.09 836.89 3813.00 3759.00 514.00 672.00 308 MAP regsub 3 val 817.60 884.40 5134.00 5117.00 474.00 768.00 309 MAP regsub 3 val -nocase 1101.79 1041.85 5162.00 5150.00 642.00 894.00 310 MAP regsub 4 val 1050.81 1034.40 6466.00 6400.00 610.00 948.00 311 MAP regsub 4 val -nocase 1392.36 1328.67 6484.00 6418.00 829.00 1109.00 312 MAP regsub short 8.73 11.00 30.00 34.00 7.00 17.00 313 MAP regsub, no match 78.58 76.83 569.00 541.00 137.00 179.00 314 MAP string -nocase, no match 467.08 424.92 4256.00 4308.00 nomap nomap 315 MAP string 1 val 205.75 204.23 1423.00 1359.00 nomap nomap 316 MAP string 1 val -nocase 318.32 322.85 2396.00 2450.00 nomap nomap 317 MAP string 2 val 403.34 410.86 1451.00 1426.00 nomap nomap 318 MAP string 2 val -nocase 608.60 594.28 3409.00 3424.00 nomap nomap 319 MAP string 3 val 455.35 509.83 1675.00 1712.00 nomap nomap 320 MAP string 3 val -nocase 722.37 1037.40 4240.00 4265.00 nomap nomap 321 MAP string 4 val 573.57 571.14 1780.00 1819.00 nomap nomap 322 MAP string 4 val -nocase 983.66 958.91 4852.00 4909.00 nomap nomap 323 MAP string short 8.24 7.70 7.00 7.00 nomap nomap 324 MAP string, no match 216.75 213.56 1923.00 1943.00 nomap nomap 325 MAP |-case regsub 31.80 31.19 27.00 30.00 8.00 12.00 326 MAP |-case strmap 6.39 6.47 8.00 8.00 nomap nomap 327 MATRIX mult 5x5 171.58 155.13 254.00 256.00 244.00 1060.00 328 MATRIX mult 10x10 1168.69 1037.74 1658.00 1660.00 1490.00 7819.00 329 MATRIX mult 15x15 3903.18 3433.84 5218.00 5225.00 4738.00 27620.00 330 MATRIX transposition-0 1453.96 1220.29 3420.00 3357.00 2923.00 7516.00 331 MATRIX transposition-1 707.99 930.58 2482.00 2733.00 2310.00 25912.00 332 MD5 msg len 10 418.55 398.01 418.00 408.00 -=- -=- 333 MD5 msg len 100 739.85 677.42 711.00 691.00 -=- -=- 334 MD5 msg len 1000 5110.10 4588.10 4810.00 4584.00 -=- -=- 335 MD5 msg len 10000 49529.30 43895.90 46052.00 44158.00 -=- -=- 336 MTHD array stored proc call 2.48 2.47 2.00 2.00 1.00 -=- 337 MTHD call absolute 4.64 4.57 5.00 5.00 4.00 -=- 338 MTHD call relative 5.45 5.52 6.00 5.00 5.00 -=- 339 MTHD direct ns proc call 1.73 1.65 1.00 2.00 1.00 -=- 340 MTHD imported ns proc call 1.77 1.81 2.00 2.00 1.00 -=- 341 MTHD indirect proc eval 4.82 5.03 5.00 9.00 9.00 -=- 342 MTHD indirect proc eval #2 4.16 7.34 8.00 8.00 8.00 -=- 343 MTHD inline call 0.86 0.75 1.00 1.00 1.00 -=- 344 MTHD interp alias proc call 2.01 2.21 3.00 3.00 2.00 -=- 345 MTHD ns lookup call 14.55 15.27 12.00 19.00 16.00 -=- 346 MTHD switch method call 8.58 6.92 6.00 11.00 9.00 -=- 347 NS alternating 368.16 371.35 328.00 468.00 201.00 -=- 348 PARSE html form upload (7978) 2549.65 2824.25 3736.00 3435.00 2886.00 -=- 349 PARSE html form upload (993570) 297425.2 321631.3 444170.0 414364.0 351853.0 -=- 350 PROC do-nothing, no args 1.42 1.41 1.00 4.00 1.00 1.00 351 PROC do-nothing, one arg 1.51 1.68 1.00 1.00 1.00 1.00 352 PROC empty, no args 0.45 0.42 1.00 4.00 1.00 1.00 353 PROC empty, use args 0.47 0.47 2.00 1.00 1.00 1.00 354 PROC explicit return 2.55 1.73 2.00 1.00 1.00 2.00 355 PROC explicit return (2) 1.53 1.57 2.00 2.00 2.00 3.00 356 PROC explicit return (3) 1.54 1.60 1.00 1.00 1.00 1.00 357 PROC heavily commented 1.56 1.50 1.00 1.00 1.00 72.00 358 PROC implicit return 1.68 2.79 2.00 1.00 1.00 2.00 359 PROC implicit return (2) 1.57 1.64 1.00 1.00 1.00 2.00 360 PROC implicit return (3) 1.54 1.49 1.00 1.00 1.00 1.00 361 PROC local links with global 62.93 124.07 153.00 129.00 122.00 556.00 362 PROC local links with upvar 60.47 108.84 138.00 111.00 107.00 544.00 363 PROC local links with variable 59.19 101.90 130.00 104.00 64.00 541.00 364 RE 1-char long-end 15.19 21.91 19.00 15.00 214.00 219.00 365 RE 1-char long-end catching 24.29 32.52 34.00 29.00 225.00 236.00 366 RE 1-char long-middle 9.95 11.87 10.00 10.00 108.00 115.00 367 RE 1-char long-middle catching 18.77 22.12 23.00 23.00 118.00 126.00 368 RE 1-char long-start 4.23 4.66 4.00 4.00 3.00 13.00 369 RE 1-char long-start catching 13.30 15.78 17.00 17.00 12.00 23.00 370 RE 1-char short 4.33 4.81 5.00 4.00 3.00 4.00 371 RE 1-char short catching 12.91 15.00 17.00 17.00 12.00 10.00 372 RE basic 3.91 3.99 4.00 3.00 3.00 4.00 373 RE basic catching 14.42 18.14 18.00 18.00 12.00 10.00 374 RE c-comment long 21.64 23.35 19.00 19.00 19.00 30.00 375 RE c-comment long catching 61.57 62.71 63.00 64.00 32.00 51.00 376 RE c-comment long nomatch 28.23 35.49 31.00 28.00 4.00 22.00 377 RE c-comment long nomatch catching 29.49 36.86 30.00 29.00 5.00 22.00 378 RE c-comment long pmatch 31.28 38.61 32.00 32.00 141.00 141.00 379 RE c-comment long pmatch catching 32.44 39.01 32.00 32.00 133.00 150.00 380 RE c-comment many *s 32.37 39.17 33.00 32.00 35.00 52.00 381 RE c-comment many *s catching 94.08 102.31 99.00 102.00 50.00 91.00 382 RE c-comment nomatch 5.97 6.41 6.00 6.00 3.00 4.00 383 RE c-comment nomatch catching 6.84 7.19 6.00 6.00 3.00 6.00 384 RE c-comment simple 10.46 10.86 10.00 10.00 6.00 7.00 385 RE c-comment simple catching 43.39 44.17 48.00 49.00 15.00 14.00 386 RE count all matches 29.05 31.94 28.00 72.00 77.00 135.00 387 RE extract all matches 33.56 36.38 32.00 98.00 75.00 173.00 388 RE literal regexp 7.09 8.91 8.00 7.00 4.00 4.00 389 RE n-char long-end 15.61 19.64 16.00 20.00 218.00 220.00 390 RE n-char long-end catching 28.55 33.02 32.00 36.00 229.00 232.00 391 RE n-char long-middle 9.97 12.25 10.00 10.00 111.00 116.00 392 RE n-char long-middle catching 21.79 26.33 27.00 26.00 121.00 128.00 393 RE n-char long-start 4.42 5.47 4.00 4.00 3.00 14.00 394 RE n-char long-start catching 16.04 18.42 20.00 20.00 12.00 25.00 395 RE n-char short 4.66 5.13 4.00 4.00 3.00 4.00 396 RE n-char short catching 15.65 17.36 20.00 19.00 12.00 10.00 397 RE static anchored match 1.58 1.53 5.00 5.00 2.00 3.00 398 RE static anchored match dot 1.86 6.54 5.00 5.00 2.00 3.00 399 RE static anchored nomatch 1.62 1.61 3.00 2.00 2.00 3.00 400 RE static anchored nomatch dot 1.82 3.08 3.00 2.00 2.00 3.00 401 RE static l-anchored match 1.74 1.89 3.00 4.00 2.00 3.00 402 RE static l-anchored nomatch 1.64 1.79 2.00 2.00 2.00 2.00 403 RE static long match 4.56 4.79 11.00 11.00 7.00 16.00 404 RE static long nomatch 5.72 6.58 17.00 16.00 7.00 15.00 405 RE static r-anchored match 1.88 1.80 5.00 4.00 2.00 3.00 406 RE static r-anchored nomatch 1.91 1.86 4.00 4.00 2.00 3.00 407 RE static short match 1.85 1.78 5.00 4.00 2.00 3.00 408 RE static short nomatch 1.80 1.76 3.00 3.00 2.00 2.00 409 RE var ***= directive match 2.59 8.05 7.00 7.00 ERR ERR 410 RE var ***= directive nomatch 2.47 8.60 7.00 7.00 ERR ERR 411 RE var . match 2.46 4.38 4.00 4.00 2.00 6.00 412 RE var ^$ nomatch 2.56 3.64 3.00 3.00 3.00 7.00 413 RE var-based regexp 7.63 8.47 7.00 8.00 6.00 7.00 414 READ 595K, cat 53170.13 55825.27 99787.00 82661.00 38107.00 53227.00 415 READ 595K, gets 33694.90 37554.27 77847.00 63122.00 31884.00 51077.00 416 READ 595K, glob-grep match 49578.47 52889.43 90484.00 85732.00 46131.00 78990.00 417 READ 595K, glob-grep nomatch 46407.23 50023.17 113538.0 106475.0 54382.00 76533.00 418 READ 595K, read 8602.20 8675.07 19085.00 18874.00 132133.0 138056.0 419 READ 595K, read & size 8675.33 8662.17 18997.00 18985.00 7022.00 138534.0 420 READ 595K, read dyn buf 8909.00 8791.47 19218.00 8.3+ 8.3+ 8.3+ 421 READ 595K, read small buf 76152.30 74802.17 83964.00 8.3+ 8.3+ 8.3+ 422 READ 3050b, cat 334.86 368.88 560.00 510.00 238.00 330.00 423 READ 3050b, gets 189.28 202.76 394.00 335.00 186.00 285.00 424 READ 3050b, glob-grep match 272.68 356.04 499.00 452.00 256.00 425.00 425 READ 3050b, glob-grep nomatch 262.66 294.86 582.00 556.00 293.00 415.00 426 READ 3050b, read 62.28 60.22 98.00 96.00 45.00 70.00 427 READ 3050b, read & size 70.16 65.64 106.00 106.00 49.00 73.00 428 READ 3050b, read dyn buf 72.34 71.76 117.00 8.3+ 8.3+ 8.3+ 429 READ 3050b, read small buf 404.48 416.42 461.00 8.3+ 8.3+ 8.3+ 430 READ bin 595K, cat 35934.90 68379.43 96929.00 85162.00 37829.00 53231.00 431 READ bin 595K, gets 21240.33 40429.87 77099.00 61756.00 31381.00 50773.00 432 READ bin 595K, glob-grep match 25940.47 57414.20 90345.00 84043.00 46244.00 78516.00 433 READ bin 595K, glob-grep nomatch 26515.27 53671.90 111894.0 105172.0 54050.00 76298.00 434 READ bin 595K, read 2520.03 5275.17 5244.00 5212.00 132194.0 138144.0 435 READ bin 595K, read & size 2535.83 5286.40 5260.00 5258.00 7029.00 138003.0 436 READ bin 595K, read dyn buf 2599.67 5189.50 5232.00 8.3+ 8.3+ 8.3+ 437 READ bin 595K, read small buf 58434.20 60374.40 59931.00 8.3+ 8.3+ 8.3+ 438 READ bin 3050b, cat 270.92 451.74 627.00 524.00 238.00 324.00 439 READ bin 3050b, gets 144.06 239.74 418.00 354.00 188.00 287.00 440 READ bin 3050b, glob-grep match 260.00 338.54 491.00 483.00 275.00 424.00 441 READ bin 3050b, glob-grep nomatch 247.16 332.22 601.00 584.00 300.00 413.00 442 READ bin 3050b, read 38.32 39.98 44.00 43.00 51.00 71.00 443 READ bin 3050b, read & size 45.86 50.64 47.00 49.00 55.00 79.00 444 READ bin 3050b, read dyn buf 52.74 51.04 48.00 8.3+ 8.3+ 8.3+ 445 READ bin 3050b, read small buf 349.14 348.60 349.00 8.3+ 8.3+ 8.3+ 446 SHA (A) msg len 10 591.38 698.65 900.00 851.00 -=- -=- 447 SHA (A) msg len 100 1086.05 1271.47 1656.00 1550.00 -=- -=- 448 SHA (A) msg len 1000 7813.95 9369.40 12376.00 11622.00 -=- -=- 449 SHA (A) msg len 10000 74570.30 89961.70 117769.0 110755.0 -=- -=- 450 SHA (B) msg len 10 -=- 635.91 850.00 807.00 -=- -=- 451 SHA (B) msg len 100 -=- 1136.33 1549.00 1485.00 -=- -=- 452 SHA (B) msg len 1000 -=- 8333.75 11358.00 10988.00 -=- -=- 453 SHA (B) msg len 10000 -=- 79133.80 109731.0 106398.0 -=- -=- 454 SPLIT iter, 4000 uchars 2044.47 1466.23 2002.00 3098.00 2834.00 4059.00 455 SPLIT iter, 4010 chars 2064.82 1404.95 1945.00 3193.00 2811.00 4032.00 456 SPLIT iter, rand 100 c 92.98 89.06 124.00 88.00 68.00 -=- 457 SPLIT iter, rand 1000 c 631.35 575.74 751.00 872.00 711.00 -=- 458 SPLIT iter, rand 10000 c 4855.70 3982.76 6073.00 9023.00 7286.00 -=- 459 SPLIT on 'c', 4000 uchars 89.77 77.68 204.00 257.00 94.00 361.00 460 SPLIT on 'c', 4010 chars 91.16 75.28 193.00 232.00 98.00 323.00 461 SPLIT on 'cz', 4000 uchars 226.05 220.43 360.00 450.00 182.00 441.00 462 SPLIT on 'cz', 4010 chars 208.25 202.65 360.00 426.00 180.00 424.00 463 SPLIT on 'cû', 4000 uchars 257.97 258.76 368.00 446.00 183.00 448.00 464 SPLIT on 'cû', 4010 chars 175.97 174.97 288.00 344.00 104.00 322.00 465 SPLIT, 4000 uchars 540.39 481.25 492.00 1584.00 1318.00 378.00 466 SPLIT, 4010 chars 605.26 419.62 461.00 1580.00 1324.00 369.00 467 SPLIT, rand 100 c 58.50 81.46 83.00 42.00 31.00 -=- 468 SPLIT, rand 1000 c 327.53 315.64 321.00 410.00 325.00 -=- 469 SPLIT, rand 10000 c 1495.06 1447.98 1476.00 4490.00 3561.00 -=- 470 STR append 12.32 13.55 17.00 15.00 14.00 64.00 471 STR append (1KB + 1KB) 6.05 6.51 10.00 9.00 7.00 37.00 472 STR append (1MB + (1b + 1K + 1b) * 100) 3393.11 3427.30 6369.00 6389.00 6312.00 27949.00 473 STR append (1MB + 1KB * 20) 3030.03 3021.99 6012.00 5984.00 5958.00 28021.00 474 STR append (1MB + 1KB * 1000) 6059.09 6087.93 9863.00 9769.00 9640.00 37824.00 475 STR append (1MB + 1KB) 2962.71 2966.66 5945.00 5962.00 5889.00 27190.00 476 STR append (1MB + 1MB * 3) 11626.66 11648.94 14607.00 14627.00 14543.00 72023.00 477 STR append (1MB + 1MB * 5) 14576.30 14594.32 29169.00 29216.00 29099.00 99098.00 478 STR append (1MB + 2b * 1000) 3395.62 3425.70 7161.00 7071.00 7006.00 27445.00 479 STR append (10KB + 1KB) 10.83 10.97 13.00 13.00 10.00 154.00 480 STR first (failure) 14.03 15.42 13.00 13.00 12.00 50.00 481 STR first (failure) utf 13.78 14.34 57.00 56.00 12.00 48.00 482 STR first (success) 2.78 3.07 4.00 3.00 2.00 32.00 483 STR first (success) utf 2.74 3.08 4.00 3.00 2.00 32.00 484 STR first (total failure) 11.22 12.16 6.00 4.00 4.00 43.00 485 STR first (total failure) utf 11.34 11.53 7.00 5.00 4.00 46.00 486 STR index 0 2.99 2.78 3.00 3.00 2.00 35.00 487 STR index 100 2.84 2.83 3.00 3.00 2.00 39.00 488 STR index 500 3.07 2.76 3.00 3.00 2.00 37.00 489 STR info locals match 125.96 136.26 145.00 139.00 119.00 477.00 490 STR last (failure) 24.84 25.19 23.00 23.00 16.00 50.00 491 STR last (success) 2.88 3.21 54.00 54.00 2.00 53.00 492 STR last (total failure) 17.27 17.28 15.00 15.00 8.00 46.00 493 STR length (==4010) 2.15 2.26 2.00 2.00 2.00 36.00 494 STR length growing (1000) 385.90 397.64 974.00 992.00 955.00 2428.00 495 STR length growing uc (1000) 384.00 392.21 1002.00 987.00 890.00 2427.00 496 STR length of a LIST 1.98 2.16 2.00 2.00 2.00 31.00 497 STR length static str 1.64 1.63 2.00 2.00 2.00 5.00 498 STR match, complex (failure 2) 29289.15 31813.10 360045.0 360449.0 117091.0 117844.0 499 STR match, complex (failure) 19.17 19.56 210.00 209.00 69.00 103.00 500 STR match, complex (success early) 2.45 2.70 4.00 4.00 2.00 33.00 501 STR match, complex (success late) 26.62 26.72 216.00 216.00 75.00 108.00 502 STR match, complex (total failure) 13.44 14.08 202.00 202.00 68.00 102.00 503 STR match, exact (failure) 1.60 1.64 2.00 2.00 1.00 2.00 504 STR match, exact (success) 1.65 1.60 2.00 2.00 1.00 2.00 505 STR match, exact -nocase (failure) 1.73 1.76 2.00 2.00 2.00 3.00 506 STR match, exact -nocase (success) 2.61 2.87 3.00 3.00 2.00 3.00 507 STR match, simple (failure) 1.80 1.77 2.00 2.00 1.00 3.00 508 STR match, simple (success) 1.74 1.94 2.00 2.00 1.00 3.00 509 STR range, index 100..200 of 4010 3.55 3.93 3.00 3.00 2.00 41.00 510 STR repeat, 4010 chars * 10 34.35 34.72 34.00 49.00 56.00 372.00 511 STR repeat, 4010 chars * 100 1005.48 1011.48 1023.00 2118.00 2257.00 9982.00 512 STR repeat, abcdefghij * 10 3.42 3.49 3.00 4.00 14.00 41.00 513 STR repeat, abcdefghij * 100 9.49 9.48 9.00 17.00 113.00 342.00 514 STR repeat, abcdefghij * 1000 70.73 71.26 92.00 123.00 1073.00 3362.00 515 STR replace, equal replacement 12.37 12.81 60.00 61.00 12.00 83.00 516 STR replace, longer replacement 12.02 12.91 60.00 59.00 11.00 77.00 517 STR replace, no replacement 10.95 11.31 61.00 60.00 12.00 83.00 518 STR reverse iter/append, 10 c 11.48 12.68 23.00 22.00 18.00 42.00 519 STR reverse iter/append, 10 uc 11.61 11.79 23.00 22.00 18.00 42.00 520 STR reverse iter/append, 100 c 86.93 88.38 186.00 185.00 151.00 392.00 521 STR reverse iter/append, 100 uc 86.72 90.43 189.00 187.00 151.00 395.00 522 STR reverse iter/append, 400 c 312.94 316.18 726.00 713.00 603.00 2112.00 523 STR reverse iter/append, 400 uc 341.06 368.77 730.00 709.00 596.00 2089.00 524 STR reverse iter/set, 10 c 12.71 14.36 20.00 19.00 15.00 45.00 525 STR reverse iter/set, 10 uc 13.06 14.25 19.00 19.00 16.00 44.00 526 STR reverse iter/set, 100 c 115.58 137.39 186.00 179.00 141.00 447.00 527 STR reverse iter/set, 100 uc 124.11 151.33 186.00 176.00 139.00 449.00 528 STR reverse iter/set, 400 c 557.91 612.91 845.00 774.00 666.00 2668.00 529 STR reverse iter/set, 400 uc 587.07 632.23 827.00 799.00 667.00 2559.00 530 STR reverse recursive, 10 c 36.59 40.46 45.00 44.00 35.00 81.00 531 STR reverse recursive, 10 uc 35.77 39.32 45.00 44.00 35.00 81.00 532 STR reverse recursive, 100 c 413.88 463.42 522.00 498.00 378.00 904.00 533 STR reverse recursive, 100 uc 418.62 456.86 827.00 665.00 377.00 931.00 534 STR reverse recursive, 400 c 2598.42 2712.32 3053.00 2966.00 2518.00 8.0+ 535 STR reverse recursive, 400 uc 2609.59 2886.08 6511.00 5926.00 2511.00 8.0+ 536 STR str $a eq $b 3.10 3.39 5.00 5.00 5.00 15.00 537 STR str $a eq $b (same obj) 3.10 3.42 5.00 5.00 5.00 15.00 538 STR str $a equal "" 2.25 2.46 4.00 4.00 3.00 14.00 539 STR str $a ne $b 3.28 4.05 6.00 5.00 5.00 14.00 540 STR str $a ne $b (same obj) 3.14 3.35 5.00 5.00 5.00 14.00 541 STR str num == "" 2.69 2.65 3.00 3.00 3.00 14.00 542 STR string compare 3.05 3.56 5.00 4.00 4.00 6.00 543 STR string compare "" 3.24 3.23 5.00 4.00 4.00 12.00 544 STR string compare long 38.38 38.15 39.00 39.00 38.00 170.00 545 STR string compare long (same obj) 2.92 3.52 39.00 39.00 38.00 171.00 546 STR string compare mixed long 60.26 63.85 47.00 44.00 43.00 166.00 547 STR string compare uni long 44.23 46.51 44.00 45.00 38.00 165.00 548 STR string equal "" 2.57 3.12 4.00 4.00 4.00 12.00 549 STR string equal long (!= len) 8.07 8.66 45.00 44.00 44.00 213.00 550 STR string equal long (== len) 38.12 38.19 40.00 40.00 39.00 214.00 551 STR string equal long (same obj) 3.19 3.51 40.00 39.00 39.00 216.00 552 STR string equal mixed long 3.38 3.61 40.00 40.00 39.00 209.00 553 STR string equal uni long 42.97 43.58 45.00 45.00 39.00 185.00 554 STR/LIST length, obj shimmer 416.85 419.69 504.00 489.00 3.00 195.00 555 SWITCH 1st true 2.21 5.44 5.00 4.00 4.00 16.00 556 SWITCH 2nd true 2.03 5.65 5.00 4.00 4.00 16.00 557 SWITCH 9th true 2.00 5.93 5.00 5.00 4.00 16.00 558 SWITCH default true 1.97 6.14 6.00 5.00 5.00 16.00 559 TRACE all set (rwu) 3.93 5.16 4.00 3.00 3.00 6.00 560 TRACE no trace set 5.18 4.91 5.00 4.00 4.00 6.00 561 TRACE read 3.82 6.20 4.00 3.00 3.00 7.00 562 TRACE unset 4.04 5.06 4.00 3.00 3.00 6.00 563 TRACE write 3.97 5.26 4.00 4.00 4.00 6.00 564 UNSET catch var !exist 16.43 10.16 8.00 9.00 6.00 6.00 565 UNSET catch var exists 2.14 3.61 4.00 2.00 2.00 3.00 566 UNSET info check var !exist 1.80 2.44 2.00 2.00 2.00 3.00 567 UNSET info check var exists 2.13 3.42 2.00 2.00 2.00 4.00 568 UNSET nocomplain var !exist 2.13 2.63 8.00 8.00 6.00 6.00 569 UNSET nocomplain var exists 2.16 2.36 2.00 2.00 2.00 3.00 570 UNSET var exists 3.39 2.21 2.00 2.00 1.00 2.00 571 VAR 'array set' of 100 elems 25.39 29.77 46.00 45.00 39.00 79.00 572 VAR 100 'set's in array 26.36 27.03 23.00 23.00 26.00 67.00 573 VAR access global 2.74 2.97 5.00 5.00 4.00 5.00 574 VAR access local proc arg 3.24 2.17 2.00 2.00 2.00 6.00 575 VAR access locally set 1.97 2.81 2.00 2.00 2.00 5.00 576 VAR access upvar 2.56 3.14 4.00 4.00 4.00 6.00 577 VAR incr global var 1000x 472.45 415.65 692.00 643.00 697.00 3791.00 578 VAR incr local var 1000x 473.82 403.97 686.00 665.00 703.00 3800.00 579 VAR incr upvar var 1000x 474.03 425.56 673.00 655.00 705.00 3727.00 580 VAR mset 3.07 4.12 6.00 5.00 5.00 17.00 581 VAR mset (foreach) 2.57 2.79 3.00 2.00 2.00 8.00 582 VAR ref absolute 116.55 75.62 108.00 111.00 84.00 8.0+ 583 VAR ref local 9.68 13.60 22.00 23.00 22.00 8.0+ 584 VAR ref variable 11.18 14.27 52.00 54.00 47.00 8.0+ 585 VAR set array element 2.35 2.93 2.00 2.00 2.00 3.00 586 VAR set scalar 1.60 1.68 1.00 1.00 1.00 2.00 587 WORDCOUNT wc1 806.47 881.24 906.00 854.00 344.00 479.00 588 WORDCOUNT wc2 191.18 198.22 501.00 509.00 224.00 303.00 589 WORDCOUNT wc3 179.01 184.65 472.00 483.00 203.00 222.00 589 BENCHMARKS 1:8.5b2.1 2:8.4.17 3:8.3.5 4:8.2.3 5:8.0.5 6:7.6p2 FINISHED 2007-11-16 11:43:32 ---- [JH]: The numbers below by Kevin are for a previous set of numbers, and need updating (note only 8.4a3 is mentioned). The only thing likely to change though is to show that 8.4 is pulling ahead in performance. [Kevin Kenny]: For those that insist on a single figure of merit, I took these numbers, normalized them to a scale of 8.4a3 == 1.0, and then took the harmonic mean of all benchmarks. ---- Version Relative Speed Comments ---- 7.6p2 0.125 The last version without bytecode compilation ---- 8.0.5 0.736 Bytecode compilation initially sped things up by a factor of about 6. ---- 8.2.3 0.600 The cost of internationalization was that things got about 20% slower. ---- 8.3.1 0.606 Not much change here.... ---- 8.4a3 1.000 The reference against which the others were measured. Many more operations are bytecoded, which gains about 50% in speed. ---- As with all benchmarks, take these numbers with a spoonful of salt! ---- [TCL benchmarks compared with other languages] ---- [Category Performance]