Re: Rob: Q: Re: Major Bug in Interpreter [Attn: Robert Craig]
- Posted by Matt Lewis <matthewwalkerlewis at yahoo.com> Feb 14, 2005
- 472 views
Vincent wrote: > > > Couldnt you just have made foo[$] translate to foo[length(foo)] in the > Euphoria IL? This would be much less efficient for cases where '$' is really useful (and is actually more than simple syntactic sugar). I used my IL code disassembler to show you why: For your simple case, you can see that identical code is emitted: 5: 042 103 105 # LENGTH: [foo:103] => [_temp_:105] 8: 025 103 105 105 # RHS_SUBS: [foo:103] sub [_temp_:105] => # [_temp_:105] 12: 036 104 105 # QPRINT: [_temp_:105] 15: 058 4 # STARTLINE: 4 <<? foo[length(foo)] >> 17: 042 103 105 # LENGTH: [foo:103] => [_temp_:105] 20: 025 103 105 105 # RHS_SUBS: [foo:103] sub [_temp_:105] => # [_temp_:105] 24: 036 104 105 # QPRINT: [_temp_:105] If there is some additional subscripting, however, you can see that a simple translation of $ to length(foo[3][4]) results in more code, and therefore slower execution: ? foo[3][4][$]: 27: 058 6 # STARTLINE: 6 <<? foo[3][4][$] >> 29: 025 103 106 105 # RHS_SUBS: [foo:103] sub [LIT 3:106] => [_temp_:105] 33: 092 105 107 105 # RHS_SUBS: [_temp_:105] sub [LIT 4:107] => # [_temp_:105] 37: 042 105 108 # LENGTH: [_temp_:105] => [_temp_:108] 40: 092 105 108 108 # RHS_SUBS: [_temp_:105] sub [_temp_:108] # => [_temp_:108] 44: 036 104 108 # QPRINT: [_temp_:108] ? foo[3][4][length(foo[3][4]): 47: 058 7 # STARTLINE: 7 <<? foo[3][4][length(foo[3][4])] # >> 49: 025 103 106 108 # RHS_SUBS: [foo:103] sub [LIT 3:106] => [_temp_:108] 53: 092 108 107 108 # RHS_SUBS: [_temp_:108] sub [LIT 4:107] => # [_temp_:108] 57: 025 103 106 105 # RHS_SUBS: [foo:103] sub [LIT 3:106] => [_temp_:105] 61: 092 105 107 105 # RHS_SUBS: [_temp_:105] sub [LIT 4:107] => # [_temp_:105] 65: 042 105 105 # LENGTH: [_temp_:105] => [_temp_:105] 68: 092 108 105 108 # RHS_SUBS: [_temp_:108] sub [_temp_:105] # => [_temp_:108] 72: 036 104 108 # QPRINT: [_temp_:108] Matt Lewis