ObjectScript - рдПрдХ рдирдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛, рдЬреЛ PHP рдФрд░ JS рд╕реЗ рддреЗрдЬ рд╣реИ

ObjectScript рдПрдХ рдирдпрд╛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдмрд╣реБрдд рд╣рд▓реНрдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рд╣реИред ObjectScript рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд▓реБрдЖ рдФрд░ PHP рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реВрдЖ рд╕реЗ рдХрдИ рдХрд╛рдо, PHP рд╕реЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

ObjectScript 0.97-vm2 рдХреНрд░рдорд╢рдГ PHP 5.3.3 рдФрд░ JS рд╕реЗ 34% рдФрд░ 61% рд╕реЗ рдЕрдзрд┐рдХ рддреЗрдЬрд╝ рд╣реИред

рдХреИрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛


рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдлреЗрдирдХрдЪ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд░реАрдХреНрд╖рдг, рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди, рдЬрдм рдкреИрд░рд╛рдореАрдЯрд░ 1 рд╕реЗ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЧрдгрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓рдЧрднрдЧ 10 рдЧреБрдирд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдкрд░реАрдХреНрд╖рдг рдкрд░ рдХрдо рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмреЗрд╣рддрд░ред

Fannkuch ObjectScript рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкреВрд░реНрдг рд╕реНрд░реЛрдд:

print arg var fannkuch = function(n) { var p, q, s, sign, maxflips, sum = [], [], [], 1, 0, 0 var i for(i=1; i<=n; i++) p[i], q[i], s[i] = i, i, i for(;;){ // Copy and flip. var q1 = p[1] // Cache 1st element. if(q1 != 1){ for(i=2; i<=n; i++) q[i] = p[i] // Work on a copy. var flips = 1 for(;;){ var qq = q[q1] if(qq == 1){ // ... until 1st element is 1. sum = sum + sign*flips if(flips > maxflips){ maxflips = flips } // New maximum? break } q[q1] = q1 if(q1 >= 4){ var i, j = 2, q1 - 1 for(;;){ q[i], q[j] = q[j], q[i]; if(++i >= --j) break } } q1 = qq; flips++ } } // Permute. if(sign == 1){ p[2], p[1] = p[1], p[2] sign = -1 // Rotate 1<-2. }else{ p[2], p[3] = p[3], p[2] sign = 1 // Rotate 1<-2 and 1<-2<-3. for(i = 3;; i++){ // print "mark 4" var sx = s[i] if(sx != 1){ s[i] = sx-1 break } if(i == n) return sum, maxflips; // Out of permutations. s[i] = i // Rotate 1<-...<-i+1. var t = p[1] for(var j = 1; j <= i; j++){ p[j] = p[j+1] } p[i+1] = t } } } } var n = numberof(arg && arg[1]) || 5 var start_time = getTimeSec() var sum, flips = fannkuch(n) echo( sum"\n" "Pfannkuchen("n") = "flips"\n" "time = ", (getTimeSec() - start_time)"\n" ) 

PHP рдореЗрдВ, рдкреВрд░реНрдг рд╕реНрд░реЛрдд:

 <?php function fannkuch($n) { $p = array(); $q = array(); $s = array(); $sign = 1; $maxflips = $sum = 0; for($i=1; $i<=$n; $i++) $p[$i] = $q[$i] = $s[$i] = $i; for(;;){ // Copy and flip. $q1 = $p[1]; // Cache 1st element. if($q1 != 1){ for($i=2; $i<=$n; $i++) $q[$i] = $p[$i]; // Work on a copy. $flips = 1; for(;;){ $qq = $q[$q1]; if($qq == 1){ // ... until 1st element is 1. $sum += $sign*$flips; if($flips > $maxflips){ $maxflips = $flips; } // New maximum? break; } $q[$q1] = $q1; if($q1 >= 4){ $i = 2; $j = $q1 - 1; for(;;){ $tmp = $q[$i]; $q[$i] = $q[$j]; $q[$j] = $tmp; if(++$i >= --$j) break; } } $q1 = $qq; $flips++; } } // Permute. if($sign == 1){ $tmp = $p[2]; $p[2] = $p[1]; $p[1] = $tmp; $sign = -1; // Rotate 1<-2. }else{ $tmp = $p[2]; $p[2] = $p[3]; $p[3] = $tmp; $sign = 1; // Rotate 1<-2 and 1<-2<-3. for($i = 3;; $i++){ $sx = $s[$i]; if($sx != 1){ $s[$i] = $sx-1; break; } if($i == $n) return array($sum, $maxflips); // Out of permutations. $s[$i] = $i; // Rotate 1<-...<-i+1. $t = $p[1]; for($j = 1; $j <= $i; $j++){ $p[$j] = $p[$j+1]; } $p[$i+1] = $t; } } } } function getTimeSec(){ list($usec, $sec) = explode(" ",microtime()); return ($usec + $sec); } $n = isset($argv[1]) ? $argv[1] : 5; echo "n: $n\n"; $start_time = getTimeSec(); $r = fannkuch($n); $sum = $r[0]; $flips = $r[1]; echo("$sum\nPfannkuchen($n) = $flips\n" . "time = ".(getTimeSec() - $start_time)."\n"); 

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдкреВрд░реНрдг рд╕реНрд░реЛрдд:

 var fannkuch = function(n) { var p = [], q = [], s = [], sign = 1, maxflips = 0, sum = 0; var i; for(i=1; i<=n; i++) p[i] = q[i] = s[i] = i; for(;;){ // Copy and flip. var q1 = p[1]; // Cache 1st element. if(q1 != 1){ for(i=2; i<=n; i++) q[i] = p[i]; // Work on a copy. var flips = 1; for(;;){ var qq = q[q1]; if(qq == 1){ // ... until 1st element is 1. sum = sum + sign*flips; if(flips > maxflips){ maxflips = flips; } // New maximum? break; } q[q1] = q1; if(q1 >= 4){ var i = 2, j = q1 - 1 for(;;){ var tmp = q[i]; q[i] = q[j]; q[j] = tmp; if(++i >= --j) break; } } q1 = qq; flips++; } } // Permute. if(sign == 1){ var tmp = p[2]; p[2] = p[1]; p[1] = tmp; sign = -1; // Rotate 1<-2. }else{ var tmp = p[2]; p[2] = p[3]; p[3] = tmp; sign = 1; // Rotate 1<-2 and 1<-2<-3. for(i = 3;; i++){ // print "mark 4" var sx = s[i]; if(sx != 1){ s[i] = sx-1; break; } if(i == n) return [sum, maxflips]; // Out of permutations. s[i] = i; // Rotate 1<-...<-i+1. var t = p[1]; for(var j = 1; j <= i; j++){ p[j] = p[j+1]; } p[i+1] = t; } } } } function getTimeSec(){ var d = new Date(); return (d.getTime() + d.getMilliseconds() / 1000.0) / 1000.0; } var n = 10; var start_time = getTimeSec(); var r = fannkuch(n); var sum = r[0], flips = r[1]; WScript.Echo( sum,"\n", "Pfannkuchen(",n,") = ",flips,"\n", "time = ",(getTimeSec() - start_time),"\n" ) 

рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рд╡рд┐рдВрдбреЛрдЬ 7, рд╕реАрдкреАрдпреВ рдХреЛрд░ i7 2630QM 2Ghzред рдлрдиреНрдиреЗрдЪреБрдХ рдиреЗ рдкреИрд░рд╛рдореАрдЯрд░ 10 рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ред

ObjectScript 0.97-vm2 рд░рд┐рд▓реАрдЬрд╝ рдбрдмрд▓ рдиреНрдпреВрдореЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ (рдлреНрд▓реЛрдЯ рдХреЗ рд╕рд╛рде рдпрд╣ рд▓рдЧрднрдЧ 10% рддреЗрдЬрд╝реА рд╕реЗ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рд▓реЗрдЦ рдореЗрдВ рдирд╣реАрдВ рджреЗрддрд╛, рдХреНрдпреЛрдВрдХрд┐ PHP рдФрд░ JS рдореЗрдВ рдбрдмрд▓ рдбрдмрд▓ рдирдВрдмрд░ рд╣реИ, PHP рдореЗрдВ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рднреА рд╣реИ:

 c:\Sources\OS\bin\os.exe test_fannkuch.os 10 

рдЖрдЙрдЯрдкреБрдЯ (рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдордп 10 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдФрд╕рдд рд╣реИ):

 73196 Pfannkuchen(10) = 38 time = 20.0991 

PHP 5.3.3:

 c:\WebServers\usr\bin\php5.exe test_fannkuch.php 10 

рдЖрдЙрдЯрдкреБрдЯ (рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдордп 10 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдФрд╕рдд рд╣реИ):

 73196 Pfannkuchen(10) = 38 time = 26.853 

JS (рдкреИрд░рд╛рдореАрдЯрд░ 10, test_fannkuch.js рдХреЗ рдЕрдВрджрд░ рд╣реИ):

 Cscript.exe test_fannkuch.js 

рдЖрдЙрдЯрдкреБрдЯ (рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдордп 10 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдФрд╕рдд рд╣реИ):

 73196 Pfannkuchen( 10 ) = 38 time = 32.3313 

рд╕рд╛рд░рд╛рдВрд╢ рдбреЗрдЯрд╛


рд╕рдордп рдЬрд┐рддрдирд╛ рдХрдо рд╣реЛрдЧрд╛, рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдСрдмреНрдЬреЗрдХреНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ - 20.099 рд╕реЗрдХрдВрдб
PHP - 26.853 рд╕реЗрдХрдВрдб
рдЬреЗрдПрд╕ - 32.331 рд╕реЗрдХрдВрдб

рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордп 20.099 рд▓реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрдо рдХрд░реЗрдВ:


рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , proj.win32 \ example.sln , profile_benchmark рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВред

рдСрдмреНрдЬреЗрдХреНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ


OOP - рд╡рд╣рд╛рдБ рд╣реИ
рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп - рд╣реИ
рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ рд╣реИрдВ
рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ - рддреНрд░рд┐-рд░рдВрдЧ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣
рдмрд╛рдЗрдЯреЗрдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рди - рд╣рд╛рдБ
рд╕рдВрдХрд▓рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ - рд╣рд╛рдБ
рдореЙрдбреНрдпреВрд▓рд░рд┐рдЯреА - рд╣реИ
рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ - рд╣рд╛рдБ
рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо - рд╣реИ
C / C ++ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг - рд╣реИ
рд╕реНрд░реЛрдд - рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд
рд▓рд╛рдЗрд╕реЗрдВрд╕ - MIT (рдореБрдлреНрдд рдореЗрдВ рдХрд┐рд╕реА рднреА рдЙрддреНрдкрд╛рдж рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд▓реБрдЖ рдФрд░ PHP рд╕реЗ рдЙрдзрд╛рд░ рд▓реА рдЧрдИ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░
рднрд╛рд╖рд╛ рдХреЗ рд▓рдХреНрд╖реНрдп рдФрд░ рдЙрджреНрджреЗрд╢реНрдп: рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдЧреЗрдо рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдЬрд┐рдХ, рдХреНрд░реЙрд╕ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА, рд╡реЗрдм рдФрд░ рд╕рд░реНрд╡рд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ
рд▓реЗрдЦрдХ - рдПрд╡рдЧреЗрдиреА рдЧреЛрд▓реЛрд╡рд┐рди (рдбреЗрд╡рд▓рдкрд░ oxsar.ru рдФрд░ рдЕрдиреНрдп)
ObjectScript рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╕рдордп - 2 рдорд╣реАрдиреЗ

ObjectScript рд╡рд┐рдХрд╛рд╕ рдФрд░ рд╕рдВрд╡рд░реНрдзрди


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

рдмрд╣реБрдд рдЦреБрд╢реА рдХреЗ рд╕рд╛рде рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдиреМрдХрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдУрдПрд╕ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдПрдкреАрдЖрдИ рд▓рдкреЗрдЯреВрдВрдЧрд╛ :)

рдкреБрдирд╢реНрдЪ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдирд┐рд╡реЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╣рдпреЛрдЧ рдФрд░ рд╕рд┐рд░реНрдл рдорд╛рдорд▓реЛрдВ рдкрд░, рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ evgeniy.golovin [AT] Unitpoint.ru рдкрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ

ObjectScript рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреНрдп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓реЗрдЦ:

Source: https://habr.com/ru/post/In153455/


All Articles