|Do you know where your variables are?|
We had the discussion already in the past and I'm reluctant to reiterate it.
And yes, it's semantics.
Saying OP codes are not byte codes because the latter are more primitive "assembler like" and the former rather macros is also a matter of perspective.
For instance it's far easier to deparse the original source for Java than C.
But yes, granted, there are many languages targeting the JVM and only one for Perl's runtime, because the former is "simpler".
But it should still be possible to generate a .plc from another language, at least in theory.
And Java is still interpreted, because JIT ne AOT.
The most crucial point if it comes to performance is rather static Vs dynamic typing, and nobody mentioned it yet.
Optimizing X+Y is pretty complicated if one doesn't know if it's an integer, float, string or overloaded operation.
Another dimension of shades of grey.
... And semantics.