In re: performance, probably the biggest bang for your buck would come from
using integers in place of boxes.
From the examples on that page, it appears that stack elements can either be
integers (“ADD 5 2”, “LABEL 100”) or opcodes (“ADD”, “LABEL”). So you could
modify the parse function to convert string opcodes to integers (use s: if you
want, or simply the indices into the global noun OPS [1]).
Then ditch all the <s and {::s etc.
In terms of other speedups, I don’t know if you’re going for some kind of
stack-oriented purity, but I’d imagine e.g. +/ _2 {. stack (or define a pop2
which returns _2 {. stack) would be a lot faster than op_pop + op_pop which
requires transitioning to an explicit context twice, as well as two updates to
the global noun stack.
But … this is all speculation. Maybe the best advice I could give you is to
run your 50,000 op test under the performance manager and see what the actual
bottlenecks are.
Anyway, cool stuff.
-Dan
[1] FYI, you don’t need the verb defOps . You could simply say:
(OPS) =: i.#OPS=:;:’POP PUSH ADDS ADD CMP EXIT LABEL DISP JGE DSTR’
For some silly fun, you could use a gerund instead of a string:
(OPS) =: i.#OPS=: POP`PUSH`ADDS`ADD`CMP`EXIT`LABEL`DISP`JGE`DSTR
This latter approach is dangerous because one day someone might decide to
define e.g. a noun POP in the z locale or something.
> On Nov 10, 2015, at 4:07 PM, Joe Bogner <[email protected]> wrote:
>
> I wrote this over lunch today and was pleased to see how simple it
> was. I'm posting here for those who don't follow Recent Changes.
> Feedback welcome
>
> http://code.jsoftware.com/wiki/User:Joe_Bogner/ByteCodeInterpreter
>
> I'd be interested in any speedups to the timing test that still permit
> jumps. It's fine as-is for a toy though
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm