Mit diesem Code:
%Vor% Ich bekomme dieses Ergebnis wieder in ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
:
Das sieht widersinnig aus, denn wenn ich rate, würde ich auf "-x" und nicht "-1 * x" setzen, um schneller zu sein.
Warum der Unterschied? Oder habe ich einen großen Fehler in meiner Messung?
Es könnte hilfreich sein, wenn Sie sich den generierten Bytecode ansehen. Wenn Sie es auf etwas Einfaches wie
reduzieren %Vor% Sie können auch #~$ ruby --dump insns -e 'code'
verwenden, um die Befehlssequenz zu drucken (wie von @Stefan ) erwähnt, die tatsächlich ausgegeben wird eine viel sauberere Ausgabe.
Sie werden in der Bytecode-Auflistung feststellen, dass in -1 * a
Ruby ein opt_mult
ist, was im Grunde nur eine arithmetische Operation ist und intern optimiert ist.
Auf der anderen Seite ist das -a
-Bit ein opt_send_without_block
, was ein tatsächlicher Methodenaufruf ist. Meine Vermutung ist, dass die zweite Version (ein bisschen) langsamer ist.
Tags und Links ruby micro-optimization