Nickel: Performanceunterschied oder nur Schreibersparnis?

Hi,
sind folgende Statements gleichwertig?

1.
$a = "";
$b = "";
....
$z = "";

und
2.
$a = $b = ....... = $z = "";

  1. Hi Nickel!

    sind folgende Statements gleichwertig?

    Das zweite ist schneller. Aber wofür brauchst du sowas? Wären Arrays nicht vorteilhafter?

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hi Nickel!

      sind folgende Statements gleichwertig?
      Das zweite ist schneller. Aber wofür brauchst du sowas? Wären Arrays nicht vorteilhafter?

      Auf meinem System ist Variante 1 schneller als variante 2. Beide aber sind langsamer als Variante 3.

        
      #!C:/Programme/Perl/bin/perl.exe -w  
      #  
      use strict;  
        
      BEGIN {  
       use CGI::Carp qw(carpout);  
       open(LOG, ">>error.txt")  or  die "Unable to append to error.txt: $!\n";  
       carpout(*LOG);  
      }  
      use Benchmark;  
      print "benchmark\n";  
        
      my($v,$w,$x,$y,$z);  
        
      timethese( 5000000, { one => 'mysub1', two => 'mysub2', three => 'mysub3', } );  
      print "\n";  
      sleep(20);  
      sub mysub1{  
       $v=""; $w=""; $x=""; $y=""; $z="";  
      }  
        
      sub mysub2{  
       $v = $w = $x = $y = $z = "";  
      }  
        
      sub mysub3{  
       ( $v, $w, $x, $y, $z ) = ("", "", "", "", "" );  
      }  
        
      exit 0;  
      
      

      mfg Beat;

      --
      Woran ich arbeite:
      X-Torah
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      1. Hi Beat!

        Asche über mein Haupt. Ich bin von PHP ausgegangen.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  2. Hi,
    sind folgende Statements gleichwertig?

    $a = "";
    $b = "";
    ....
    $z = "";

    und
    2.
    $a = $b = ....... = $z = "";

    oder 3.
    my ($c,$d,$e,$f) = ("","","","");

    PS: $a und $b sind reservierte vorderfinierte Variablen. Verwende sie nur für sort()

    Deine Versionen sind gleichwertig.

    Ich bevorzuge zudem die erste Variante wegen der Klarheit, vor allem bei globalen Initialisierungen.

    mfg Beat

    --
    Woran ich arbeite:
    X-Torah
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
  3.   
    var alphabet = new Array();  
      
    ... array wird mit allen Buchstaben initialisiert ...  
      
    // Zurücksetzen  
    alphabet = new Array();  
      
    // oder  
      
    for(key in alphabet) {  
      alphabet[key] = "";  
    }  
    
    

    Das ist glaube ich ratsamer als deine Variante(n).

    Gruss

    1. EDIT: Sorry, habe irrtürmlich in JavaScript den Beipsiel gezeigt.
      In Perl ist es halt so ähnlich, von der Logik her gleich.

  4. sind folgende Statements gleichwertig?

    Was willst du konkret Wissen?

    Selbst wenn eine dieser Schreibweisen eine Zweitersparnis bedeuten würde, so läge diese auf einem Handelüblichen Rechner, der nach 1990 gebaut wurde, nur bei wenigen Milli- (vermutlich sogar eher Mikro-)sekunden. Machst du dir wirklich Gedanken ob du hier in dem Fall 1 Mikrosekunde einsparst?
    Ich vermute du bist ein extrem sparsamer Autofahrer.

    Struppi.

    1. sind folgende Statements gleichwertig?

      Was willst du konkret Wissen?

      Selbst wenn eine dieser Schreibweisen eine Zweitersparnis bedeuten würde, so läge diese auf einem Handelüblichen Rechner, der nach 1990 gebaut wurde, nur bei wenigen Milli- (vermutlich sogar eher Mikro-)sekunden. Machst du dir wirklich Gedanken ob du hier in dem Fall 1 Mikrosekunde einsparst?
      Ich vermute du bist ein extrem sparsamer Autofahrer.

      Wenn eine Routine 1000mal aufgerufen wird, ist das legitim.

      mfg Beat

      --
      Woran ich arbeite:
      X-Torah
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      1. Yerf!

        Wenn eine Routine 1000mal aufgerufen wird, ist das legitim.

        Dann sollte man eher überlegen, ob man überhaupt soviele Variablen initialisieren muss...

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
        1. Wenn eine Routine 1000mal aufgerufen wird, ist das legitim.
          Dann sollte man eher überlegen, ob man überhaupt soviele Variablen initialisieren muss...

          Du hast bei
            my ($u,$v) = ("","");
          bereits einen bemerkbaren Vorteil gegenüber den anderen zwei Varianten
          Der Vorteil wächst mit jeder zusätzlichen Variable. Es ist eher eine konzeptionelle Stilfrage, welche sich potentiell ausbezahlt.
          Allerdings würde ich dies nur in Subfunktionen einsetzen, nie in globalen Initialisierungsschritten.

          mfg Beat

          --
          Woran ich arbeite:
          X-Torah
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          1. Du hast bei
              my ($u,$v) = ("","");
            bereits einen bemerkbaren Vorteil gegenüber den anderen zwei Varianten

            Das bezweifle ich, du hast in deinem Test ja das my ausgelagert, in sofern ist der Benchmark nicht so aussagekräftig. Wenn du die my Deklaration in die Sub packst, sind die Unterschiede gering

            Allerdings würde ich dies nur in Subfunktionen einsetzen, nie in globalen Initialisierungsschritten.

            Wo sie eben noch weniger eine Auswirkung hat. Mikrosekunden sparen zu wollen ist absoluter overkill, vor allem wenn es auf Kosten der Lesbarkeit geht.

            Struppi.

      2. Wenn eine Routine 1000mal aufgerufen wird, ist das legitim.

        Findest du? Wenn du deinen Benchmark mal mit lexikalischen Variabeln machst, schrumpft der Unterschied und selbst wenn du eine Funktion 10.000 mal aufrufst, wird die Ersparnis durch eine bestimmte Schreibweise hier an der Stelle so gering sein, das sie innerhalb eine Meßfehlers liegt.

        Struppi.