Version 2 of Tcl Benchmarks

Updated 2001-07-17 17:34:53

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.

The numbers are microseconds, but you should only look at them relative to each other. There is some fluctuation expected as Tcl's 'time' does wall timing, not true cpu time. In any case, these were done on a dual P3-550 with 512MB physmem RedHat7.0 box. Dual doesn't make any difference - all interpreters were compiled static with no threads with the exception of 8.3 which is the RH7 default build (shared, -O2).

Except for 8.4a3, all represent the final code of that version. 8.4a3 is the head CVS code as of May 31, 2001.

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.4a3 as a norm of 1.0 to compare against.

The speed enhancements in 8.4 are primarily achieved by work done by myself and Eric Melski at Ajuba and continued at ActiveState [L3 ].


 TCL_INTERP: 1:8.4a3 2:8.3.1 3:8.2.3 4:8.0.5 5:7.6p2
 STARTED 2001-06-01 04:51:01 (runbench.tcl v1.10)
 Benchmark 1:8.4a3 /home/jeffh/install/linux-ix86/bin/tclsh8.4
 bccdeefhkllmmmmprrssstuvw 00:05:31 elapsed
 Benchmark 2:8.3.1 /usr/bin/tclsh8.3
 bccdeefhkllmmmmprrssstuvw 00:07:46 elapsed
 Benchmark 3:8.2.3 /home/jeffh/install/linux-ix86/bin/tclsh8.2
 bccdeefhkllmmmmprrssstuvw 00:07:20 elapsed
 Benchmark 4:8.0.5 /home/jeffh/install/linux-ix86/bin/tclsh8.0
 bccdeefhkllmmmmprrssstuvw 00:06:13 elapsed
 Benchmark 5:7.6p2 /home/jeffh/install/linux-ix86/bin/tclsh7.6
 bccdeefhkllmmmmprrssstuvw 00:35:12 elapsed
 000 VERSIONS:                               1:8.4a3 2:8.3.1 3:8.2.3 4:8.0.5 5:7.6p2
 001 BASE64 decode 10                            508     542     487     -=-     -=-
 002 BASE64 decode 100                          4082    4608    4076     -=-     -=-
 003 BASE64 decode 1000                        40098   45223   41061     -=-     -=-
 004 BASE64 decode 10000                      404342  452186  409902     -=-     -=-
 005 BASE64 decode2 10                           468     530     481     -=-     -=-
 006 BASE64 decode2 100                         3900    4367    3914     -=-     -=-
 007 BASE64 decode2 1000                       38056   43515   39410     -=-     -=-
 008 BASE64 decode2 10000                     377203  438234  397320     -=-     -=-
 009 BASE64 encode 10                            454     438     399     -=-     -=-
 010 BASE64 encode 100                          2850    3671    3324     -=-     -=-
 011 BASE64 encode 1000                        28178   36577   33607     -=-     -=-
 012 BASE64 encode 10000                      279258  366992  335106     -=-     -=-
 013 BASE64 encode2 10                           348     411     375     -=-     -=-
 014 BASE64 encode2 100                         2527    3716    3453     -=-     -=-
 015 BASE64 encode2 1000                       24753   33423   30927     -=-     -=-
 016 BASE64 encode2 10000                     253009  338375  312150     -=-     -=-
 017 CATCH no catch used                           3       3       3       3       5
 018 CATCH return error                           34      33      31      33      20
 019 CATCH return ok                               3       3       3       3      10
 020 DATA access in a list                      1566    2167    1789    1649   41578
 021 DATA access in an array                    2140    2266    2329    1750    7928
 022 DATA create in a list                      1073    2747    2225    2097    7365
 023 DATA create in an array                    2857    2780    2810    3628    9105
 024 EVAL cmd and mixed lists                   1470    1455    3892    2774     568
 025 EVAL cmd eval as list                         9      10      28      26      11
 026 EVAL cmd eval as string                      25      30      30      28      12
 027 EVAL cmd eval in list obj var                10      12      30      27      15
 028 EVAL list cmd and mixed lists              1435    1431    3923    2763     588
 029 EVAL list cmd and pure lists                252     239    3894    2772     569
 030 EXPR braced                                  13      14      12      10      79
 031 EXPR fifty operands                          23      22      22      19      84
 032 EXPR incr with expr                           4       5       3       3      16
 033 EXPR incr with incr                           5       5       5       3      11
 034 EXPR inline                                  15      14      13      11      37
 035 EXPR one operand                              3       3       3       3      14
 036 EXPR ten operands                             7       7       7       6      28
 037 EXPR unbraced                                98      99      93      72      79
 038 FCOPY binary: 160K                         5372    5420    5294     -=-     -=-
 039 FCOPY encoding: 160K                      23150    5495    5388     -=-     -=-
 040 FCOPY std: 160K                            5319    5397    5484    5909    6049
 041 HEAPSORT size 10                            605     642     618    4839    3448
 042 HEAPSORT size 50                           4072    4227    4029   28260   26561
 043 HEAPSORT size 100                          9334    9624    9060   59311   61673
 044 IF else true al                              15      16      16      11      42
 045 IF else true numeric                          8       7       8       7      40
 046 IF elseif true al                            15      16      14      12      41
 047 IF elseif true numeric                        8       7       8       7      43
 048 IF if false al/al                            10      11       9       8      31
 049 IF if false al/num                            9      10       8       8      56
 050 IF if false num/num                           6       6       6       6      33
 051 IF if true al                                10      12       9       8      34
 052 IF if true al/al                             10      12      10       8      31
 053 IF if true num/num                            6       6       6       6      32
 054 IF if true numeric                            6       6       6       6      30
 055 IF multi 1st true                             6       6       6       6      46
 056 IF multi 2nd true                             8       7       7       7      51
 057 IF multi 9th true                            16      15      16      16      90
 058 IF multi default true                        16      15      15      14      87
 059 KLIST shuffle0 llength 1                     54      88      74      74    8.0+
 060 KLIST shuffle0 llength 10                   142     247     221     197    8.0+
 061 KLIST shuffle0 llength 100                 1205    1996    1836    1557    8.0+
 062 KLIST shuffle0 llength 1000               13473   21607   19743   16814    8.0+
 063 KLIST shuffle0 llength 10000             181108  259874  242233  206740     -=-
 064 KLIST shuffle1-s llength 1                   51      60      48      35     123
 065 KLIST shuffle1-s llength 10                 203     296     252     207     940
 066 KLIST shuffle1-s llength 100               3033    3824    3018    2383   16278
 067 KLIST shuffle1-s llength 1000            295796  304262  248357  241626  940421
 068 KLIST shuffle1a llength 1                    52      68      56      41     156
 069 KLIST shuffle1a llength 10                  246     332     302     244    1236
 070 KLIST shuffle1a llength 100                2104    3193    2710    2317   20787
 071 KLIST shuffle1a llength 1000              21138   32162   27654   22460 1163626
 072 KLIST shuffle1a llength 10000            216413  326476  281614  229894     -=-
 073 KLIST shuffle2 llength 1                     51      71      64      75     157
 074 KLIST shuffle2 llength 10                   253     342     293     365    1037
 075 KLIST shuffle2 llength 100                 2374    2987    2692    3406   10308
 076 KLIST shuffle2 llength 1000               24349   30386   27674   34005  101137
 077 KLIST shuffle2 llength 10000             268951  323133  299880  369065     -=-
 078 KLIST shuffle3 llength 1                     42      69      57      46     118
 079 KLIST shuffle3 llength 10                   171     309     258     237     905
 080 KLIST shuffle3 llength 100                 1600    2805    2434    2072   10851
 081 KLIST shuffle3 llength 1000               17210   29430   25505   21433  354190
 082 KLIST shuffle3 llength 10000             390842  536090  489058  439680     -=-
 083 KLIST shuffle4 llength 1                     43      70      60      48     131
 084 KLIST shuffle4 llength 10                   178     324     276     260    1046
 085 KLIST shuffle4 llength 100                 1698    3004    2646    2167   14333
 086 KLIST shuffle4 llength 1000               16570   29538   26007   21520  675703
 087 KLIST shuffle4 llength 10000             166191  299936  263511  219683     -=-
 088 KLIST shuffle5-s llength 1                   22      27      22      18      88
 089 KLIST shuffle5-s llength 10                 151     188     144     118     660
 090 KLIST shuffle5-s llength 100               1736    1875    1570    1212    7483
 091 KLIST shuffle5-s llength 1000             78405   80311   65372   58870  210923
 092 KLIST shuffle5a llength 1                    25      29      26      21     103
 093 KLIST shuffle5a llength 10                  146     168     145     120     774
 094 KLIST shuffle5a llength 100                1317    1527    1302    1127    9440
 095 KLIST shuffle5a llength 1000              14959   16159   14282   11996  275093
 096 KLIST shuffle5a llength 10000            369635  384032  359252  334317     -=-
 097 LIST append to list                         279     229     306     293     234
 098 LIST exact search, first item                 6       9       6       6     422
 099 LIST exact search, last item                 36      33      32      29     436
 100 LIST exact search, middle item               15      13      13      11     427
 101 LIST exact search, non-item                 107      96      97      91     453
 102 LIST exact search, typed item                30      34      32      29     433
 103 LIST exact search, untyped item              36      39      32      29     432
 104 LIST index first element                      5       7       6       5     142
 105 LIST index last element                       5       7       6       5     177
 106 LIST index middle element                     5       7       6       5     162
 107 LIST insert an item at "end"                121     120     119     116     378
 108 LIST insert an item at middle               127     131     129     128     240
 109 LIST insert an item at start                130     125     131     124     222
 110 LIST iterate list                          2400    3844    3562    3320  353293
 111 LIST join list                              655     672     667     440    1135
 112 LIST large, early range                      14      17      14      11     177
 113 LIST large, late range                       14      15      15      11     184
 114 LIST length, pure list                        5       7       6       9     503
 115 LIST remove first element                   130     132     128     123     194
 116 LIST remove in mixed list                   135    1090    1074     135     240
 117 LIST remove last element                    124     126     126     122     257
 118 LIST remove middle element                  128     125     125     130     234
 119 LIST replace first el with multiple         130     131     130     126     231
 120 LIST replace first element                  122     121     124     119     222
 121 LIST replace in mixed list                  136    1084    1066     131     240
 122 LIST replace last el with multiple          126     128     122     125     397
 123 LIST replace last element                   122     121     120     124     386
 124 LIST replace middle el with multiple        128     124     130     123     324
 125 LIST replace middle element                 125     126     129     118     316
 126 LIST replace range                          121     119     118     124     279
 127 LIST small, early range                      11      11       9       7     150
 128 LIST small, late range                        9      12       9       7     176
 129 LIST sort                                  1527    1519    1487    1410    1508
 130 LIST sorted search, first item                8       7       6       6     420
 131 LIST sorted search, last item                 8      34      34      29     433
 132 LIST sorted search, middle item               8      14      13      11     430
 133 LIST sorted search, non-item                  8      94      93      90     450
 134 LIST sorted search, typed item                8      34      31      30     435
 135 LIST typed sort                            1461    1369    1337    1084    5394
 136 LOOP for (to 1000)                         1679    1539    1601    1446   12827
 137 LOOP for, iterate list                     2182    2884    2685    2453  147524
 138 LOOP for, iterate string                   3451    5664    4493    3730   40463
 139 LOOP foreach, iterate list                 1254    1141    1182    1075    3651
 140 LOOP foreach, iterate string               1489    2200    2177    1849    3465
 141 LOOP while (to 1000)                       1674    1534    1588    1442   13260
 142 MAP regsub -nocase, no match                697    1725    1690     960    1499
 143 MAP regsub 1 val                           2477    2574    2944     461    1062
 144 MAP regsub 1 val -nocase                   2529    2540    2939     652    1296
 145 MAP regsub 2 val                          11631   11241   12996    1175    2051
 146 MAP regsub 2 val -nocase                  11615   11244   13029    1512    2509
 147 MAP regsub 3 val                          15572   15392   17694    1624    2658
 148 MAP regsub 3 val -nocase                  15464   15384   17721    2126    3280
 149 MAP regsub 4 val                          19433   19487   22367    2027    3216
 150 MAP regsub 4 val -nocase                  19413   19496   22350    2667    4004
 151 MAP regsub short                            111     111     120      28      56
 152 MAP regsub, no match                        659    1747    1613     636     996
 153 MAP string -nocase, no match               3512   10609   10522   nomap   nomap
 154 MAP string 1 val                            306    4325    4390   nomap   nomap
 155 MAP string 1 val -nocase                   1829    5991    6171   nomap   nomap
 156 MAP string 2 val                            852    5100    5184   nomap   nomap
 157 MAP string 2 val -nocase                   3346    8393    8290   nomap   nomap
 158 MAP string 3 val                           1038    5962    6243   nomap   nomap
 159 MAP string 3 val -nocase                   4320   11047   10744   nomap   nomap
 160 MAP string 4 val                           1311    6505    6708   nomap   nomap
 161 MAP string 4 val -nocase                   5230   12513   12342   nomap   nomap
 162 MAP string short                             18      24      23   nomap   nomap
 163 MAP string, no match                        543    6008    6265   nomap   nomap
 164 MATRIX mult 5x5                             499     753     667     606    3765
 165 MATRIX mult 10x10                          3212    4344    4101    3568   27976
 166 MATRIX mult 15x15                         10168   13468   12606   11098   97049
 167 MATRIX transposition-0                     4598   13071   10577    9912   30461
 168 MATRIX transposition-1                     3211    7983    6908    6086  110408
 169 MD5 msg len 10                             1533    1554    1420    1443     -=-
 170 MD5 msg len 50                             1788    1522    1379    1365     -=-
 171 MD5 msg len 100                            2726    2684    2436    2445     -=-
 172 MD5 msg len 500                            9923   10010    8842    9070     -=-
 173 MD5 msg len 1000                          19789   18878   17902   17796     -=-
 174 MD5 msg len 5000                          97363   93849   84886   87793     -=-
 175 MD5 msg len 10000                        194751  197648  170329  174871     -=-
 176 MTHD array stored proc call                   5       6       5       4     -=-
 177 MTHD direct ns proc call                      3       3       3       3     -=-
 178 MTHD imported ns proc call                    3       3       3       3     -=-
 179 MTHD indirect proc eval                      14      14      32      30     -=-
 180 MTHD indirect proc eval #2                   26      29      30      33     -=-
 181 MTHD inline call                              2       2       1       1     -=-
 182 MTHD interp alias proc call                   9      12      10       5     -=-
 183 MTHD ns lookup call                          48      54      67      55     -=-
 184 MTHD switch method call                      20      23      40      40     -=-
 185 PROC do-nothing, no args                      3       2      15       2       1
 186 PROC do-nothing, one arg                      3       3       3       3       4
 187 PROC explicit return                          3       4       4       4       6
 188 PROC explicit return (2)                      5       3       3       3       5
 189 PROC explicit return (3)                      3       3       3       3       4
 190 PROC heavily commented                        3       3       3       3     187
 191 PROC implicit return                          3       3       3       3       7
 192 PROC implicit return (2)                      3       3       3       3       5
 193 PROC implicit return (3)                      3       3       3       3       4
 194 PROC local links with global                642     594     640     580    1620
 195 PROC local links with upvar                 586     541     552     533    1610
 196 PROC local links with variable              549     509     521     286    1607
 197 RE 1-char long-end                           49      47      50     618     621
 198 RE 1-char long-end catching                 100      91      93     636     629
 199 RE 1-char long-middle                        32      33      33     315     330
 200 RE 1-char long-middle catching               77      74      73     334     342
 201 RE 1-char long-start                         17      17      16      11      48
 202 RE 1-char long-start catching                61      59      57      28      64
 203 RE 1-char short                              17      17      16      11      13
 204 RE 1-char short catching                     60      57      60      28      22
 205 RE basic                                     14      15      13      11      14
 206 RE basic catching                            65      63      62      26      23
 207 RE c-comment long                            61      59      62      99     126
 208 RE c-comment long catching                  187     186     188     120     145
 209 RE c-comment long nomatch                    85      84      84      17      93
 210 RE c-comment long nomatch catching           85      83      83      18      89
 211 RE c-comment long pmatch                     99      94      95     562     636
 212 RE c-comment long pmatch catching            94      93      94     565     640
 213 RE c-comment many *s                         99     101      99     164     236
 214 RE c-comment many *s catching               305     297     300     203     274
 215 RE c-comment nomatch                         21      23      21       9      13
 216 RE c-comment nomatch catching                21      23      22      10      14
 217 RE c-comment simple                          38      36      36      20      24
 218 RE c-comment simple catching                144     130     141      39      34
 219 RE count all matches                        105      91     305     254     519
 220 RE extract all matches                      130     111     371     295     680
 221 RE literal regexp                            24      23      23      15      16
 222 RE n-char long-end                           49      48      48     692     693
 223 RE n-char long-end catching                 104      99     105     711     704
 224 RE n-char long-middle                        33      33      32     353     366
 225 RE n-char long-middle catching               88      90      87     371     383
 226 RE n-char long-start                         19      18      20      11      48
 227 RE n-char long-start catching                70      70      69      29      60
 228 RE n-char short                              17      23      16      11      13
 229 RE n-char short catching                     69      67      67      28      24
 230 RE var-based regexp                          25      24      24      16      22
 231 READ 595K, gets                          188172  203246  179708   98496  189814
 232 READ 595K, read                           39390   45851   51974  226434  218000
 233 READ 595K, read & size                    44746   51667   46795   18562  213308
 234 READ 3050b, gets                           1024    1097     957     549    1013
 235 READ 3050b, read                            260     276     271     141     176
 236 READ 3050b, read & size                     277     293     287     154     197
 237 READ bin 595K, gets                      196471  208773  184166   96986  187679
 238 READ bin 595K, read                        9485    9475    9626  222225  213271
 239 READ bin 595K, read & size                 9703    9992    9777   19006  212072
 240 READ bin 3050b, gets                       1100    1152    1011     562    1028
 241 READ bin 3050b, read                        122     129     119     160     182
 242 READ bin 3050b, read & size                 139     146     134     171     204
 243 SHA sha1 msg len 10                        3990    4334    3932    4114     -=-
 244 SHA sha1 msg len 100                       7395    7650    7614    7612     -=-
 245 SHA sha1 msg len 1000                     56818   59375   55107   57698     -=-
 246 SHA sha1 msg len 10000                   556833  585613  539377  559134     -=-
 247 SHA sha1DF msg len 10                      1734    2130    2017    1740     -=-
 248 SHA sha1DF msg len 100                     3178    4339    4142    3366     -=-
 249 SHA sha1DF msg len 1000                   25128   32032   29978   26688     -=-
 250 SHA sha1DF msg len 10000                 236464  313819  295352  259483     -=-
 251 STARTUP time to launch tclsh               8907   11005    8916   10448    4146
 252 STR append                                   58      59      46      39     247
 253 STR append (1KB + 1KB)                       23      36      30      22     155
 254 STR append (1MB + (1b + 1K + 1b) * 100)    7777   15813   15689   15605  117148
 255 STR append (1MB + 1KB * 20)                6606   14866   14740   14829  113469
 256 STR append (1MB + 1KB * 1000)             14991   23590   23219   22908  157438
 257 STR append (1MB + 1KB)                     6445   14665   14633   14658  112314
 258 STR append (1MB + 1MB * 3)                30202   37489   37095   37346  326752
 259 STR append (1MB + 1MB * 5)                37650   74239   74462   74473  425884
 260 STR append (1MB + 2b * 1000)               8575   18656   18390   17959  119100
 261 STR append (10KB + 1KB)                      75      94      91      79     659
 262 STR first (failure)                          58      35      35      33     189
 263 STR first (success)                           8       9       8       6     154
 264 STR first (total failure)                    51      16      16      16     187
 265 STR index 0                                  10      12      10       8     185
 266 STR index 100                                10      13      10       8     177
 267 STR index 500                                15      15      10       8     183
 268 STR info locals match                       462     484     500     437    1469
 269 STR last (failure)                           79      67      81      56     195
 270 STR last (success)                            7     143     134       6     195
 271 STR last (total failure)                     67      45      73      35     180
 272 STR length (==4010)                           5       7       6       5     183
 273 STR length of a LIST                          5       7       6       5     174
 274 STR length static str                         3       5       6       5      20
 275 STR match, complex (failure)                 72     633     584     293     386
 276 STR match, complex (success early)            9      14      11       8     148
 277 STR match, complex (success late)            89     644     595     303     391
 278 STR match, complex (total failure)           61     620     576     292     381
 279 STR match, simple (failure)                   7       8       6       5     146
 280 STR match, simple (success early)             7       8       6       5     146
 281 STR match, simple (success late)              7       8       6       5     150
 282 STR match, simple (total failure)             7       8       6       5     147
 283 STR range, index 100..200 of 4010            12      12      10       7     181
 284 STR repeat, 4010 chars * 10                 100     197     187     222    1815
 285 STR repeat, 4010 chars * 100               1792    3559    3501    3818   15752
 286 STR repeat, abcdefghij * 10                   6      13      12      41     177
 287 STR repeat, abcdefghij * 100                 16      40      41     331    1471
 288 STR repeat, abcdefghij * 1000               118     315     318    3186   14458
 289 STR replace, equal replacement               39     170     186      32     408
 290 STR replace, longer replacement              40     179     187      32     409
 291 STR replace, no replacement                  36     167     176      33     409
 292 STR reverse iter/append, 10 c                52     110      86      70     207
 293 STR reverse iter/append, 10 uc               52     111      90      71     202
 294 STR reverse iter/append, 100 c              344     912     685     593    1930
 295 STR reverse iter/append, 100 uc             345     910     682     590    1932
 296 STR reverse iter/append, 400 c             1324    3536    2665    2304   11000
 297 STR reverse iter/append, 400 uc            1326    3557    2692    2308   11031
 298 STR reverse iter/set, 10 c                   54      79      68      57     207
 299 STR reverse iter/set, 10 uc                  53      81      68      55     213
 300 STR reverse iter/set, 100 c                 435     672     578     469    2090
 301 STR reverse iter/set, 100 uc                442     662     578     468    2087
 302 STR reverse iter/set, 400 c                1884    2736    2442    1999   13093
 303 STR reverse iter/set, 400 uc               1921    2763    2490    2006   13090
 304 STR reverse recursive, 10 c                 123     171     152     117     360
 305 STR reverse recursive, 10 uc                108     171     149     117     356
 306 STR reverse recursive, 100 c               1175    1667    1510    1146    3711
 307 STR reverse recursive, 100 uc              1077    2103    1930    1152    3702
 308 STR reverse recursive, 400 c               5093    7201    6491    5016    8.0+
 309 STR reverse recursive, 400 uc              5687   15362   14672    5021    8.0+
 310 STR split iter, 4000 uchars                6217    8811    8784    7386   14490
 311 STR split iter, 4010 chars                 6148    8783    8711    7376   14429
 312 STR split, 4000 uchars                     1345    4145    4067    3122    1081
 313 STR split, 4010 chars                      1282    4098    3995    3111    1031
 314 STR str $a eq $b                             11      17      16      14      53
 315 STR str $a eq $b (same obj)                  10      17      16      14      53
 316 STR str $a equal ""                           7      11      12       8      67
 317 STR str $a ne $b                             11      16      16      14      51
 318 STR str $a ne $b (same obj)                  10      16      15      17      51
 319 STR str num == ""                             8       7       9       8      68
 320 STR string compare                           12      16      16      14      28
 321 STR string compare ""                         9      11      12      11      48
 322 STR string compare long                     239     194     197     196     950
 323 STR string compare mixed long               562     210     208     203     952
 324 STR string compare uni long                 234     223     224     191     937
 325 STR string equal ""                           8      11      12      11      42
 326 STR/LIST length, obj shimmer               1181    1187    1162       8     655
 327 SWITCH 1st true                              17      18      21      13      45
 328 SWITCH 2nd true                              18      22      16      14      46
 329 SWITCH 9th true                              20      22      18      16      49
 330 SWITCH default true                          23      22      19      17      47
 331 TRACE all set (rwu)                          16      17      14      13      22
 332 TRACE no trace set                           16      17      14      13      22
 333 TRACE read                                   16      22      14      13      22
 334 TRACE unset                                  16      17      14      18      22
 335 TRACE write                                  16      17      14      15      22
 336 UNSET catch var !exist                       43      37      33      29      22
 337 UNSET catch var exists                        5       6       5       5      12
 338 UNSET info check var !exist                   6       6       6       5      14
 339 UNSET info check var exists                   8       8       7       7      14
 340 UNSET nocomplain var !exist                   5      38      33      29      26
 341 UNSET nocomplain var exists                   5       6       5       5      14
 342 UNSET var exists                              5       5       5       4       7
 343 VAR 'array set' of 100 elems                169     151     155     131     247
 344 VAR 100 'set's in array                      86      80      82      79     248
 345 VAR access global                            16      19      16      13      20
 346 VAR access local proc arg                     5       5       5       5      18
 347 VAR access locally set                        5       5       6       5      17
 348 VAR access upvar                             19      20      17      14      22
 349 VAR set array element                         7       8       6       7       9
 350 VAR set scalar                                3       3       3       3       8
 351 WORDCOUNT wc1                              3073    3108    3149    1192    2002
 352 WORDCOUNT wc2                               769    1754    1760     692    1048
 353 WORDCOUNT wc3                               676    1660    1643     604     756
 353 BENCHMARKS                              1:8.4a3 2:8.3.1 3:8.2.3 4:8.0.5 5:7.6p2
 FINISHED 2001-06-01 05:53:03

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!