Is there any part of Octave around the interpreter engine that has gone
from one version to another? (I'm recalling some kind of open-source
parser or compiler as one of the libraries included.) That is, is it an
Octave issue, or could it be some outside library's issue?
JWE has changed the parser from a pull parser to a push parser (or maybe
the other way around?) over time. My hunch is that it is not parsing (done
by lex and bison--old, well-established tools), but evaluation that has slowed.
Regarding the interpreting result and how efficient it might be, is there
anywhere in the Octave code where one could dump out, say, the size of
the interpreter code/instruction list/or anything that might give an
indication of efficiency? That is, say there is a point where the parser
does it's job, and it is then a case of executing some type of primitive
"language". We could then put a printf for the size of the primitive
list in both 4.2.1 and 4.4.1.
This is a bit beyond me, but I think so. I believe Octave constructs a
tree of nodes from the source code and then proceeds to evaluate them. So
you are correct, if
y = x + 1
generates the same primitive actions
1) create temporary octave_value from scalar 1
2) fetch x
3) perform operator function plus (x, tmp_value)
4) assign octave_value output to y
between versions, but one version takes longer than another, then the
conclusion must be that the individual steps are taking longer.