d5 / tengo

A fast script language for Go

Home Page:https://tengolang.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

bug:invalid jump position:0

wlxwlxwlx opened this issue · comments

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

Too large an array. See related issue: #402

OK,thx

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?

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

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

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.

Do you have a measure of the relative slowdown?

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))
}

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

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?

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?

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

I submitted a pull request for this: #433