Posted to tcl by mjanssen at Mon Jul 20 09:42:48 GMT 2020view pretty

proc run {program} {
	set pc 0
	while 1 {
		set cmd [lindex $program $pc]
		switch -exact $cmd {
			0 {incr pc}
			99 {break}
		}
	}
		
}

proc 0 {args} {
	return 1
}

proc 99 {args} {
	return -code break
}

proc run2 {program} {
	set pc 0
	while 1 {
		incr pc [{*}[lrange $program $pc end]]
	}
		
}


set program [lrepeat 10000 0]  ; set a 2
lappend program 99 ; set a 2

time {run $program}
time {run2 $program}