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