Performance: Difference between revisions

Jump to navigation Jump to search
122 bytes added ,  22 May 2012
Adding syntax highlight
(Created page with "Things to consider when writing octave code to have good performance. They relate to how the interpreter works. == Writing functions == === Default arguments === It is possib...")
 
(Adding syntax highlight)
Line 5: Line 5:
It is possible to set [http://www.gnu.org/software/octave/doc/interpreter/Default-Arguments.html default values] when declaring the function arguments. This defaults can be the result of a computation, maybe even using the other arguments:
It is possible to set [http://www.gnu.org/software/octave/doc/interpreter/Default-Arguments.html default values] when declaring the function arguments. This defaults can be the result of a computation, maybe even using the other arguments:


{{Code|Defining argument defaults|<pre>
{{Code|Defining argument defaults|<syntaxhighlight lang="matlab" style="font-size:13px">
function foo (arg1, arg2 = heavyfoo (arg1))
function foo (arg1, arg2 = heavyfoo (arg1))
   ## code
   ## code
endfunction
endfunction
</pre>}}
</syntaxhighlight>}}


One could think of setting defaults inside a condition checking the value of {{Codeline|nargin}} to avoid computing heavyfoo. However the interpreter will not generate the default value if the value is already given so it ends up being the same thing. That is, don't try to be smart, the interpreter already is, and write defaults on the list of arguments for code that is shorter and easier to read.
One could think of setting defaults inside a condition checking the value of {{Codeline|nargin}} to avoid computing heavyfoo. However the interpreter will not generate the default value if the value is already given so it ends up being the same thing. That is, don't try to be smart, the interpreter already is, and write defaults on the list of arguments for code that is shorter and easier to read.


{{Code|Proof that interpreter does not compute defaults unless needed|<pre>
{{Code|Proof that interpreter does not compute defaults unless needed|<syntaxhighlight lang="matlab" style="font-size:13px">
function defaults_at_list (arg = rand (10000))
function defaults_at_list (arg = rand (10000))
   ## just a simple operation
   ## just a simple operation
Line 30: Line 30:
t = cputime (); defaults_at_list (a); t_list = cputime () - t
t = cputime (); defaults_at_list (a); t_list = cputime () - t
t = cputime (); defaults_at_cond (a); t_cond = cputime () - t
t = cputime (); defaults_at_cond (a); t_cond = cputime () - t
</pre>}}
</syntaxhighlight>}}


=== Function arguments (lazy copying) ===
=== Function arguments (lazy copying) ===
657

edits

Navigation menu