Type-checking performance

new topic     » topic index » view thread      » older message » newer message

Can you explain why this:
constant ITER = 10000000
atom time_elapsed

type type1(object x) return 1 end type

type type2(integer x) return 1 end type

type type3(object x) if integer(x) then return 1 end if end type

type4 is integer

type1 var1 var1 = 0 type2 var2 var2 = 0 type3 var3 var3 = 0 integer var4 var4 = 0

time_elapsed = time() for a = 1 to ITER do var1 += 1 end for printf(1, "Type1: %f\n", { time() - time_elapsed } )

time_elapsed = time() for a = 1 to ITER do var2 += 1 end for printf(1, "Type2: %f\n", { time() - time_elapsed } )

time_elapsed = time() for a = 1 to ITER do var1 += 1 end for printf(1, "Type3: %f\n", { time() - time_elapsed } )

time_elapsed = time() for a = 1 to ITER do var4 += 1 end for printf(1, "Type4: %f\n", { time() - time_elapsed } ) }}}



Outputs this: Type1: 0.820000 Type2: 0.950000 Type3: 0.830000 Type4: 0.060000

Rob, I thought you said you optimised the case where a type returns 1 immediately? The other odd thing here is that Type3 is faster than Type2, even though it actually does some computation inside the type.

What's going on internally?

MrTrick }}}

new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu