Bicokokodexo

De Wikipedio

Bicokokodexo es nomo por reprezentado di kodexo nedireta uzata da virtuala mashini e kelka kompilili. Lo es formo inter fontokodexo e mashinokodexo.

Exempli[redaktar | redaktar fonto]

Python[redaktar | redaktar fonto]

>>> import dis
>>> dis.dis('print("Saluto, mondo!")')
  1           0 LOAD_NAME                0 (print)
              2 LOAD_CONST               0 ('Saluto, mondo!')
              4 CALL_FUNCTION            1
              6 RETURN_VALUE

Perl[redaktar | redaktar fonto]

Fontokodexo en Perl:

sub hello
{
    print "Saluto, ", $_[0], "\n"
}
$x = "mondo!";
hello($x)

Kompililo di Perl produktis bicokokodexo por chefa funciono:

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]

e por proceduro saluto:

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]

Java[redaktar | redaktar fonto]

Fontokodexo en Java:

outer:
for (int i = 2; i < 1000; i++) {
    for (int j = 2; j < i; j++) {
        if (i % j == 0)
            continue outer;
    }
    System.out.println (i);
}

Kompililo di Java produktis sequanta bicokokodexo:

 0:   iconst_2
 1:   istore_1
 2:   iload_1
 3:   sipush  1000
 6:   if_icmpge       44
 9:   iconst_2
 10:  istore_2
 11:  iload_2
 12:  iload_1
 13:  if_icmpge       31
 16:  iload_1
 17:  iload_2
 18:  irem
 19:  ifne    25
 22:  goto    38
 25:  iinc    2, 1
 28:  goto    11
 31:  getstatic       #84; //Field java/lang/System.out:Ljava/io/PrintStream;
 34:  iload_1
 35:  invokevirtual   #85; //Method java/io/PrintStream.println:(I)V
 38:  iinc    1, 1
 41:  goto    2
 44:  return