рдореИрдВ рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдпрд╣ PHP рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдореИрдВ рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ PHP рдХреЛрдб рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╛ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╕реА рдореЗрдВред рдпрд╛ рдХреБрдЫ рдФрд░ред рд╕реВрдЪреА рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд╣ рднрд╛рдЧ рдЬреЛ "PHP рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ" рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдм рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ:





рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рд╣реИрдмрд░рдХреЛрдЯ рдХреЗ рддрд╣рддред



рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрджрд╛рд╣рд░рдг:



( display "Hello, world!\n")







рдпрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓:



( define (- -)

( lambda () ( display -)))

( define - ( - "!\n"))

( - )








рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИред PHP рдореЗрдВ, рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ (рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ):



function _($_) {

return function () {

print $_;

}

}

$_ = _ ("!\n");

$ _ ();








рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЬреАрдердм рдкрд░ рдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЯреЗрд╕реНрдЯ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ



* рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ (рдЙрджрд╛рд╣рд░рдг "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛")

* рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ (рддрдереНрдпрд╛рддреНрдордХ, рджрдВрддрдХрдерд╛рдПрдВ, рдПрдХрд░рдореИрди)

* рд╕рд░реНрдХрд┐рдЯ

* рдирд┐рд░рдВрддрд░рддрд╛



рд╕рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред R5RS рдорд╛рдирдХ рдХреЗ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрдХ, рдпрд╣ рдХреЗрд╡рд▓ рдЖрджрд┐рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдЕрд░реЗ рд╣рд╛рдБ, рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдореЗрд░рд╛ рдЫрджреНрдо рдХреЛрдб рдпреЛрдЬрдирд╛ R5RS рднрд╛рд╖рд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред



рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдореИрдВ Gambit рд╕реНрдХреАрдорд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░-рд╕реНрдЯреИрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди GVM ( рдХреБрд╢рд▓ рдпреЛрдЬрдирд╛ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдЖрднрд╛рд╕реА рдорд╢реАрди ) рд╣реИред рдЬрдм GVM рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рдпрд╣ рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдмрди рдЬрд╛рддрд╛ рд╣реИ:



; +N: N

; -N: N

; : +1, +2 ..

; +1

; continuation-passing style, - +0

; , escape sequences

;

; #1


#1 0 entry-point 0 ()

; "-"

|~#-| = '#<procedure |~#-|>

-1 = +0

+1 = '"!\n"

+0 = #3

; #2

jump* 4 #2

#2 4

; . +0 #3, , +1 ()

jump$ 4 |~#-| 1

#3 4 return-point

|~#-| = +1

+0 = -1

jump* 4 #4

#4 4

jump$ 0 |~#-| 0



**** #<procedure |~#-|> =

#1 0 entry-point 1 ()

; --

close -1 = (#2 +1)

+1 = -1

jump 0 +0

;

#2 0 closure-entry-point 0 ()

; +4 , +4(1) --

+1 = +4(1)

jump* 0 #3

#3 0

jump$ 0 display 1









GVM рдХреЛ PHP рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо:



function glo_x20hellowr () {

global $reg0, $reg1, $reg2, $reg3, $reg4, $pc, $fp, $stack, $nargs;

$ GLOBALS['glo_-'] = 'glo__';

$ stack[$fp+1] = $reg0;

$ reg1 = "!\n";

$ reg0 = 'lbl_x20hellowr_3';

$ pc = 'lbl_x20hellowr_2';

$ fp = $fp+4;

}

function lbl_x20hellowr_2 () {

global $reg0, $reg1, $reg2, $reg3, $reg4, $pc, $fp, $stack, $nargs;

$nargs = 1;

$ pc = $GLOBALS['glo_-'];

}

function lbl_x20hellowr_3 () {

global $reg0, $reg1, $reg2, $reg3, $reg4, $pc, $fp, $stack, $nargs;

$ GLOBALS['glo_-'] = $reg1;

$ reg0 = $stack[$fp-3];

$ pc = 'lbl_x20hellowr_4';

}

function lbl_x20hellowr_4 () {

global $reg0, $reg1, $reg2, $reg3, $reg4, $pc, $fp, $stack, $nargs;

$nargs = 0;

$ pc = $GLOBALS['glo_-'];

$ fp = $fp-4;

}

// procedure - =

function glo__ () {

global $reg0, $reg1, $reg2, $reg3, $reg4, $pc, $fp, $stack, $nargs;

$ stack[$fp+1] = array('lbl___2', $reg1);

$ reg1 = $stack[$fp+1];

$ pc = $reg0;

}

function lbl___2 () {

global $reg0, $reg1, $reg2, $reg3, $reg4, $pc, $fp, $stack, $nargs;

$ reg1 = $reg4[1];

$ pc = 'lbl___3';

}

function lbl___3 () {

global $reg0, $reg1, $reg2, $reg3, $reg4, $pc, $fp, $stack, $nargs;

$nargs = 1;

$ pc = $GLOBALS['glo_display'];

}

exec_scheme_code(' glo_x20hellowr ');









1) рдЧреЛрдЯреЛ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП?




рдкреНрд░рддреНрдпреЗрдХ GVM рдмреНрд▓реЙрдХ (рд▓реЗрдмрд▓ рд╕реЗ рд╕рдВрдХреНрд░рдордг рддрдХ) рдПрдХ PHP рдлрд╝рдВрдХреНрд╢рди рдмрди рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЧреЛрдЯреЛ рдХреЛ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрдХ "exec_scheme_code ($ pc)" рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



$ reg0 = 'glo_exit';

рдЬрдмрдХрд┐ (1) {

$ рдкреАрд╕реА = $ рдкреАрд╕реА ()

}



рд╕рдВрдХрд▓рдХ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рджреБрднрд╛рд╖рд┐рдпрд╛ рдпрд╣рд╛рдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рджрд░реНрд╢рди рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИрдВред



рд╡реИрдХрд▓реНрдкрд┐рдХ?



2) рд╕реБрдкрд░рдЧреНрд▓реЛрдмрд▓реНрд╕




рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдорд╛рди рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рд╢рд╛рдпрдж PHP рдХреЛ рдмрддрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИрдВ?



3) рдвреЗрд░




рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реНрдЯреИрдХ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдПрдХ рд╕рд░рдгреА рд▓реАред рдФрд░ рдореБрдЭреЗ рдХреБрдЫ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рдерд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╣рдореЗрд╢рд╛ рд╕рд╣рдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ, рджрд┐рд▓рдЪрд╕реНрдк рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рдо рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред



рдХреИрд╕реЗ рдХрд░реЗрдВ рддреЗрдЬ рд╕реНрдЯреИрдХ?



4) рдкреНрд░рджрд░реНрд╢рди




рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдРрд╕реЗ PHP рдХреЛрдб рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХрд░рдореИрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдореИрдиреБрдЕрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдпрд╣ 30 рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ (рдЕрдВрдбрд░-рдЧреЛрдЯреЛ рдФрд░ рд╕реНрдЯреИрдХ) рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред



рдХреНрдпрд╛ рдЙрдкрдХрд░рдг рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?



All Articles