FAQ
# New Ticket Created by Dave Rolsky
# Please include the string: [perl #127243]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/Ticket/Display.html?id=127243 >


Here's an example which might demonstrate why this is important:

class C {
     has @.threads;
     method foo {
         @!threads = (^10).map: {
             Thread.start(
                 name => $_,
                 sub {
                     sleep 1;
                     say $*THREAD.name;
                 }
             )
         };
         say @!threads;
     };
     submethod DESTROY {
         say 'bye';
         .finish for @!threads;
     };
};

my $c = C.new;
$c.foo;
exit 0;

While there are various workarounds, it seems like that all force the _user_ of the class to explicitly account for the need to cleanup threads created by C. It seems like a class should be fully self-contained and capable of cleaning up after itself.

Search Discussions

  • Elizabeth Mattijsen at Jan 12, 2016 at 8:48 am

    On 12 Jan 2016, at 04:49, Dave Rolsky (via RT) wrote:

    # New Ticket Created by Dave Rolsky
    # Please include the string: [perl #127243]
    # in the subject line of all future correspondence about this issue.
    # <URL: https://rt.perl.org/Ticket/Display.html?id=127243 >


    Here's an example which might demonstrate why this is important:

    class C {
    has @.threads;
    method foo {
    @!threads = (^10).map: {
    Thread.start(
    name => $_,
    sub {
    sleep 1;
    say $*THREAD.name;
    }
    )
    };
    say @!threads;
    };
    submethod DESTROY {
    say 'bye';
    .finish for @!threads;
    };
    };

    my $c = C.new;
    $c.foo;
    exit 0;

    While there are various workarounds, it seems like that all force the _user_ of the class to explicitly account for the need to cleanup threads created by C. It seems like a class should be fully self-contained and capable of cleaning up after itself.
    At exit, all threads are cleaned up automatically anyway, so I don’t really think this is a problem in *this* case.

    More generally, I think it would be nice if an import would be able to import a LEAVE phaser into the scope: this then would allow code to be executed whenever the importing scope would be left (which an exit would do).

       $ 6 'LEAVE say "goodbye"; exit’
       $ 6 'LEAVE say "goodbye"’
       goodbye

    OTOH, it looks like exit() is not honouring LEAVE phasers either… hmmmm….



    Liz

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupperl6-compiler @
categoriesperl
postedJan 12, '16 at 3:49a
activeJan 12, '16 at 8:48a
posts2
users2
websiteperl6.org

People

Translate

site design / logo © 2018 Grokbase