Programowanie

Kod bajtowy

Kod bajtowy

Kod bajtowy (ang. bytecode) – nazwa reprezentacji kodu używanej przez maszyny wirtualne, oraz przez niektóre kompilatory. Kod składa się z ciągu instrukcji (których opcode'y mają zwykle długość jednego bajta, stąd nazwa), które nie odpowiadają bezpośrednio instrukcjom procesora i mogą zawierać instrukcje wysokiego poziomu (takie jak np. stwórz obiekt klasy X, połącz dwa łańcuchy itd.), jednak w przeciwieństwie do kodu źródłowego wymagają analizy tylko pojedynczych poszczególnych operacji.

W przeciwieństwie do maszyn fizycznych, które prawie zawsze są maszynami rejestrowymi, większość (choć nie wszystkie) maszyn wirtualnych to maszyny stosowe.

[edytuj] Języki i środowiska wykorzystujące kod pośredni

Do najbardziej znanych języków programowania wykorzystujących kod pośredni zaliczyć można:

[edytuj] Przykład

(kod bajtowy Perla)

Następujący program:

sub hello
{
        print "Hello, ", $_[0], "\n"
}

$x = "world!";
hello($x)

generuje kod pośredniczący funkcji głównej:

OP     (0x815e2b0) enter
COP    (0x8168838) nextstate
SVOP   (0x81c9e20) const [5] PV (0x8165508) "world!"
PADOP  (0x8168950) gvsv  GV (0x814ccd4) *x
BINOP  (0x8168810) sassign
COP    (0x81688b8) nextstate
OP     (0x815e270) pushmark
PADOP  (0x81697f8) gvsv  GV (0x814ccd4) *x
PADOP  (0x8168d80) gv  GV (0x814cce0) *hello
UNOP   (0x815e290) entersub [4]
LISTOP (0x8150990) leave [1]

oraz procedury hello:

COP    (0x8150958) nextstate
OP     (0x81508a8) pushmark
SVOP   (0x8150998) const [3] PV (0x81654f8) "Hello, "
PADOP  (0x8168a00) aelemfast  GV (0x814cbc0) *_
SVOP   (0x8150900) const [4] PV (0x816551c) "\n"
LISTOP (0x8168a58) print
UNOP   (0x81687b0) leavesub [1]