Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bug:invalid jump position:0 #431

Open
wlxwlxwlx opened this issue Sep 26, 2023 · 13 comments
Open

bug:invalid jump position:0 #431

wlxwlxwlx opened this issue Sep 26, 2023 · 13 comments

Comments

@wlxwlxwlx
Copy link
Contributor

The code has exceeded the maximum word limit for an issue. I will write the code to a file and upload it:
main.txt

@geseq
Copy link
Collaborator

geseq commented Sep 26, 2023

Too large an array. See related issue: #402

@wlxwlxwlx
Copy link
Contributor Author

OK,thx

@wlxwlxwlx
Copy link
Contributor Author

This may not be the same problem as that one,I changed my code to the following way of writing and still reported the same error:
for i in range(0, 9) { //fmt.Println(list[i]) }
I traced the source code and found that the problem lies in the MakeInstruction() of 'the instructions. go' file.
In line 28, n:=uint16 (o), the actual value of o is 66114, which exceeds the maximum value of uint16 (65535).
Is there any way I can correct it?

@geseq
Copy link
Collaborator

geseq commented Sep 27, 2023

aha, can you try a larger uint and see if that helps?

@wlxwlxwlx
Copy link
Contributor Author

I changed the 4 Jump instructions from uint16 to uint32, and changed the 2 bytes to 4 bytes. They are now working properly
image
image

And thank you again for your reply

@wlxwlxwlx
Copy link
Contributor Author

However, the execution efficiency is slightly lower than before. I used the for loop to execute i++ 100 million times, which is about 200 milliseconds slower than before.

@geseq
Copy link
Collaborator

geseq commented Sep 29, 2023

Do you have a measure of the relative slowdown?

@wlxwlxwlx
Copy link
Contributor Author

func main() {
src := `
fmt:=import("fmt")
V_INTERNAL_F := func() {
index:=0;
for i:=0;i<100000000;i++{
index++
}

return index

}
V_RETURN := V_INTERNAL_F()

`
start := time.Now()
res, err := run(src)
if err != nil {
panic(err)
}
end := time.Since(start)
fmt.Println("cost:", end)
//println(res)
j_str, err := json.Marshal(res)
if err != nil {
panic(err)
}
fmt.Println(string(j_str))
}

@wlxwlxwlx
Copy link
Contributor Author

I executed the above code 20 times using the pre modified code and the modified code, and took an average value for comparison

@geseq
Copy link
Collaborator

geseq commented Oct 7, 2023

Sorry, to clarify, 200ms is a lot if your baseline was say 500ms, but negligible if it was say 10 seconds. What does the 200ms compare against?

@wlxwlxwlx
Copy link
Contributor Author

The baseline is 7 to 8 seconds, and 200 milliseconds is the difference in code execution time before and after modification, shouldn't it be too much?

@geseq
Copy link
Collaborator

geseq commented Oct 7, 2023

That’s a 2-3% difference. If it’s consistently repeatable we should try to improve it if possible but if not, the trade-off might be worth it

@wlxwlxwlx
Copy link
Contributor Author

wlxwlxwlx commented Oct 10, 2023

I submitted a pull request for this: #433

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants