Yes, the UCSD P-code interpreter was ported to 4.1 BSD on the VAX and it ran natively there. I used it on sdcsvax in my senior year (1980).
Wasn't Java referred to as "compiled" even back before the JIT compiler was added?
Yes!
And then there's the CPython implementation of Python. It too uses a byte code interpreter, but it's commonly referred to as "interpreted". But is it really? Granted, it has an implicit, cached compilation step, but is it less compiled for that?
I think that "interpreted" in this context means the load-and-go nature of the system and the transience of the bytecode: the text is internally compiled and then executed, but these steps are often linked and, while one can coax the Python "interpreter" to emit .pyc and/or .pyo files, usually one does not: the compiled bytecodes are lost as soon as the program is done executing.
An interesting response.
I'll point out though, being a little picky, that python's "import" statement will look for a .py, compile it, and write the byte code as a .pyc - automatically. Then on subsequent invocations of the program(s) using this module it will compare timestamps on the .py and .pyc and if the .pyc is more recent than the .py, the compilation step will be skipped.
Thanks.