In che modo Bytecode è "analizzato"?
Ho capito che Bytecode è una rappresentazione binaria e intermedia della sintassi di un determinato linguaggio di programmazione. Alcuni linguaggi di programmazione convertono il loro testo sorgente in Bytecode che viene poi scritto in un file. In che modo le macchine virtuali di quelle lingue "analizzano" il loro Bytecode?
Per limitare questa domanda, prendi il Bytecode di Python per esempio. Quando Python Virtual Machine inizia a leggere il Bytecode da un file *.pyc
, in che modo la Virtual Machine traduce il flusso di byte che sta leggendo, in istruzioni specifiche?
Quando la Virtual Machine legge bytecode da un file, sono a conoscenza del fatto che il bytecode è un lungo flusso di byte. In che modo, quindi, il bytecode viene suddiviso in blocchi utili? Come viene trasformato in un codice operativo e gli argomenti opcode?
Ad esempio, supponiamo che la macchina virtuale stia leggendo nel bytecode per aggiungere due numeri. La Virtal Machine vede l'istruzione 0x05
, che significherebbe "aggiungi due numeri".
Ogni numero può essere rappresentato da un diverso numero di byte, quindi come dovrebbe la macchina virtuale sapere quanti byte avrebbe bisogno di leggere in anticipo per raccogliere gli argomenti per l'op 0x05
?