Re: variable declaration reset
- Posted by petelomax Apr 18, 2022
- 874 views
to be duplicated ''i'' number of times that is a waste of energy
is actually duplicated for every loop iteration which causes a "reset"... very inefficient
To be pedantic, I doubt that any language actually duplicates variables, and I'd consider a forced/implicit reset more "somewhat shy of spectacularly helpful" than "inefficient".
One thing I hadn't considered is that in some languages (Julia, Python) variables are defined by being assigned, and some (Java) effectively force assignment, so you simply cannot define an "unassigned empty slot" as it were.
It would be interesting if a statement existed that would "undo" an assignment and "reset" a variable to an assigned state so ? object(prev) does return False
Sort of, not p2js compatible, and note that as-is this would play merry havoc with refcounts for non-integer variables:
sequence s = {1,2,2,3,4,4,5} for i=1 to length(s) do integer curr = s[i], prev -- reset prev to "unassigned": #ilASM{ [32] mov eax,h4 mov [prev],eax [64] mov rax,h4 mov [prev],rax } if i>1 and curr=prev then ?{i,s[i]} end if prev = curr end for
Maybe delete(prev) could be made to do that sort of thing(/emit that sort of code) properly, including any needed refcount cleanup.
Anyway,
I think I may have just found a potential solution (for p2js):
-- Phix code for i=1 to 7 do integer prev ... end for
<==>
// JavaScript code for (let i=1, prev; i<=7; i+=1) { ... }Yet to give it a proper spin, but that would give prev the correct scope and behaviour, however it would only work for "for", and such unassigned vars would need to be bunched up at the start, so I might have to go back to the drawing board...
Of course, I've been using pwa/p2js aggressively for about a year and only hit this now, so any neat way to sidestep or trigger some kind of compilation error would not be dismissed.