ETOOBUSY 🚀 minimal blogging for the impatient
PWC142 - Sleep Sort
TL;DR
On with TASK #2 from The Weekly Challenge #142. Enjoy!
The challenge
Another joke sort similar to JortSort suggested by champion
Adam Russell.You are given a list of numbers.
Write a script to implement
Sleep Sort. For more information, please checkout this post.
The questions
Oh! Where do I st…
It’s a joke, you old t**t!
AHEM no questions!
The solution
We’ll use fork in Perl because… well, I like it. This is very
bare-bones, stuff is printed out by each child directly and it works
because they all share the same standard output channel.
#!/usr/bin/env perl
use v5.24;
use warnings;
use experimental 'signatures';
no warnings 'experimental::signatures';
for my $n (@ARGV) {
defined(my $pid = fork()) or die "fork(): $!\n";
next if $pid;
sleep $n;
say $n;
exit 0;
}
wait for 1 .. @ARGV;
To make sure to wait for all children to finish, we just… wait for
all of them.
This cannot be immediately translated into Raku because there’s no
valuable fork. The page on concurrency gets the job done on
getting us started though:
#!/usr/bin/env raku
use v6;
sub MAIN (*@args) {
await @args.map: -> $x { Promise.in($x).then({$x.put}) }
}
The in part sets the timer, and then we just print. We might just as
easily take, anyway. Again, we wait (well, await) at the end for all
promises to have completed before exiting the main thread.
I guess this is it… stay safe and have -Ofun!