Brent,

Thanks for the rapid response, but it does not really answer the intent of the question.

Essentially, you said that one style provides for a silent default, the other does not. The intent of the question is about performance - as in the subject line.

Perhaps the word 'style' is mal-chosen, perhaps 'coding idiom' ?

Style 1 can be adjusted to have an explicit default, eg.

multi sub handle ( $node ) { 'I dont care' }

Style 2

given .... { ... default { 'I dont care' } }


So, since these 'styles' / 'coding idioms' use different mechanisms to achieve the same intended result (if necessary, I can re-work the examples to get the same result), there must be different performance effects.

Which coding idiom is better in performance terms?

May be my question is "incorrect", in which case what is the implicit assumption I am making that should be explicit?


On 16/11/2018 12:13, Brent Laabs wrote:
They do two different things.  Style 1 will throw a dispatch error if $node.name <http://node.name> has a value of 'three', where Style 2 will do nothing in that case.

On Thu, Nov 15, 2018 at 7:55 PM Richard Hainsworth <rnhainswo...@gmail.com <mailto:rnhainswo...@gmail.com>> wrote:

    Suppose I have a sub called C<handle> that runs different code
    depending
    on the content of an argument.

    There are two styles in Perl 6 to code this and my question is
    whether
    one is more efficient (speed/memory) than the other.

    In this example, one relies on multiple dispatch, while the other an
    explicit control statement.

    Putting aside clarity considerations, is there any performance
    reason to
    prefer one style over another?

    Style 1

    multi sub handle( $node WHERE *.name ~~ 'one' ) {

         'this is a wonderful sub'

    }

    multi sub handle( $node WHERE *.name ~~ 'two' ) {

        'twas brillig and the slivy toves did gyre'

    }


    Style 2

    sub handle ( $node ) {

         given $node.name <http://node.name> {

             when 'one' { 'this is a wonderful sub' }

             when 'two' { 'twas brillig and the slivy toves did gyre' }

         }

    }

Reply via email to