Here is mine, just for fun :) [ BTW, Chen, you'd wonder how much faster
Harbour would be with MSVC or MinGW. ]

For sure Clipper is slower, and this can be felt when running
my real-life app. I blamed console output, but it seems it's not just
that. By dropping legacy stuff and using new Harbour techniques
(like hashes), my app startup time went from several seconds
to just instantenious. This got better and better in last half year
due to several Harbour enhancements in multiple areas.

See also an xhb test run (-gc3 ST), plus a Harbour -gc3 ST for
comparison, and also my previous posted XPP.

[ P4 2.6 HT 3GB RAM. Conditions similar to my other recent test results. ]

--- exe size: 271KB (static)
03/18/09 14:07:14 DOS 5.00
Clipper (R) 5.2e Intl. (x216)  (1995.02.07)
THREADS: 0
N_LOOPS: 1000000
[ T000: empty loop overhead ]...................................1.10
====================================================================
[ T001: x := L_C ]..............................................0.11
[ T002: x := L_N ]..............................................0.16
[ T003: x := L_D ]..............................................0.11
[ T004: x := S_C ]..............................................0.11
[ T005: x := S_N ]..............................................0.16
[ T006: x := S_D ]..............................................0.11
[ T007: x := M->M_C ]...........................................0.33
[ T008: x := M->M_N ]...........................................0.33
[ T009: x := M->M_D ]...........................................0.33
[ T010: x := M->P_C ]...........................................0.32
[ T011: x := M->P_N ]...........................................0.33
[ T012: x := M->P_D ]...........................................0.33
[ T013: x := F_C ]..............................................1.48
[ T014: x := F_N ]..............................................2.52
[ T015: x := F_D ]..............................................0.87
[ T016: x := o:Args ]...........................................0.93
[ T017: x := o[2] ].............................................0.33
[ T018: round( i / 1000, 2 ) ]..................................3.84
[ T019: str( i / 1000 ) ].......................................3.85
[ T020: val( s ) ]..............................................3.02
[ T021: val( a [ i % 16 + 1 ] ) ]...............................6.20
[ T022: dtos( d - i % 10000 ) ].................................4.45
[ T023: eval( { || i % 16 } ) ].................................3.79
[ T024: eval( bc := { || i % 16 } ) ]...........................3.07
[ T025: eval( { |x| x % 16 }, i ) ].............................3.46
[ T026: eval( bc := { |x| x % 16 }, i ) ].......................3.07
[ T027: eval( { |x| f1( x ) }, i ) ]............................1.98
[ T028: eval( bc := { |x| f1( x ) }, i ) ]......................1.54
[ T029: eval( bc := &("{ |x| f1( x ) }"), i ) ].................2.08
[ T030: x := &( "f1(" + str(i) + ")" ) ].......................17.47
[ T031: bc := &( "{|x|f1(x)}" ), eval( bc, i ) ]...............18.89
[ T032: x := valtype( x ) +  valtype( i ) ].....................2.36
[ T033: x := strzero( i % 100, 2 ) $ a[ i % 16 + 1 ] ].........15.60
[ T034: x := a[ i % 16 + 1 ] == s ].............................3.35
[ T035: x := a[ i % 16 + 1 ] = s ]..............................3.89
[ T036: x := a[ i % 16 + 1 ] >= s ].............................3.96
[ T037: x := a[ i % 16 + 1 ] <= s ].............................3.95
[ T038: x := a[ i % 16 + 1 ] < s ]..............................3.90
[ T039: x := a[ i % 16 + 1 ] > s ]..............................3.90
[ T040: ascan( a, i % 16 ) ]...................................11.04
[ T041: ascan( a, { |x| x == i % 16 } ) ]......................37.29
[ T042: iif( i%1000==0, a:={}, ) , aadd(a,{i,1,.T.,s,s2,a2 ]....9.50
[ T043: x := a ]................................................0.11
[ T044: x := {} ]...............................................0.44
[ T045: f0() ]..................................................0.49
[ T046: f1( i ) ]...............................................0.55
[ T047: f2( c[1...8] ) ]........................................0.60
[ T048: f2( c[1...40000] ) ]....................................0.55
[ T049: f2( @c[1...40000] ) ]...................................0.60
[ T050: f2( @c[1...40000] ), c2 := c ]..........................0.77
[ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.93
[ T052: f2( a ) ]...............................................0.55
[ T053: x := f4() ].............................................4.66
[ T054: x := f5() ].............................................0.99
[ T055: x := space(16) ]........................................0.55
[ T056: f_prv( c ) ]............................................1.42
====================================================================
[ total application time: ]...................................259.30
[ total real time: ]..........................................259.30
---

--- exe size: 962KB (static)
03/18/09 14:29:52 Windows  XP Professional 5.01.2600 Service Pack 3
xHarbour build 1.1.0 Intl. (SimpLex) (Rev. 6220) Pelles ISO C Compiler 2.70
THREADS: 0
N_LOOPS: 1000000
[ T000: empty loop overhead ]...................................0.17
====================================================================
[ T001: x := L_C ]..............................................0.20
[ T002: x := L_N ]..............................................0.17
[ T003: x := L_D ]..............................................0.16
[ T004: x := S_C ]..............................................0.19
[ T005: x := S_N ]..............................................0.17
[ T006: x := S_D ]..............................................0.16
[ T007: x := M->M_C ]...........................................0.19
[ T008: x := M->M_N ]...........................................0.20
[ T009: x := M->M_D ]...........................................0.17
[ T010: x := M->P_C ]...........................................0.20
[ T011: x := M->P_N ]...........................................0.17
[ T012: x := M->P_D ]...........................................0.16
[ T013: x := F_C ]..............................................0.92
[ T014: x := F_N ]..............................................0.52
[ T015: x := F_D ]..............................................0.30
[ T016: x := o:Args ]...........................................0.91
[ T017: x := o[2] ].............................................0.30
[ T018: round( i / 1000, 2 ) ]..................................0.91
[ T019: str( i / 1000 ) ].......................................2.70
[ T020: val( s ) ]..............................................1.00
[ T021: val( a [ i % 16 + 1 ] ) ]...............................1.44
[ T022: dtos( d - i % 10000 ) ].................................1.44
[ T023: eval( { || i % 16 } ) ].................................1.95
[ T024: eval( bc := { || i % 16 } ) ]...........................1.13
[ T025: eval( { |x| x % 16 }, i ) ].............................1.47
[ T026: eval( bc := { |x| x % 16 }, i ) ].......................1.13
[ T027: eval( { |x| f1( x ) }, i ) ]............................2.14
[ T028: eval( bc := { |x| f1( x ) }, i ) ]......................1.77
[ T029: eval( bc := &("{ |x| f1( x ) }"), i ) ].................1.77
[ T030: x := &( "f1(" + str(i) + ")" ) ].......................14.89
[ T031: bc := &( "{|x|f1(x)}" ), eval( bc, i ) ]...............16.23
[ T032: x := valtype( x ) +  valtype( i ) ].....................2.25
[ T033: x := strzero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........2.81
[ T034: x := a[ i % 16 + 1 ] == s ].............................0.89
[ T035: x := a[ i % 16 + 1 ] = s ]..............................0.91
[ T036: x := a[ i % 16 + 1 ] >= s ].............................0.89
[ T037: x := a[ i % 16 + 1 ] <= s ].............................0.94
[ T038: x := a[ i % 16 + 1 ] < s ]..............................0.92
[ T039: x := a[ i % 16 + 1 ] > s ]..............................0.94
[ T040: ascan( a, i % 16 ) ]....................................1.14
[ T041: ascan( a, { |x| x == i % 16 } ) ]......................12.63
[ T042: iif( i%1000==0, a:={}, ) , aadd(a,{i,1,.T.,s,s2,a2 ]....4.33
[ T043: x := a ]................................................0.19
[ T044: x := {} ]...............................................0.64
[ T045: f0() ]..................................................0.59
[ T046: f1( i ) ]...............................................0.78
[ T047: f2( c[1...8] ) ]........................................0.73
[ T048: f2( c[1...40000] ) ]....................................0.77
[ T049: f2( @c[1...40000] ) ]...................................0.75
[ T050: f2( @c[1...40000] ), c2 := c ]..........................0.88
[ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................1.64
[ T052: f2( a ) ]...............................................0.75
[ T053: x := f4() ].............................................8.98
[ T054: x := f5() ].............................................2.09
[ T055: x := space(16) ]........................................1.41
[ T056: f_prv( c ) ]............................................2.48
====================================================================
[ total application time: ]...................................116.11
[ total real time: ]..........................................116.39
---

--- exe size: 586KB (static)
03/18/09 11:10:46 Windows XP 5.1.2600 Service Pack 3
Harbour 1.1.0dev (Rev. 10642) Microsoft Visual C++ 15.0.26569 (32-bit)
THREADS: 0
N_LOOPS: 1000000
[ T000: empty loop overhead ]...................................0.05
====================================================================
[ T001: x := L_C ]..............................................0.03
[ T002: x := L_N ]..............................................0.02
[ T003: x := L_D ]..............................................0.02
[ T004: x := S_C ]..............................................0.03
[ T005: x := S_N ]..............................................0.02
[ T006: x := S_D ]..............................................0.02
[ T007: x := M->M_C ]...........................................0.05
[ T008: x := M->M_N ]...........................................0.03
[ T009: x := M->M_D ]...........................................0.03
[ T010: x := M->P_C ]...........................................0.05
[ T011: x := M->P_N ]...........................................0.03
[ T012: x := M->P_D ]...........................................0.02
[ T013: x := F_C ]..............................................0.22
[ T014: x := F_N ]..............................................0.38
[ T015: x := F_D ]..............................................0.17
[ T016: x := o:Args ]...........................................0.17
[ T017: x := o[2] ].............................................0.08
[ T018: round( i / 1000, 2 ) ]..................................0.27
[ T019: str( i / 1000 ) ].......................................0.55
[ T020: val( s ) ]..............................................0.34
[ T021: val( a [ i % 16 + 1 ] ) ]...............................0.58
[ T022: dtos( d - i % 10000 ) ].................................0.53
[ T023: eval( { || i % 16 } ) ].................................0.56
[ T024: eval( bc := { || i % 16 } ) ]...........................0.38
[ T025: eval( { |x| x % 16 }, i ) ].............................0.48
[ T026: eval( bc := { |x| x % 16 }, i ) ].......................0.38
[ T027: eval( { |x| f1( x ) }, i ) ]............................0.48
[ T028: eval( bc := { |x| f1( x ) }, i ) ]......................0.38
[ T029: eval( bc := &("{ |x| f1( x ) }"), i ) ].................0.39
[ T030: x := &( "f1(" + str(i) + ")" ) ]........................3.73
[ T031: bc := &( "{|x|f1(x)}" ), eval( bc, i ) ]................4.22
[ T032: x := valtype( x ) +  valtype( i ) ].....................0.42
[ T033: x := strzero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........0.89
[ T034: x := a[ i % 16 + 1 ] == s ].............................0.34
[ T035: x := a[ i % 16 + 1 ] = s ]..............................0.41
[ T036: x := a[ i % 16 + 1 ] >= s ].............................0.42
[ T037: x := a[ i % 16 + 1 ] <= s ].............................0.41
[ T038: x := a[ i % 16 + 1 ] < s ]..............................0.41
[ T039: x := a[ i % 16 + 1 ] > s ]..............................0.41
[ T040: ascan( a, i % 16 ) ]....................................0.41
[ T041: ascan( a, { |x| x == i % 16 } ) ].......................3.92
[ T042: iif( i%1000==0, a:={}, ) , aadd(a,{i,1,.T.,s,s2,a2 ]....0.95
[ T043: x := a ]................................................0.05
[ T044: x := {} ]...............................................0.16
[ T045: f0() ]..................................................0.08
[ T046: f1( i ) ]...............................................0.14
[ T047: f2( c[1...8] ) ]........................................0.13
[ T048: f2( c[1...40000] ) ]....................................0.11
[ T049: f2( @c[1...40000] ) ]...................................0.13
[ T050: f2( @c[1...40000] ), c2 := c ]..........................0.16
[ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.39
[ T052: f2( a ) ]...............................................0.13
[ T053: x := f4() ].............................................1.17
[ T054: x := f5() ].............................................0.31
[ T055: x := space(16) ]........................................0.20
[ T056: f_prv( c ) ]............................................0.39
====================================================================
[ total application time: ]....................................29.81
[ total real time: ]...........................................29.98
---

--- exe size: 252KB (shared)
03/17/2009 17:34:57 Windows XP 05.01 Build 02600 Service Pack 3
Xbase++ (R) Version 1.90 (MT)
THREADS: 0
N_LOOPS: 1000000
[ T000: empty loop overhead ]...................................0.03
====================================================================
[ T001: x := L_C ]..............................................0.03
[ T002: x := L_N ]..............................................0.02
[ T003: x := L_D ]..............................................0.00
[ T004: x := S_C ]..............................................0.08
[ T005: x := S_N ]..............................................0.05
[ T006: x := S_D ]..............................................0.04
[ T007: x := M->M_C ]...........................................0.24
[ T008: x := M->M_N ]...........................................0.17
[ T009: x := M->M_D ]...........................................0.18
[ T010: x := M->P_C ]...........................................0.25
[ T011: x := M->P_N ]...........................................0.19
[ T012: x := M->P_D ]...........................................0.18
[ T013: x := F_C ]..............................................0.35
[ T014: x := F_N ]..............................................0.30
[ T015: x := F_D ]..............................................0.30
[ T016: x := o:Args ]...........................................0.20
[ T017: x := o[2] ].............................................0.05
[ T018: round( i / 1000, 2 ) ]..................................1.51
[ T019: str( i / 1000 ) ].......................................9.72
[ T020: val( s ) ]..............................................0.44
[ T021: val( a [ i % 16 + 1 ] ) ]...............................1.05
[ T022: dtos( d - i % 10000 ) ].................................1.47
[ T023: eval( { || i % 16 } ) ].................................1.52
[ T024: eval( bc := { || i % 16 } ) ]...........................0.94
[ T025: eval( { |x| x % 16 }, i ) ].............................0.65
[ T026: eval( bc := { |x| x % 16 }, i ) ].......................0.55
[ T027: eval( { |x| f1( x ) }, i ) ]............................0.83
[ T028: eval( bc := { |x| f1( x ) }, i ) ]......................0.74
[ T029: eval( bc := &("{ |x| f1( x ) }"), i ) ].................1.03
[ T030: x := &( 'f1(' + str(i) + ')' ) ].......................23.89
[ T031: bc := &( '{|x|f1(x)}' ), eval( bc, i ) ]...............24.41
[ T032: x := valtype( x ) +  valtype( i ) ].....................0.44
[ T033: x := strzero( i % 100, 2 ) $ a[ i % 16 + 1 ] ].........10.00
[ T034: x := a[ i % 16 + 1 ] == s ].............................0.38
[ T035: x := a[ i % 16 + 1 ] = s ]..............................0.56
[ T036: x := a[ i % 16 + 1 ] >= s ].............................0.56
[ T037: x := a[ i % 16 + 1 ] <= s ].............................0.57
[ T038: x := a[ i % 16 + 1 ] < s ]..............................0.56
[ T039: x := a[ i % 16 + 1 ] > s ]..............................0.56
[ T040: ascan( a, i % 16 ) ]....................................0.97
[ T041: ascan( a, { |x| x == i % 16 } ) ].......................6.82
[ T042: iif( i%1000==0, a:={}, ), aadd(a,{i,1,.t.,s,s2,a2, ]....8.89
[ T043: x := a ]................................................0.03
[ T044: x := {} ]...............................................0.44
[ T045: f0() ]..................................................0.24
[ T046: f1( i ) ]...............................................0.22
[ T047: f2( c[1...8] ) ]........................................0.26
[ T048: f2( c[1...40000] ) ]....................................0.21
[ T049: f2( @c[1...40000] ) ]...................................0.22
[ T050: f2( @c[1...40000] ), c2 := c ]..........................0.23
[ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.33
[ T052: f2( a ) ]...............................................0.18
[ T053: x := f4() ].............................................1.04
[ T054: x := f5() ].............................................0.62
[ T055: x := space(16) ]........................................0.36
[ T056: f_prv( c ) ]............................................0.70
====================================================================
[ total application time: ]...................................108.45
[ total real time: ]..........................................108.45
---

Brgds,
Viktor
_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to