Does the Java Language Specification mandate that Java is compiled to Java byte code?
From what I understand, this is not the case:
Compile time normally consists of translating programs into a machine-independent byte code [representation.
[...]
The Java programming language is normally compiled to the bytecode instruction set and binary format defined in The Java Virtual Machine Specification, Java SE 9 Edition.
(emphasis mine)
I cannot find any other mentions of "byte code" or "bytecode" in the spec.
Does this mean that all bytecode manipulation is technically not covered by "Java the language" as defined by the JLS and technically relying on implementation details?
The JSL don't have to know how it will be readed by the JVM, it only describe the Java Language. The compiler (JAVAC) provided in the JDK do the link, but it is not part of the language itself
In The Java™ Programming Language Compiler,, we can find the same explanation :
So the JAVAC command is mostly the bridge between to specs.
You can find some information by checking in the Jave Virtual Machine Specification.
(I would like to find the opposite statement, that the Java Language knows nothing of the Java Virtual Machine language...)
Later in that specs, we found more information on the class format and how it the language was translated into that instructions list.
.classformat in the next chapter : Chapter 4. The class File Format .