рдкрд░реНрд▓ рдореЗрдВ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдкрд░реНрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рджрд░реНрд╢рди рдФрд░ рджрдХреНрд╖рддрд╛ рдХреЗ рдореБрджреНрджреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдФрд░ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ред рдореИрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ - рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд╕рд╛рдеред рдпрджрд┐ рд╡рд┐рд╖рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ - рдореИрдВ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред



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



рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ $hash



- рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ $hash



рд▓рд┐рдВрдХ рд╣реИ, рдФрд░ рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рддреАрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛:
  <рдлрд╝реЙрдиреНрдЯ рд░рдВрдЧ = "рдЧреНрд░реЗ"> $ рд╣реИрд╢ -> {foo} = 456;
 $ рд╣реИрд╢ -> {рдмрд╛рд░} = $ рдмрд╛рд░;
 $ рд╣реИрд╢ -> {рдмрд╛рдЬ} = 'рдмрд╛рдЬ';

 </ Font> 




рдЖрдк рд╣реИрд╢ рд╕реНрд▓рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рддреАрди рд╕реНрдХреЗрд▓рд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рд╕реВрдЪреА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
  <рдлрд╝реЙрдиреНрдЯ рд░рдВрдЧ = "рдЧреНрд░реЗ"> @ $ рд╣реИрд╢ {qw (рдлреВ рдмрд╛рд░ рдмрд╛рдЬ)) = (456, $ рдмрд╛рд░, 'рдмрд╛рдЬ');

 </ Font> 


рдЖрдк рдмрд╕ рд╣реИрд╢ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ( %$hash



рдЕрдВрджрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рддрд╛рдХрд┐ рдЕрдиреНрдп рдлрд╝реАрд▓реНрдб рд╕рд╣реЗрдЬреЗ рдЬрд╛рдПрдВ):
  <рдлрд╝реЙрдиреНрдЯ рд░рдВрдЧ = "рдЧреНрд░реЗ">% $ рд╣реИрд╢ = (% $ рд╣реИрд╢, рдлреВ => 456, рдмрд╛рд░ => $ рдмрд╛рд░, рдмрд╛рдЬ => 'рдмрд╛рдЬ');

 </ Font> 


рдЕрдВрдд рдореЗрдВ, рдЖрдк рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдЕрдХреНрд╕рд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ):
  <font color = "grey"> my% h = (foo => 456, bar => $ bar, baz => 'baz');
 $ рд╣реИрд╢ -> {$ _} = $ h {$ _} qw (рдлреВ рдмрд╛рд░ рдмрд╛рдЬ) рдХреЗ рд▓рд┐рдП;

 </ Font> 


рдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдмрд╛рдд рд▓рд┐рдЦреЗрдВ:
  <font color = "рдЧреНрд░реЗ"> рдирдХреНрд╢рд╛ {$ рд╣реИрд╢ -> {$ _} = $ h {$ _}} qw (рдлреВ рдмрд╛рд░ рдмрд╛рдЬ);

 </ Font> 




рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рд╣реИ? рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ рдЬреЛ рд╣реИрд╢ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреА рдирд┐рд╖реНрдкрд╛рджрди рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ:
  <рдлрд╝реЙрдиреНрдЯ рд░рдВрдЧ = "рдЧреНрд░реЗ"> #! / usr / рдмрд┐рди / рдкрд░реНрд▓

 рд╕рдЦреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
 рдмреЗрдВрдЪрдорд╛рд░реНрдХ qw (cmpthese) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;

 рдореЗрд░реА $ рд╣реИрд╢ = {
	 foo => 'foo',
	 рдмрд╛рд░ => 123,
	 рдмрд╛рдЬ => рдЕрдкрд░рд╛рдЬрд┐рдд,
 };

 рдореЗрд░реЗ $ рдмрд╛рд░ = 'рдмрд╛рд░';

 Cmpthese (
	 -10,
	 {
		 h_direct => рдЙрдк {
			 $ рд╣реИрд╢ -> {foo} = 456;
			 $ рд╣реИрд╢ -> {рдмрд╛рд░} = $ рдмрд╛рд░;
			 $ рд╣реИрд╢ -> {рдмрд╛рдЬ} = 'рдмрд╛рдЬ';
		 }
		 h_list => рдЙрдк {
			 @ $ рд╣реИрд╢ {qw (рдлреВ рдмрд╛рд░ рдмрд╛рдЬ)} = (456, $ рдмрд╛рд░, 'рдмрд╛рдЬ');
		 }
		 h_hash => рдЙрдк {
			 % $ рд╣реИрд╢ = (% $ рд╣реИрд╢, рдлреВ => рекрелрем, рдмрд╛рд░ => $ рдмрд╛рд░, рдмрд╛рдЬ => 'рдмрд╛рдЬ);
		 }
		 h_for => рдЙрдк {
			 my% h = (foo => 456, bar => $ bar, baz => 'baz');
			 $ рд╣реИрд╢ -> {$ _} = $ h {$ _} qw (рдлреВ рдмрд╛рд░ рдмрд╛рдЬ) рдХреЗ рд▓рд┐рдП;
		 }
		 h_forref => рдЙрдк {
			 my $ h = {foo => 456, bar => $ bar, baz => 'baz'};
			 $ рд╣реИрд╢ -> {$ _} = $ h -> {$ _} qw (рдлреВ рдмрд╛рд░ рдмрд╛рдЬ) рдХреЗ рд▓рд┐рдП;
		 }
		 h_map => рдЙрдк {
			 my% h = (foo => 456, bar => $ bar, baz => 'baz');
			 рдирдХреНрд╢рд╛ {$ рд╣реИрд╢ -> {$ _} = $ h {$ _}} qw (рдлреВ рдмрд╛рд░ рдмрд╛рдЬ);
		 }
		 h_mapref => рдЙрдк {
			 my $ h = {foo => 456, bar => $ bar, baz => 'baz'};
			 рдирдХреНрд╢рд╛ {$ рд╣реИрд╢ -> {$ _} = $ h -> {$ _}} qw (рдлреВ рдмрд╛рд░ рдмрд╛рдЬ);
		 }
	 });

 </ Font> 




рдпрд╣рд╛рдБ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:
               рджрд░ h_hash h_forref h_mapref h_for h_map h_list h_direct
 h_hash 100913 / s - -30% -42% -43% -53% -80% -91%
 h_forref 144297 / s 43% - -17% -19% -32% -71% -88%
 h_mapref 174524 / s 73% 21% - -2% -18% -65% -85%
 h_for 177449 тАЛтАЛ/ s 76% 23% 2% - -17% -65% -85%
 h_map 213368 / s 111% 48% 22% 20% - -58% -82%
 h_list 505768 / s 401% 251% 190% 185% 137% - -57%
 h_direct 1169409 / s 1059% 710% 570% 559% 448% 131% -





рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╣реИред рд╣реИрд╢ рд╕реНрд▓рд╛рдЗрд╕ рджреЛ рдмрд╛рд░ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рдбрд┐рдЬрд╛рдЗрди - рдПрдХ рдФрд░ 2-3 рдмрд╛рд░ рдзреАрдорд╛ред рдореИрдк рд▓реВрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рддреЗрдЬ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдбреЗрдЯрд╛ рди рдХреЗрд╡рд▓ рд╣реИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рднреАред рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:
  <рдлрд╝реЙрдиреНрдЯ рд░рдВрдЧ = "рдЧреНрд░реЗ"> #! / usr / рдмрд┐рди / рдкрд░реНрд▓

 рд╕рдЦреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
 рдмреЗрдВрдЪрдорд╛рд░реНрдХ qw (cmpthese) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;

 рдореЗрд░реА $ рд╕реВрдЪреА = ['рдлреВ', 123, рдЕрдкрд╡рд┐рддреНрд░];

 рдореЗрд░реЗ $ рдмрд╛рд░ = 'рдмрд╛рд░';

 Cmpthese (
	 -10,
	 {
		 l_direct => рдЙрдк {
			 $ рд╕реВрдЪреА -> [0] = 456;
			 $ рд╕реВрдЪреА -> [1] = $ рдмрд╛рд░;
			 $ рд╕реВрдЪреА -> [2] = 'рдмрд╛рдЬ';
		 }
		 l_list => рдЙрдк {
			 @ $ рд╕реВрдЪреА [0 .. 2] = (456, $ рдмрд╛рд░, 'рдмрд╛рдЬ');
		 }
		 l_for => рдЙрдк {
			 my @l = (456, $ рдмрд╛рд░, 'рдмрд╛рдЬ');
			 $ рд╕реВрдЪреА -> [$ _] = $ l [$ _] 0 .. 2 рдХреЗ рд▓рд┐рдП;
		 }
		 l_forref => рдЙрдк {
			 рдореЗрд░реЗ $ l = [456, $ рдмрд╛рд░, 'рдмрд╛рдЬ'];
			 $ рд╕реВрдЪреА -> [$ _] = $ l -> [$ _] реж рдХреЗ рд▓рд┐рдП .. реи;
		 }
		 l_map => рдЙрдк {
			 my @l = (456, $ рдмрд╛рд░, 'рдмрд╛рдЬ');
			 рдирдХреНрд╢рд╛ {$ рд╕реВрдЪреА -> [$ _] = $ l [$ _]} 0 .. 2;
		 }
		 l_mapref => рдЙрдк {
			 рдореЗрд░реЗ $ l = [456, $ рдмрд╛рд░, 'рдмрд╛рдЬ'];
			 рдирдХреНрд╢рд╛ {$ рд╕реВрдЪреА -> [$ _] = $ l -> [$ _]} 0 .. 2;
		 }
	 });

 </ Font> 
               рджрд░ l_forref l_for l_mapref l_map l_list l_direct
 l_forref 197498 / s - -11% -17% -38% -65% -86%
 l_for 222737 / s 13% - -6% -30% -60% -84%
 l_mapref 237429 / s 20% 7% - -25% -58% -83%
 l_map 318127 / s 61% 43% 34% - -43% -77%
 l_list 559192 / s 183% 151% 136% 76% - -60%
 l_direct 1395278 / s 606% 526% 488% 339% 150% -





рддреАрди рдорд╢реАрдиреЛрдВ (рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреА рдХреЗ рддрд╣рдд рдбреЗрд╕реНрдХрдЯреЙрдк рдФрд░ рдлреНрд░реАрдмреАрдПрд╕рдбреА рдХреЗ рддрд╣рдд рджреЛ рд╕рд░реНрд╡рд░) рдкрд░ рдкрд░реНрд▓ 5.8.8 рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдХреА рдЧрдИ рдереАред рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛рдПрдВ рдмрджрд▓рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдиреБрдкрд╛рдд рд╣рд░ рдЬрдЧрд╣ рд╕рдорд╛рди рд╣реИред



PS <pre> рдореЗрдВ рд▓рд┐рдкрдЯрд╛ рдХреЛрдб рдпрд╣рд╛рдВ рдХрд┐рд╕реА рддрд░рд╣ рдмрджрд╕реВрд░рдд рджрд┐рдЦрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рдкреНрд░реАрддрд┐рдХрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?



All Articles