Tcl Benchmarks

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 [L1 ] 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 [L2 ] 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 (JH) 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. 8.5 added bignums, which slowed down expr handling in general. 8.6 has a new non-recursive (stackless) bytecode engine.

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 2.66ghz Intel i7 MBP with 8GB physmem running OS X 10.6.4. All interpreters were compiled static with no threads using gcc 4.2.1 (Apple Inc. build 5664) with -O2 (no -mcpu modifiers). The "elapsed" time can also be misleading because runbench v1.23+ uses an autoscaling check to try and make sure each test runs at least .1s and at most 4s. Also, as interp version gets older, fewer tests are run.


Results

 TCL_INTERP: 1:8.6b1.2 2:8.5.9 3:8.4.19 4:8.3.5 5:8.2.3 6:8.0.5 7:7.6p2
 STARTED 2010-09-27 19:45:28 (runbench.tcl v1.23)
 Benchmark 1:8.6b1.2 /Users/jeffh/install/Darwin/bin/canon8.6
 aabbccdeeeffghkllmmmmnpprrssstuuvw 00:02:10 elapsed
 126703 milliseconds
 Benchmark 2:8.5.9 /Users/jeffh/install/Darwin/bin/canon8.5
 aabbccdeeeffghkllmmmmnpprrssstuuvw 00:01:56 elapsed
 112382 milliseconds
 Benchmark 3:8.4.19 /Users/jeffh/install/Darwin/bin/canon8.4
 aabbccdeeeffghkllmmmmnpprrssstuuvw 00:01:33 elapsed
 89092 milliseconds
 Benchmark 4:8.3.5 /Users/jeffh/install/Darwin/bin/canon8.3
 aabbccdeeeffghkllmmmmnpprrssstuuvw 00:01:59 elapsed
 116928 milliseconds
 Benchmark 5:8.2.3 /Users/jeffh/install/Darwin/bin/canon8.2
 aabbccdeeeffghkllmmmmnpprrssstuuvw 00:02:02 elapsed
 123218 milliseconds
 Benchmark 6:8.0.5 /Users/jeffh/install/Darwin/bin/canon8.0
 aabbccdeeeffghkllmmmmnpprrssstuuvw 00:01:43 elapsed
 104254 milliseconds
 Benchmark 7:7.6p2 /Users/jeffh/install/Darwin/bin/canon7.6
 aabbccdeeeffghkllmmmmnpprrssstuuvw 00:02:33 elapsed
 154203 milliseconds
000TEST:1234567
000VERSIONS:8.6b1.28.5.98.4.198.3.58.2.38.0.57.6p2
001ARRAY genKeys 50125.90117.2752.4964.0065.0056.0092.00
002ARRAY genKeys 5001170.091129.13487.95616.00631.00550.00873.00
003ARRAY makeHash 500 5016962.7715850.2214860.6215084.0017766.0018333.0022191.00
004ascii85 strlen 26902976.492194.911667.38-=--=--=--=-
005ascii85 strlen 269000273317.7215393.3163868.8-=--=--=--=-
006BASE64 decode 1033.5731.1832.1938.0038.0041.00-=-
007BASE64 decode 100234.63208.45223.99278.00300.00326.00-=-
008BASE64 decode 10002160.381868.182071.272615.002959.003116.00-=-
009BASE64 decode 1000021313.3718689.8020510.5025814.0028822.0031127.00-=-
010BASE64 decode2 1032.6729.9931.4037.0036.0039.00-=-
011BASE64 decode2 100217.46201.54220.14266.00285.00311.00-=-
012BASE64 decode2 10001973.981806.362027.222520.002809.003003.00-=-
013BASE64 decode2 1000019423.6717818.0520175.9025351.0027554.0029980.00-=-
014BASE64 decode3 1023.9419.6517.1223.0023.0023.00-=-
015BASE64 decode3 100139.65119.36110.10178.00176.00169.00-=-
016BASE64 decode3 10001262.091050.72991.281731.001702.001614.00-=-
017BASE64 decode3 1000012421.5110014.739727.6017085.0016699.0016174.00-=-
018BASE64 encode 1026.0322.3718.7728.0028.0033.00-=-
019BASE64 encode 100174.36155.29124.89204.00221.00287.00-=-
020BASE64 encode 10001640.871451.791159.282021.002181.002787.00-=-
021BASE64 encode 1000016579.7614469.8411514.8019765.0021326.0027802.00-=-
022BASE64 encode2 1018.5916.7517.8028.0026.0032.00-=-
023BASE64 encode2 100118.94107.39115.14211.00214.00275.00-=-
024BASE64 encode2 10001115.75980.071087.742021.002086.002706.00-=-
025BASE64 encode2 1000011022.3510019.8910793.1019835.0020466.0026975.00-=-
026BASE64 encode3 1016.2814.6312.4916.0015.0015.00-=-
027BASE64 encode3 10055.9249.8653.8098.0097.0092.00-=-
028BASE64 encode3 1000422.87366.42449.70909.00906.00848.00-=-
029BASE64 encode3 100004113.273584.474377.649018.009078.008361.00-=-
030BIN bitset-v1 1000 chars3713.352652.961226.111163.001298.001252.00-=-
031BIN bitset-v1 5000 chars17901.0113056.815571.825414.006436.006260.00-=-
032BIN bitset-v1 10000 chars35450.0525684.9411529.2710368.0012727.0012502.00-=-
033BIN bitset-v2 1000 chars1851.381231.29587.36726.00720.00693.00-=-
034BIN bitset-v2 5000 chars9055.426106.982713.943638.003466.003496.00-=-
035BIN bitset-v2 10000 chars18502.0112341.825369.527131.006857.007142.00-=-
036BIN bitset-v3 1000 chars295.27239.06190.23321.00336.00317.00-=-
037BIN bitset-v3 5000 chars1177.19954.03739.211591.001667.001577.00-=-
038BIN bitset-v3 10000 chars2263.121824.231430.633169.003341.003136.00-=-
039BIN c scan, 1000b95.2392.7190.5523.0023.0034.00-=-
040BIN c scan, 5000b232.87228.18214.71112.00110.00112.00-=-
041BIN c scan, 10000b411.33398.54378.96216.00216.00219.00-=-
042BIN chars, 10000b2257.381836.321409.483210.003410.003268.00-=-
043BIN random string 100b235.58174.9366.8189.0094.0093.00-=-
044BIN random string 5000b11961.178623.383300.834400.004542.004582.00-=-
045BIN u char, 10000b414.09404.50-=--=--=--=--=-
046CATCH error, complex8.026.822.462.002.002.003.00
047CATCH no catch used2.772.520.560.000.000.002.00
048CATCH return error8.266.822.542.002.002.003.00
049CATCH return except2.982.690.591.000.001.002.00
050CATCH return ok3.012.790.611.001.001.002.00
051DATA access in a list49.5855.0258.37151.00146.00143.002788.00
052DATA access in an array177.55156.9096.61159.00159.00157.00504.00
053DATA create in a list52.1360.0350.60171.00186.00174.00489.00
054DATA create in an array326.74322.15293.90337.00336.00431.00708.00
055ENC iso2022-jp, gets1941.051917.682401.89846.00782.00-=--=-
056ENC iso2022-jp, read1858.631846.682210.36756.00748.00-=--=-
057ENC iso2022-jp, read & size1852.411871.032226.78764.00753.00-=--=-
058ENC iso8859-2, gets34.8282.24133.2067.0063.00-=--=-
059ENC iso8859-2, read21.8969.37121.2754.0052.00-=--=-
060ENC iso8859-2, read & size26.5674.99120.1559.0056.00-=--=-
061EVAL cmd and mixed lists714.77597.15202.21169.00427.00292.0037.00
062EVAL cmd eval as list1.301.100.741.002.002.001.00
063EVAL cmd eval as string4.404.562.082.002.002.001.00
064EVAL cmd eval in list obj var2.071.751.161.002.003.002.00
065EVAL cmd eval in list obj {*}1.641.378.5+8.5+8.5+8.5+8.5+
066EVAL list cmd and mixed lists710.91594.31202.04169.00432.00293.0037.00
067EVAL list cmd and pure lists8.818.8014.159.00432.00294.0037.00
068EXPR $a != $b dbl1.220.960.420.000.001.003.00
069EXPR $a != $b int1.850.930.410.000.001.004.00
070EXPR $a != $b str (!= len)1.480.851.031.001.001.004.00
071EXPR $a != $b str (== len)1.520.851.121.001.001.004.00
072EXPR $a == $b dbl1.330.970.420.000.001.004.00
073EXPR $a == $b int1.841.000.410.000.001.004.00
074EXPR $a == $b str (!= len)1.490.861.061.001.001.004.00
075EXPR $a == $b str (== len)1.100.911.101.001.001.004.00
076EXPR braced2.081.640.871.001.001.007.00
077EXPR builtin dyn9.028.142.982.002.003.003.00
078EXPR builtin sin0.810.630.330.001.000.002.00
079EXPR cast double1.050.850.350.000.000.002.00
080EXPR cast int1.080.900.350.000.000.002.00
081EXPR fifty operands1.711.591.221.001.002.009.00
082EXPR incr with expr0.720.560.250.000.000.001.00
083EXPR incr with incr0.730.550.240.000.000.001.00
084EXPR inline1.611.351.131.001.001.002.00
085EXPR one operand0.700.560.250.000.000.001.00
086EXPR rand range1.611.210.410.000.000.00-=-
087EXPR rand range func1.801.540.701.001.001.003.00
088EXPR ten operands0.890.730.440.000.001.002.00
089EXPR unbraced17.5916.187.255.005.006.006.00
090EXPR unbraced long36.1136.1437.8430.0031.0018.0018.00
091FCOPY binary: 160K3300.783152.563161.463125.003283.00-=--=-
092FCOPY encoding: 160K4125.964121.874101.903108.003301.00-=--=-
093FCOPY std: 160K3315.793150.563175.933138.003301.003153.006073.00
094FILE exec interp8445.298057.917223.302828.002284.002609.001811.00
095FILE exec interp: pkg require14326.0813706.8910909.804692.003946.003055.002042.00
096FILE exists tmpfile (obj)3.493.222.913.003.003.003.00
097FILE exists ~2.612.291.903.006.002.002.00
098FILE exists! tmpfile (obj)3.103.021.383.003.002.002.00
099FILE exists! tmpfile (str)4.964.7816.303.003.003.002.00
100FILE glob tmpdir (60 entries)81.1482.1390.0960.0060.0052.0051.00
101FILE glob / all subcommands5267.405083.943098.543463.003525.002667.002659.00
102FILE glob / atime437.70434.83739.90259.00292.00258.00286.00
103FILE glob / attributes2678.362649.061224.09856.00894.00-=--=-
104FILE glob / dirname97.4195.64249.17107.00129.00124.00111.00
105FILE glob / executable412.54406.88717.70242.00267.00243.00239.00
106FILE glob / exists400.74385.29695.84225.00248.00226.00226.00
107FILE glob / extension105.07101.77155.9881.00103.0098.0090.00
108FILE glob / isdirectory439.48432.30753.79259.00292.00263.00259.00
109FILE glob / isfile439.10429.89736.32258.00291.00263.00256.00
110FILE glob / mtime446.01433.60736.68259.00290.00261.00290.00
111FILE glob / owned462.74446.80757.93276.00309.00276.00266.00
112FILE glob / readable405.31392.89706.48234.00256.00232.00231.00
113FILE glob / rootname118.28113.24155.1582.00103.0097.0092.00
114FILE glob / size440.60432.78739.17259.00290.00258.00290.00
115FILE glob / tail98.7094.27200.29100.00121.00113.00105.00
116FILE glob / writable405.43392.96704.80234.00255.00231.00230.00
117FILE recurse / -dir2894.902782.403510.012218.002252.002508.002349.00
118FILE recurse / cd4556.534091.836447.042170.002140.002404.002210.00
119GCCont_cpb::cGCC 5027.7625.2322.5342.0049.0047.00-=-
120GCCont_cpb::cGCC 500128.48119.1387.03242.00310.00293.00-=-
121GCCont_cpb::cGCC 50001116.251048.86714.832184.002918.002755.00-=-
122GCCont_cpbre1::cGCC 5032.0730.2224.8027.00-=--=--=-
123GCCont_cpbre1::cGCC 500174.63179.25167.95172.00-=--=--=-
124GCCont_cpbre1::cGCC 50001629.891639.311612.231618.00-=--=--=-
125GCCont_cpbre2::cGCC 5023.6822.5320.2721.00-=--=--=-
126GCCont_cpbre2::cGCC 500157.13155.09160.67154.00-=--=--=-
127GCCont_cpbre2::cGCC 50001472.351483.831476.661479.00-=--=--=-
128GCCont_cpbrs2::cGCC 5012.4212.148.7825.0024.00-=--=-
129GCCont_cpbrs2::cGCC 50031.3736.2232.87175.00172.00-=--=-
130GCCont_cpbrs2::cGCC 5000208.49268.83256.391656.001663.00-=--=-
131GCCont_cpbrs::cGCC1 5027.2726.2212.5537.0035.0027.00-=-
132GCCont_cpbrs::cGCC1 50046.1349.0038.10205.00204.0054.00-=-
133GCCont_cpbrs::cGCC1 5000219.08270.96277.371866.001867.00315.00-=-
134GCCont_cpbrs::cGCC2 5024.8225.1811.6839.0038.0026.00-=-
135GCCont_cpbrs::cGCC2 50040.8946.2334.22211.00221.0050.00-=-
136GCCont_cpbrs::cGCC2 5000191.67250.55248.561912.001899.00269.00-=-
137GCCont_cpbrs_trap::cGCC 5029.7329.3623.9826.0025.0017.00-=-
138GCCont_cpbrs_trap::cGCC 500169.06169.57162.53171.00168.0091.00-=-
139GCCont_cpbrs_trap::cGCC 50001544.801576.591539.471608.001590.00832.00-=-
140GCCont_expr::cGCC 5023.1523.0219.3417.0017.00-=--=-
141GCCont_expr::cGCC 500107.49111.28152.66140.00139.00-=--=-
142GCCont_expr::cGCC 5000911.47964.169259.909330.009307.00-=--=-
143GCCont_i::cGCC1 5019.1717.1428.7535.0039.0038.00-=-
144GCCont_i::cGCC1 500137.93124.35238.94306.00356.00343.00-=-
145GCCont_i::cGCC1 50001310.241180.722457.243071.003540.003358.00-=-
146GCCont_i::cGCC2 5016.7615.6211.8217.0022.0021.00-=-
147GCCont_i::cGCC2 500115.18109.6478.78125.00185.00180.00-=-
148GCCont_i::cGCC2 50001086.701036.87742.801205.001815.001767.00-=-
149GCCont_i::cGCC3 5014.7813.3111.1916.0021.0020.00-=-
150GCCont_i::cGCC3 50093.7185.6772.58117.00175.00168.00-=-
151GCCont_i::cGCC3 5000870.75795.81682.131105.001705.001641.00-=-
152GCCont_r1::cGCC 5020.4118.4735.5347.0049.0050.00-=-
153GCCont_r1::cGCC 500189.97171.65342.79454.00468.00468.00-=-
154GCCont_r1::cGCC 50001882.101706.703421.624467.004696.004671.00-=-
155GCCont_r2::cGCC 5019.6117.5831.9739.0041.0040.00-=-
156GCCont_r2::cGCC 500146.14125.66264.06330.00382.00359.00-=-
157GCCont_r2::cGCC 50001386.921200.592609.403316.003786.003566.00-=-
158GCCont_r3::cGCC 5019.7817.5131.2038.0042.0040.00-=-
159GCCont_r3::cGCC 500147.34128.40269.47334.00387.00362.00-=-
160GCCont_r3::cGCC 50001422.511244.602644.663258.003806.003548.00-=-
161GCCont_rsf1::cGCC 5020.6818.9215.4718.0026.00-=--=-
162GCCont_rsf1::cGCC 500105.89103.7289.05112.00192.00-=--=-
163GCCont_rsf1::cGCC 5000935.80936.19817.421015.001825.00-=--=-
164GCCont_rsf2::cGCC1 5014.8913.5510.3913.0017.00-=--=-
165GCCont_rsf2::cGCC1 50058.3956.4249.7271.00107.00-=--=-
166GCCont_rsf2::cGCC1 5000475.32479.03424.18651.00975.00-=--=-
167GCCont_rsf2::cGCC2 5012.3511.039.1311.0014.00-=--=-
168GCCont_rsf2::cGCC2 50054.9153.1046.5963.0098.00-=--=-
169GCCont_rsf2::cGCC2 5000456.74461.19409.39580.00913.00-=--=-
170GCCont_rsf3::cGCC 5012.5011.289.3310.0014.00-=--=-
171GCCont_rsf3::cGCC 50054.8153.8947.1563.0097.00-=--=-
172GCCont_rsf3::cGCC 5000467.26472.21410.83575.00917.00-=--=-
173GCCont_turing::cGCC 508.128.757.1610.009.00-=--=-
174GCCont_turing::cGCC 50027.6934.7833.0354.0057.00-=--=-
175GCCont_turing::cGCC 5000213.79289.46285.73494.00480.00-=--=-
176HEAPSORT size 1041.9838.6930.5739.0038.00414.00212.00
177HEAPSORT size 50361.38322.66248.04338.00329.002413.001627.00
178HEAPSORT size 100877.05792.73605.56790.00760.005123.003813.00
179HEAPSORT2 size 1024.1321.8527.38-=--=--=--=-
180HEAPSORT2 size 50190.81176.19211.96-=--=--=--=-
181HEAPSORT2 size 100444.91409.49507.62-=--=--=--=-
182IF 1/0 check0.760.590.291.001.001.002.00
183IF else true al1.180.991.311.001.001.004.00
184IF else true numeric0.930.790.651.001.001.004.00
185IF elseif true al1.241.040.991.001.001.004.00
186IF elseif true numeric0.980.810.511.001.001.004.00
187IF if false al/al1.311.150.711.001.001.003.00
188IF if false al/num1.341.120.581.001.001.005.00
189IF if false num/num1.241.010.381.001.001.004.00
190IF if true al0.980.820.581.001.001.003.00
191IF if true al/al1.170.990.581.001.001.003.00
192IF if true num/num1.070.870.451.001.001.004.00
193IF if true numeric0.930.750.420.000.000.003.00
194IF multi 1st true0.900.730.440.000.000.005.00
195IF multi 2nd true0.960.780.501.001.001.005.00
196IF multi 9th true1.341.090.831.001.001.009.00
197IF multi default true1.261.060.841.001.001.0010.00
198KLIST shuffle0 llength 15.444.984.817.007.007.008.0+
199KLIST shuffle0 llength 1014.6613.7913.0520.0020.0021.008.0+
200KLIST shuffle0 llength 10096.0391.2095.05156.00155.00159.008.0+
201KLIST shuffle0 llength 1000939.43892.721014.181596.001588.001648.008.0+
202KLIST shuffle0 llength 1000010582.4110161.3513563.7019460.0018871.0019732.00-=-
203KLIST shuffle1-s llength 12.602.113.184.004.003.0013.00
204KLIST shuffle1-s llength 1019.8116.1915.5116.0019.0018.0082.00
205KLIST shuffle1-s llength 100239.52198.99187.46190.00215.00205.001228.00
206KLIST shuffle1-s llength 10009550.139151.6310285.4410348.009028.008880.0049759.00
207KLIST shuffle1a llength 13.082.503.554.004.003.0016.00
208KLIST shuffle1a llength 1023.7619.2915.2818.0021.0020.00115.00
209KLIST shuffle1a llength 100222.60184.56142.83163.00196.00190.001619.00
210KLIST shuffle1a llength 10002252.181826.291435.661620.001974.001881.0055517.00
211KLIST shuffle1a llength 1000022613.0218493.5914411.4016436.0019658.0019191.00-=-
212KLIST shuffle2 llength 13.553.053.725.005.006.0016.00
213KLIST shuffle2 llength 1032.3827.9117.9923.0023.0034.0090.00
214KLIST shuffle2 llength 100312.82264.67162.25202.00201.00294.00806.00
215KLIST shuffle2 llength 10003163.642816.511611.842009.001999.002918.008022.00
216KLIST shuffle2 llength 1000032815.4327742.7717442.4020989.0021025.0031596.00-=-
217KLIST shuffle3 llength 12.712.183.284.005.004.0012.00
218KLIST shuffle3 llength 1019.0414.7511.4716.0018.0018.0083.00
219KLIST shuffle3 llength 100174.58136.16102.25138.00155.00146.00924.00
220KLIST shuffle3 llength 10001779.861380.011048.411546.001741.001631.0019313.00
221KLIST shuffle3 llength 1000025691.1621670.1518187.2036542.0038782.0037207.00-=-
222KLIST shuffle4 llength 12.792.233.365.005.004.0013.00
223KLIST shuffle4 llength 1019.4815.6212.3517.0019.0019.0090.00
224KLIST shuffle4 llength 100176.93142.00107.59150.00166.00161.001162.00
225KLIST shuffle4 llength 10001757.151388.301053.441470.001642.001579.0031561.00
226KLIST shuffle4 llength 1000017800.1113980.4010632.2014771.0016479.0016264.00-=-
227KLIST shuffle5-s llength 12.051.551.332.002.001.009.00
228KLIST shuffle5-s llength 1015.3212.5310.1110.0010.0010.0057.00
229KLIST shuffle5-s llength 100159.04133.82102.8599.0095.0093.00620.00
230KLIST shuffle5-s llength 10003226.232835.442929.373047.002506.002495.0012592.00
231KLIST shuffle5a llength 12.541.901.642.002.002.0011.00
232KLIST shuffle5a llength 1018.2214.699.6510.0010.0010.0072.00
233KLIST shuffle5a llength 100170.36135.1686.4693.0088.0089.00779.00
234KLIST shuffle5a llength 10001704.311386.86899.421112.001065.001065.0013806.00
235KLIST shuffle5a llength 1000025028.7021972.4716451.0031830.0031416.0031581.00-=-
236KLIST shuffle6 llength 10.460.390.39-=--=--=--=-
237KLIST shuffle6 llength 107.736.755.47-=--=--=--=-
238KLIST shuffle6 llength 10074.7064.5450.41-=--=--=--=-
239KLIST shuffle6 llength 1000747.65647.33493.12-=--=--=--=-
240KLIST shuffle6 llength 100007540.166452.485034.80-=--=--=--=-
241LIST append to list1.101.030.661.001.001.001.00
242LIST concat APPEND 2x106.485.835.795.005.005.002.00
243LIST concat APPEND 2x10042.6841.1738.2337.0035.0034.005.00
244LIST concat APPEND 2x1000375.21380.88346.69327.00330.00321.0031.00
245LIST concat APPEND 2x100003693.553782.243489.573237.003229.003172.00286.00
246LIST concat CONCAT 2x101.331.061.151.004.004.002.00
247LIST concat CONCAT 2x1001.871.681.702.0032.0031.006.00
248LIST concat CONCAT 2x10008.608.478.638.00297.00290.0033.00
249LIST concat CONCAT 2x1000078.2577.9377.8178.002949.002911.00304.00
250LIST concat EVAL/LAPPEND 2x102.161.782.692.004.004.004.00
251LIST concat EVAL/LAPPEND 2x1003.092.723.913.0012.0010.0012.00
252LIST concat EVAL/LAPPEND 2x100014.1214.0418.9814.0060.0063.0088.00
253LIST concat EVAL/LAPPEND 2x10000119.52117.71162.88126.00574.00605.00833.00
254LIST concat FOREACH/LAPPEND 2x102.671.891.894.004.004.006.00
255LIST concat FOREACH/LAPPEND 2x10016.7310.998.7624.0027.0023.0031.00
256LIST concat FOREACH/LAPPEND 2x1000145.1298.7977.12231.00242.00221.00270.00
257LIST concat FOREACH/LAPPEND 2x100001356.90993.84763.642299.002413.002178.002683.00
258LIST concat SET 2x104.964.825.174.004.004.002.00
259LIST concat SET 2x10037.8638.3434.6332.0032.0031.006.00
260LIST concat SET 2x1000356.89368.26326.91302.00301.00295.0031.00
261LIST concat SET 2x100003516.403590.393209.162964.002953.002915.00292.00
262LIST exact search, first item1.441.150.500.000.000.0033.00
263LIST exact search, last item2.882.641.972.002.002.0033.00
264LIST exact search, middle item1.981.620.991.001.001.0034.00
265LIST exact search, non-item5.375.134.614.004.004.0036.00
266LIST exact search, typed item3.793.212.092.002.002.0034.00
267LIST exact search, untyped item2.832.591.982.002.002.0034.00
268LIST index first element0.920.690.390.000.000.003.00
269LIST index last element0.930.710.380.000.000.006.00
270LIST index middle element0.930.670.380.000.000.004.00
271LIST insert an item at "end"5.204.984.404.004.004.0021.00
272LIST insert an item at middle5.244.954.615.005.005.006.00
273LIST insert an item at start5.174.954.635.005.005.004.00
274LIST iterate list97.4488.08127.92314.00300.00340.0027513.00
275LIST join list35.6034.7033.4537.0038.0026.0080.00
276LIST large, early range1.861.670.961.001.001.006.00
277LIST large, late range1.821.600.971.001.001.007.00
278LIST length, pure list0.640.470.390.000.000.0036.00
279LIST list2.902.531.462.002.002.006.00
280LIST lset foreach l877.58154.49143.11=8.4=8.4=8.4=8.4
281LIST lset foreach list884.23152.48144.17=8.4=8.4=8.4=8.4
282LIST lset foreach ""s l38.9234.6042.39=8.4=8.4=8.4=8.4
283LIST lset foreach ""s list39.1834.7641.25=8.4=8.4=8.4=8.4
284LIST regexp search, first item1.541.231.081.001.001.0033.00
285LIST regexp search, last item10.179.7569.1974.0076.0013.0045.00
286LIST regexp search, non-item19.3218.81143.42156.00162.0023.0053.00
287LIST remove first element4.914.664.635.005.005.004.00
288LIST remove in mixed list4.924.614.945.00165.005.006.00
289LIST remove last element4.974.734.555.005.005.008.00
290LIST remove middle element4.974.704.585.005.005.006.00
291LIST replace first el with multiple5.295.124.705.005.005.006.00
292LIST replace first element5.304.984.374.004.004.005.00
293LIST replace in mixed list5.254.964.725.00164.005.006.00
294LIST replace last el with multiple5.585.484.484.005.004.0023.00
295LIST replace last element5.505.224.374.004.004.0022.00
296LIST replace middle el with multiple5.485.354.625.005.005.0014.00
297LIST replace middle element5.435.174.374.004.004.0014.00
298LIST replace range1.971.654.404.004.004.0017.00
299LIST reverse core4.834.818.5+8.5+8.5+8.5+8.5+
300LIST reverse lappend100.9697.10135.99385.00385.00368.009975.00
301LIST small, early range1.501.340.781.001.001.004.00
302LIST small, late range1.551.360.771.001.001.007.00
303LIST sort75.5075.67125.69121.00122.00123.00182.00
304LIST sorted search, first item1.581.200.570.000.000.0033.00
305LIST sorted search, last item1.551.200.582.002.002.0034.00
306LIST sorted search, middle item1.561.230.581.001.001.0033.00
307LIST sorted search, non-item1.551.210.574.004.004.0036.00
308LIST sorted search, typed item1.951.590.582.002.002.0034.00
309LIST typed sort60.7358.99109.66110.00113.00109.00233.00
310LOOP for (to 1000)56.0358.5151.98129.00127.00137.00907.00
311LOOP for, iterate list100.0193.36134.15231.00221.00233.0010035.00
312LOOP for, iterate string178.61170.34191.46312.00332.00305.001506.00
313LOOP foreach, iterate list83.8375.5356.0184.0083.0091.00259.00
314LOOP foreach, iterate string108.51103.9974.72103.00225.00228.00261.00
315LOOP while (to 1000)56.2152.7151.98129.00126.00134.00899.00
316LOOP while 1 (to 1000)51.2445.5542.08103.00121.00128.00941.00
317MAP ([chars])-case regsub14.7815.0013.1913.0012.003.005.00
318MAP http mapReply3007.473106.542588.143008.002981.002700.001911.00
319MAP regsub -nocase, no match85.2889.6987.58134.00134.0069.0067.00
320MAP regsub 1 val24.3653.9951.42192.00192.0034.0065.00
321MAP regsub 1 val -nocase56.3885.0082.99188.00187.0049.0072.00
322MAP regsub 2 val60.14134.58135.84967.00946.0083.00143.00
323MAP regsub 2 val -nocase120.62196.87191.48952.00948.00113.00173.00
324MAP regsub 3 val79.50194.92189.191346.001339.00113.00187.00
325MAP regsub 3 val -nocase165.82282.53274.381328.001334.00157.00235.00
326MAP regsub 4 val98.72252.31243.581700.001705.00143.00235.00
327MAP regsub 4 val -nocase209.56366.58350.591692.001694.00200.00297.00
328MAP regsub short3.963.862.057.007.002.006.00
329MAP regsub, no match19.1620.9621.39134.00147.0039.0037.00
330MAP string -nocase, no match114.12135.04136.43890.00882.00nomapnomap
331MAP string 1 val29.5452.8551.58215.00233.00nomapnomap
332MAP string 1 val -nocase60.4884.6780.04385.00455.00nomapnomap
333MAP string 2 val74.02108.17104.12238.00238.00nomapnomap
334MAP string 2 val -nocase125.05158.64158.07573.00596.00nomapnomap
335MAP string 3 val109.22128.99122.05312.00267.00nomapnomap
336MAP string 3 val -nocase158.79193.24194.931031.00866.00nomapnomap
337MAP string 4 val122.97155.30144.00313.00316.00nomapnomap
338MAP string 4 val -nocase194.16258.25256.941300.001401.00nomapnomap
339MAP string short3.413.321.642.002.00nomapnomap
340MAP string, no match52.3273.0667.59275.00270.00nomapnomap
341MAP |-case regsub9.679.537.477.008.002.004.00
342MAP |-case strmap3.643.221.822.002.00nomapnomap
343MATRIX mult 5x546.8844.5736.6958.0058.0059.00305.00
344MATRIX mult 10x10292.08288.65225.59351.00342.00359.002161.00
345MATRIX mult 15x15932.18916.75713.671094.001055.001126.007460.00
346MATRIX transposition-0548.96469.09362.39887.00884.00855.002138.00
347MATRIX transposition-1205.11199.93266.96622.00595.00586.006088.00
348MD5 msg len 10133.52110.8997.29102.0099.00-=--=-
349MD5 msg len 100202.58181.78157.31168.00165.00-=--=-
350MD5 msg len 10001881.761698.711021.431088.001053.00-=--=-
351MD5 msg len 1000051598.5448342.369649.0010327.0010002.00-=--=-
352MTHD array stored proc call1.020.790.370.000.000.00-=-
353MTHD call absolute1.631.420.811.001.001.00-=-
354MTHD call relative1.841.591.091.001.001.00-=-
355MTHD direct ns proc call0.730.560.260.000.000.00-=-
356MTHD imported ns proc call0.760.530.260.000.000.00-=-
357MTHD indirect proc eval2.682.351.491.002.003.00-=-
358MTHD indirect proc eval #21.521.321.922.002.002.00-=-
359MTHD inline call0.190.150.130.000.000.00-=-
360MTHD interp alias proc call1.040.620.341.001.000.00-=-
361MTHD ns lookup call6.475.513.874.005.006.00-=-
362MTHD switch method call2.952.661.892.003.004.00-=-
363NS alternating229.66195.36116.13121.00116.0068.00-=-
364PARSE html form upload (7978)1196.281013.67931.451218.001233.00991.00-=-
365PARSE html form upload (993570)136701.6112947.5102455.8130402.0133235.0122307.0-=-
366PROC do-nothing, no args0.430.320.210.001.000.000.00
367PROC do-nothing, one arg0.670.520.240.000.000.000.00
368PROC empty, no args0.110.080.050.001.000.001.00
369PROC empty, use args0.110.080.050.000.000.001.00
370PROC explicit return0.710.550.240.000.000.001.00
371PROC explicit return (2)0.670.520.260.000.000.001.00
372PROC explicit return (3)0.650.540.240.000.000.001.00
373PROC heavily commented0.660.520.240.000.000.0022.00
374PROC implicit return0.710.580.280.000.000.001.00
375PROC implicit return (2)0.670.530.300.000.000.001.00
376PROC implicit return (3)0.660.520.240.000.000.000.00
377PROC local links with global19.3219.0041.3248.0048.0048.00255.00
378PROC local links with upvar18.7518.1235.8541.0042.0043.00250.00
379PROC local links with variable18.1316.8930.3336.0036.0019.00245.00
380RE 1-char long-end3.943.743.804.004.0057.0060.00
381RE 1-char long-end catching8.017.816.529.008.0061.0062.00
382RE 1-char long-middle2.602.302.342.002.0029.0031.00
383RE 1-char long-middle catching6.636.475.107.007.0032.0034.00
384RE 1-char long-start1.080.910.951.001.001.002.00
385RE 1-char long-start catching5.155.023.675.005.004.005.00
386RE 1-char short1.060.910.931.001.001.002.00
387RE 1-char short catching5.185.103.736.005.004.005.00
388RE basic0.960.810.841.001.001.002.00
389RE basic catching5.976.914.096.006.004.005.00
390RE c-comment long5.024.944.975.005.007.008.00
391RE c-comment long catching17.5117.0015.6418.0017.0010.0014.00
392RE c-comment long nomatch7.357.117.127.007.002.004.00
393RE c-comment long nomatch catching9.058.657.267.007.003.005.00
394RE c-comment long pmatch8.087.857.988.008.0042.0044.00
395RE c-comment long pmatch catching10.019.498.068.008.0042.0047.00
396RE c-comment many *s8.208.128.128.008.0013.0014.00
397RE c-comment many *s catching27.3726.7925.3327.0027.0016.0025.00
398RE c-comment nomatch1.881.631.681.001.001.001.00
399RE c-comment nomatch catching3.353.151.802.002.001.002.00
400RE c-comment simple2.872.672.733.003.002.002.00
401RE c-comment simple catching13.6713.6011.9014.0014.005.006.00
402RE count all matches9.399.068.258.0022.0019.0041.00
403RE extract all matches11.9512.3710.9711.0028.0024.0055.00
404RE ini file5719.335775.615708.005709.005739.0035.0052.00
405RE ini file ng41.8241.5839.8842.0042.00-=--=-
406RE literal regexp1.941.651.652.002.001.001.00
407RE n-char long-end3.973.673.834.004.0060.0062.00
408RE n-char long-end catching8.798.407.299.009.0064.0070.00
409RE n-char long-middle2.492.392.392.002.0030.0033.00
410RE n-char long-middle catching7.237.245.748.007.0034.0037.00
411RE n-char long-start1.120.941.001.001.001.002.00
412RE n-char long-start catching5.925.684.436.006.004.006.00
413RE n-char short1.130.940.981.001.001.002.00
414RE n-char short catching5.725.474.176.006.004.005.00
415RE static anchored match0.690.530.251.001.000.001.00
416RE static anchored match dot0.740.561.301.001.000.001.00
417RE static anchored nomatch0.730.560.261.001.000.001.00
418RE static anchored nomatch dot0.730.540.591.001.000.001.00
419RE static l-anchored match0.700.560.281.001.000.001.00
420RE static l-anchored nomatch0.700.540.261.000.000.001.00
421RE static long match1.191.020.933.003.002.003.00
422RE static long nomatch1.511.331.254.004.002.003.00
423RE static r-anchored match0.740.570.281.001.000.001.00
424RE static r-anchored nomatch0.770.580.291.001.000.001.00
425RE static short match0.750.570.301.001.000.001.00
426RE static short nomatch0.740.560.271.001.000.001.00
427RE var ***= directive match0.920.931.742.002.00-=--=-
428RE var ***= directive nomatch0.950.931.802.002.00-=--=-
429RE var . match0.770.580.881.001.001.002.00
430RE var [0-9] match1.631.451.531.001.003.004.00
431RE var \d match1.621.461.521.001.003.004.00
432RE var ^$ nomatch0.750.550.731.001.001.002.00
433RE var backtrack case18.5418.961.642.002.0027.0028.00
434RE var-based regexp1.851.691.902.002.001.002.00
435READ 595K, cat20904.2618641.7514524.6925678.0021733.009743.0014243.00
436READ 595K, gets15169.9213615.979103.0019959.0016059.008289.0013018.00
437READ 595K, glob-grep match21000.8020769.6014692.9423565.0021866.0014365.0020098.00
438READ 595K, glob-grep nomatch20654.7220326.0514980.4329056.0027444.0015739.0020537.00
439READ 595K, read2315.432359.052185.924334.004325.0033206.0033052.00
440READ 595K, read & size2351.632371.812157.984344.004326.001598.0033099.00
441READ 595K, read dyn buf2360.372417.772187.904335.008.3+8.3+8.3+
442READ 595K, read small buf68991.0167495.5967690.7768372.008.3+8.3+8.3+
443READ 3050b, cat143.26131.97107.58160.00141.0077.00102.00
444READ 3050b, gets91.9385.9659.56115.0096.0056.0084.00
445READ 3050b, glob-grep match129.36116.6889.55135.00125.0086.00120.00
446READ 3050b, glob-grep nomatch121.48114.0590.96161.00154.0097.00120.00
447READ 3050b, read27.1428.3825.0737.0036.0022.0026.00
448READ 3050b, read & size32.0532.1026.9541.0040.0025.0030.00
449READ 3050b, read dyn buf34.5634.1329.9941.008.3+8.3+8.3+
450READ 3050b, read small buf375.04369.89367.48380.008.3+8.3+8.3+
451READ bin 595K, cat15273.7613374.6920259.5725297.0022475.009826.0014150.00
452READ bin 595K, gets11298.549915.309741.5717818.0014955.008426.0013117.00
453READ bin 595K, glob-grep match12625.3610955.5114791.8021714.0020816.0013904.0019959.00
454READ bin 595K, glob-grep nomatch12265.8311361.3215267.6326735.0025999.0016202.0020653.00
455READ bin 595K, read571.26596.35469.99481.00459.0033329.0033375.00
456READ bin 595K, read & size580.47592.00471.06486.00463.001590.0033225.00
457READ bin 595K, read dyn buf595.12607.51488.23478.008.3+8.3+8.3+
458READ bin 595K, read small buf64879.6663423.0365661.9163503.008.3+8.3+8.3+
459READ bin 3050b, cat112.38105.51135.46162.00149.0079.00101.00
460READ bin 3050b, gets76.5670.4866.93109.0093.0059.0084.00
461READ bin 3050b, glob-grep match129.39118.9096.12130.00125.0086.00119.00
462READ bin 3050b, glob-grep nomatch132.83115.7195.82152.00151.0095.00121.00
463READ bin 3050b, read24.3923.3620.4620.0020.0024.0026.00
464READ bin 3050b, read & size29.5128.2622.7725.0023.0028.0030.00
465READ bin 3050b, read dyn buf31.5829.7124.3524.008.3+8.3+8.3+
466READ bin 3050b, read small buf358.48356.68358.71354.008.3+8.3+8.3+
467SHA (A) msg len 10180.10164.03166.54215.00219.00-=--=-
468SHA (A) msg len 100305.18267.49294.03384.00384.00-=--=-
469SHA (A) msg len 10002124.061855.442100.192809.002796.00-=--=-
470SHA (A) msg len 1000020486.3217861.3619982.6026997.0027075.00-=--=-
471SHA (B) msg len 10-=--=-154.18201.00200.00-=--=-
472SHA (B) msg len 100-=--=-271.95361.00359.00-=--=-
473SHA (B) msg len 1000-=--=-1909.822621.002594.00-=--=-
474SHA (B) msg len 10000-=--=-18429.0025162.0025124.00-=--=-
475SPLIT iter, 4000 uchars493.77451.80346.71448.00916.00902.001064.00
476SPLIT iter, 4010 chars479.46436.72329.82430.00901.00903.001038.00
477SPLIT iter, rand 100 c43.5343.2339.0738.0026.0025.00-=-
478SPLIT iter, rand 1000 c206.07197.54175.31191.00236.00226.00-=-
479SPLIT iter, rand 10000 c1252.881159.82996.501200.002321.002241.00-=-
480SPLIT on 'c', 4000 uchars36.0735.8230.8760.0059.0034.0087.00
481SPLIT on 'c', 4010 chars35.3335.0230.0456.0056.0034.0075.00
482SPLIT on 'cz', 4000 uchars81.7486.1774.4996.0094.0062.00119.00
483SPLIT on 'cz', 4010 chars75.3078.0569.3192.0091.0061.00109.00
484SPLIT on 'cû', 4000 uchars89.7191.6381.0896.0095.0061.00120.00
485SPLIT on 'cû', 4010 chars57.4558.8252.8767.0065.0037.0077.00
486SPLIT, 4000 uchars158.45148.25125.04112.00569.00537.00107.00
487SPLIT, 4010 chars145.78136.58110.3696.00561.00549.0097.00
488SPLIT, rand 100 c33.7133.6130.8328.0017.0016.00-=-
489SPLIT, rand 1000 c120.82119.90114.38103.00150.00137.00-=-
490SPLIT, rand 10000 c431.48414.89398.83355.001468.001334.00-=-
491STR append2.332.231.702.002.002.008.00
492STR append (1KB + 1KB)1.741.541.222.002.002.007.00
493STR append (1MB + (1b+1K+1b)*100)331.03346.04306.17234.00234.00229.001936.00
494STR append (1MB + 1KB)835.42850.52844.38178.00180.00178.001753.00
495STR append (1MB + 1KB*20)881.36877.50864.78184.00185.00184.001778.00
496STR append (1MB + 1KB*1000)1748.591778.671741.14571.00577.00572.003270.00
497STR append (1MB + 1MB*3)2312.802345.002227.722080.002085.002079.007168.00
498STR append (1MB + 1MB*5)3953.814142.183970.564941.005078.005212.0010340.00
499STR append (1MB + 2b*1000)174.81195.06188.12453.00459.00444.002289.00
500STR append (10KB + 1KB)2.021.852.083.003.003.0012.00
501STR first (failure)5.914.144.456.006.006.007.00
502STR first (failure) utf5.884.094.4313.0013.006.007.00
503STR first (success)1.911.340.541.001.000.003.00
504STR first (success) utf1.871.350.531.001.000.003.00
505STR first (total failure)4.313.752.954.004.004.007.00
506STR first (total failure) utf4.313.732.925.005.004.007.00
507STR index 00.870.650.581.001.001.003.00
508STR index 1000.870.650.581.001.001.003.00
509STR index 5000.880.630.591.001.001.003.00
510STR info locals match23.7322.9828.1836.0037.0035.00215.00
511STR last (failure)4.924.354.634.004.003.007.00
512STR last (success)1.941.420.5211.0011.000.007.00
513STR last (total failure)4.413.802.943.003.003.006.00
514STR length (==4010)0.590.410.370.000.000.003.00
515STR length growing (1000)96.8071.4870.16217.00224.00231.00684.00
516STR length growing uc (1000)97.9472.3271.35218.00224.00218.00698.00
517STR length of a LIST0.580.440.340.000.000.003.00
518STR length static str0.690.580.261.001.001.002.00
519STR match, complex (failure)4.825.675.3447.0048.0020.0023.00
520STR match, complex (success early)1.040.760.431.001.001.003.00
521STR match, complex (success late)7.376.716.3551.0051.0023.0025.00
522STR match, complex (total failure)3.493.152.8447.0047.0020.0023.00
523STR match, exact (failure)0.690.540.260.000.000.001.00
524STR match, exact (success)0.690.540.250.000.000.001.00
525STR match, exact -nocase (failure)0.700.550.270.000.001.001.00
526STR match, exact -nocase (success)0.820.670.411.001.001.001.00
527STR match, recurse (fail backtrack)34.8034.0032.73239.00242.00153.00298.00
528STR match, recurse (fail bt1)34.8534.5833.09240.00243.00156.00294.00
529STR match, recurse (fail bt2)35.0134.4432.94239.00244.00157.00295.00
530STR match, recurse (fail ranchor)4494.144495.834492.5682380.0082526.0034663.0034736.00
531STR match, recurse (success bt2)7.126.375.145.009.0056.00195.00
532STR match, recurse2 (fail)6929.378701.248704.1582209.0082138.0034601.0034548.00
533STR match, recurse2 (success)4.845.725.3747.0047.0020.0023.00
534STR match, simple (failure)1.060.920.280.000.000.001.00
535STR match, simple (success)0.920.690.290.000.000.001.00
536STR range, index 100..200 of 40102.312.030.851.001.001.004.00
537STR repeat, 4010 chars * 103.482.902.132.004.007.0031.00
538STR repeat, 4010 chars * 10027.0825.5723.5623.0062.0087.00274.00
539STR repeat, abcdefghij * 102.181.710.550.001.004.0014.00
540STR repeat, abcdefghij * 1002.682.281.371.003.0028.00103.00
541STR repeat, abcdefghij * 10008.137.998.948.0020.00266.001000.00
542STR replace, equal replacement3.633.151.5012.0013.001.008.00
543STR replace, longer replacement3.643.171.6412.0012.001.008.00
544STR replace, no replacement3.052.521.1712.0013.001.008.00
545STR reverse core, 10 c2.091.388.5+8.5+8.5+8.5+8.5+
546STR reverse core, 10 uc2.051.558.5+8.5+8.5+8.5+8.5+
547STR reverse core, 100 c2.231.528.5+8.5+8.5+8.5+8.5+
548STR reverse core, 100 uc2.211.648.5+8.5+8.5+8.5+8.5+
549STR reverse core, 400 c2.291.748.5+8.5+8.5+8.5+8.5+
550STR reverse core, 400 uc2.381.888.5+8.5+8.5+8.5+8.5+
551STR reverse iter/append, 10 c3.293.023.096.006.006.0013.00
552STR reverse iter/append, 10 uc3.303.063.076.006.006.0013.00
553STR reverse iter/append, 100 c20.8819.2518.3250.0047.0046.00103.00
554STR reverse iter/append, 100 uc21.4820.3619.4749.0048.0046.00103.00
555STR reverse iter/append, 400 c76.2074.6966.83185.00182.00177.00520.00
556STR reverse iter/append, 400 uc77.8979.4471.20186.00183.00176.00518.00
557STR reverse iter/set, 10 c4.804.504.146.006.006.0014.00
558STR reverse iter/set, 10 uc4.804.544.225.005.006.0014.00
559STR reverse iter/set, 100 c39.4839.1335.9849.0049.0046.00113.00
560STR reverse iter/set, 100 uc40.2139.5937.7250.0049.0046.00113.00
561STR reverse iter/set, 400 c153.22147.53145.30198.00187.00181.00602.00
562STR reverse iter/set, 400 uc153.13152.02152.94200.00192.00179.00605.00
563STR reverse recursive, 10 c25.4922.2511.4314.0013.0011.0027.00
564STR reverse recursive, 10 uc24.0721.4410.3214.0013.0011.0027.00
565STR reverse recursive, 100 c227.99208.85108.15128.00125.00109.00242.00
566STR reverse recursive, 100 uc226.71196.94102.41167.00164.00109.00240.00
567STR reverse recursive, 400 c966.28820.65444.31518.00512.00462.008.0+
568STR reverse recursive, 400 uc956.48768.82407.921059.001056.00470.008.0+
569STR str $a eq $b0.930.730.601.001.001.004.00
570STR str $a eq $b (same obj)0.980.730.651.001.001.004.00
571STR str $a equal ""0.950.720.391.001.001.005.00
572STR str $a ne $b0.970.750.651.001.002.004.00
573STR str $a ne $b (same obj)0.860.740.591.001.001.004.00
574STR str num == ""0.950.760.421.001.001.005.00
575STR strcmp bin long eq9.117.385.22100.00100.00-=--=-
576STR strcmp bin long neq9.648.385.27100.00100.00-=--=-
577STR strcmp bin long neqS6.535.012.0894.0094.00-=--=-
578STR strcmp bin short eq5.263.901.483.003.00-=--=-
579STR streq bin long eq9.47118.13113.23104.00101.00-=--=-
580STR streq bin long neq9.88118.47113.24100.00101.00-=--=-
581STR streq bin long neqS6.69111.56107.1794.0094.00-=--=-
582STR streq bin short eq5.495.523.023.003.00-=--=-
583STR string compare0.860.670.611.001.001.002.00
584STR string compare ""1.010.830.561.001.001.003.00
585STR string compare long2.292.072.123.003.003.0011.00
586STR string compare long (same obj)0.780.620.582.002.002.0011.00
587STR string compare mixed long15.7615.5315.473.003.002.0010.00
588STR string compare uni long15.4815.2515.213.002.002.0010.00
589STR string equal ""1.020.760.481.001.001.004.00
590STR string equal long (!= len)1.320.980.933.003.003.0014.00
591STR string equal long (== len)2.492.452.413.003.003.0014.00
592STR string equal long (same obj)0.970.740.673.003.003.0014.00
593STR string equal mixed long1.000.770.653.003.003.0014.00
594STR string equal uni long3.782.672.603.003.003.0014.00
595STR/LIST length, obj shimmer189.69194.51173.92171.00172.001.0038.00
596SWITCH 1st true0.860.701.391.001.001.005.00
597SWITCH 2nd true0.890.711.481.001.001.005.00
598SWITCH 9th true0.860.701.631.001.002.005.00
599SWITCH default true0.820.671.591.001.002.005.00
600TRACE all set (rwu)1.342.071.311.001.001.003.00
601TRACE no trace set1.442.261.351.001.001.003.00
602TRACE read1.332.201.311.001.001.003.00
603TRACE unset1.362.161.211.001.001.003.00
604TRACE write1.332.001.221.001.001.003.00
605UNSET catch var !exist8.747.932.912.003.002.002.00
606UNSET catch var exists0.751.010.500.000.000.001.00
607UNSET info check var !exist0.770.620.430.000.000.001.00
608UNSET info check var exists0.771.050.591.001.001.001.00
609UNSET nocomplain var !exist0.721.330.412.002.002.002.00
610UNSET nocomplain var exists0.691.420.400.000.000.001.00
611UNSET var exists0.711.080.380.000.000.001.00
612UPLEVEL none134.43135.0791.87162.00170.00174.00-=-
613UPLEVEL primed795.89829.633421.043221.00502.00522.00-=-
614UPLEVEL to nseval1173.81926.043536.342846.00523.00567.00-=-
615UPLEVEL to proc1071.39939.293515.823162.00525.00500.00-=-
616VAR 'array set' of 100 elems7.646.816.6811.0011.0010.0022.00
617VAR 100 'set's in array5.554.984.855.005.006.0018.00
618VAR access global1.060.860.651.001.001.003.00
619VAR access local proc arg0.830.660.340.000.000.003.00
620VAR access locally set0.860.680.360.000.000.003.00
621VAR access upvar1.090.870.631.001.001.003.00
622VAR incr global var 1000x113.05110.0379.51172.00170.00184.001121.00
623VAR incr local var 1000x110.63110.8879.81171.00168.00185.001123.00
624VAR incr upvar var 1000x111.22105.7779.26175.00170.00184.001121.00
625VAR mset0.590.530.741.001.001.007.00
626VAR mset (foreach)0.660.520.470.000.000.005.00
627VAR ref absolute34.4731.1718.6125.0025.0023.008.0+
628VAR ref local2.892.462.926.005.006.008.0+
629VAR ref variable3.182.633.2912.0013.0011.008.0+
630VAR set array element0.970.770.530.000.000.001.00
631VAR set scalar0.700.570.320.000.000.001.00
632WORDCOUNT wc1269.02258.85219.57237.00227.00116.00144.00
633WORDCOUNT wc282.5580.0373.35122.00128.0077.0087.00
634WORDCOUNT wc374.5772.6963.37112.00116.0069.0064.00
634BENCHMARKS:8.6b1.28.5.98.4.198.3.58.2.38.0.57.6p2
 FINISHED 2010-09-27 19:59:24

Discussion and Analysis

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.
8.5.? ????? Much more bytecoding, but many operations slowed down to support new features (especially clock and arbitrary-width integers).

As with all benchmarks, take these numbers with a spoonful of salt!


Other Benchmarks