perl 6 for concurrency and parallel computing

152
Perl 6 for Concurrency and Parallel Computing

Upload: andysh

Post on 15-Jul-2015

425 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Perl 6 for Concurrency and Parallel Computing

Perl 6 for Concurrency and Parallel Computing

Page 2: Perl 6 for Concurrency and Parallel Computing

or

Page 3: Perl 6 for Concurrency and Parallel Computing

Parallel Features of Perl 6

Page 4: Perl 6 for Concurrency and Parallel Computing

The Parallel Features of the Perl Six

Page 5: Perl 6 for Concurrency and Parallel Computing

Parallel Futuresof Perl 6

Page 6: Perl 6 for Concurrency and Parallel Computing

Foreword

Page 7: Perl 6 for Concurrency and Parallel Computing

Interviews for Pragmatic Perl in 2013–2015

Page 8: Perl 6 for Concurrency and Parallel Computing
Page 9: Perl 6 for Concurrency and Parallel Computing

What is the most important feature of the programming languages in the future?

Q:

Page 10: Perl 6 for Concurrency and Parallel Computing

I don’t knowA:

No idea (2 answers)

Page 11: Perl 6 for Concurrency and Parallel Computing

There’s no good answerA:

No idea (2 answers)

Page 12: Perl 6 for Concurrency and Parallel Computing

Natural-like languageA:

Syntax features (1/3)

Page 13: Perl 6 for Concurrency and Parallel Computing

MinimalismA:

Syntax features (2/3)

Page 14: Perl 6 for Concurrency and Parallel Computing

ExtendabilityA:

Syntax features (3/3)

Page 15: Perl 6 for Concurrency and Parallel Computing

Flexible type castingA:

Object system (1/3)

Page 16: Perl 6 for Concurrency and Parallel Computing

RobustnessA:

Object system (2/3)

Page 17: Perl 6 for Concurrency and Parallel Computing

Built-in introspectionA:

Object system (3/3)

Page 18: Perl 6 for Concurrency and Parallel Computing

JVM supportA:

Environment (1/4)

Page 19: Perl 6 for Concurrency and Parallel Computing

Execution in a browserA:

Environment (2/4)

Page 20: Perl 6 for Concurrency and Parallel Computing

Language inter-compatibilityA:

Environment (3/4)

Page 21: Perl 6 for Concurrency and Parallel Computing

EmbeddingA:

Environment (4/4)

Page 22: Perl 6 for Concurrency and Parallel Computing

CommunityA:

Humanity (1/8)

Page 23: Perl 6 for Concurrency and Parallel Computing

HumanismA:

Humanity (2/8)

Page 24: Perl 6 for Concurrency and Parallel Computing

Open sourceA:

Humanity (3/8)

Page 25: Perl 6 for Concurrency and Parallel Computing

PragmatismA:

Humanity (4/8)

Page 26: Perl 6 for Concurrency and Parallel Computing

Mind control (sic!)A:

Humanity (5/8)

Page 27: Perl 6 for Concurrency and Parallel Computing

Expressing things easilyA:

Humanity (6/8)

Page 28: Perl 6 for Concurrency and Parallel Computing

Domain orientedA:

Humanity (7/8)

Page 29: Perl 6 for Concurrency and Parallel Computing

UnobtrusivenessA:

Humanity (8/8)

Page 30: Perl 6 for Concurrency and Parallel Computing

Number 1 answer

Parallelism

Page 31: Perl 6 for Concurrency and Parallel Computing

ParallelismA:

Parallelism (1/12)

Page 32: Perl 6 for Concurrency and Parallel Computing

Working with parallel resources

A:

Parallelism (2/12)

Page 33: Perl 6 for Concurrency and Parallel Computing

ParallelismA:

Parallelism (3/12)

Page 34: Perl 6 for Concurrency and Parallel Computing

Good paralleling modelA:

Parallelism (4/12)

Page 35: Perl 6 for Concurrency and Parallel Computing

Intuitive coroutines and multi-core support

A:

Parallelism (5/12)

Page 36: Perl 6 for Concurrency and Parallel Computing

ParallelismA:

Parallelism (6/12)

Page 37: Perl 6 for Concurrency and Parallel Computing

Safe operation parallelismA:

Parallelism (7/12)

Page 38: Perl 6 for Concurrency and Parallel Computing

Built-in threadingA:

Parallelism (8/12)

Page 39: Perl 6 for Concurrency and Parallel Computing

Qualitative abstract threadingA:

Parallelism (9/12)

Page 40: Perl 6 for Concurrency and Parallel Computing

ParallelismA:

Parallelism (10/12)

Page 41: Perl 6 for Concurrency and Parallel Computing

Good parallelismA:

Parallelism (11/12)

Page 42: Perl 6 for Concurrency and Parallel Computing

Multi-taskingA:

Parallelism (12/12)

Page 43: Perl 6 for Concurrency and Parallel Computing

Back to Perl 6

Page 44: Perl 6 for Concurrency and Parallel Computing

The idea is keeping things

transparent

Page 45: Perl 6 for Concurrency and Parallel Computing

A Perl 6 user simply uses concurrency

Page 46: Perl 6 for Concurrency and Parallel Computing

A Perl 6 compiler makes it possible

Page 47: Perl 6 for Concurrency and Parallel Computing

A Perl 6 compiler makes it possible

Page 48: Perl 6 for Concurrency and Parallel Computing

The Perl 6 compiler makes it possible

Page 49: Perl 6 for Concurrency and Parallel Computing

Running examples with Rakudo Star

Page 50: Perl 6 for Concurrency and Parallel Computing

Running examples with Rakudo Star

on MoarVM

Page 51: Perl 6 for Concurrency and Parallel Computing

Two kindsof parallel features

Page 52: Perl 6 for Concurrency and Parallel Computing

Roughly, 1) implicit 2) explicit

Page 53: Perl 6 for Concurrency and Parallel Computing

Operators at a glance

Page 54: Perl 6 for Concurrency and Parallel Computing

1. Hyperops

Page 55: Perl 6 for Concurrency and Parallel Computing

A hyper operator is a

meta operator

Page 56: Perl 6 for Concurrency and Parallel Computing

+operator

Page 57: Perl 6 for Concurrency and Parallel Computing

+=meta operator

Page 58: Perl 6 for Concurrency and Parallel Computing

>>+<<hyper operator

Page 59: Perl 6 for Concurrency and Parallel Computing

»+«hyper operator

Page 60: Perl 6 for Concurrency and Parallel Computing

>>+hyper operator

Page 61: Perl 6 for Concurrency and Parallel Computing

»+hyper operator

Page 62: Perl 6 for Concurrency and Parallel Computing

>>+>>hyper operator

Page 63: Perl 6 for Concurrency and Parallel Computing

<<+<<hyper operator

Page 64: Perl 6 for Concurrency and Parallel Computing

«+«hyper operator

Page 65: Perl 6 for Concurrency and Parallel Computing
Page 66: Perl 6 for Concurrency and Parallel Computing

<<+>>hyper operator

Page 67: Perl 6 for Concurrency and Parallel Computing

«+»hyper operator

Page 68: Perl 6 for Concurrency and Parallel Computing

<<<>>hyper operator

Page 69: Perl 6 for Concurrency and Parallel Computing

«<»hyper operator

Page 70: Perl 6 for Concurrency and Parallel Computing

@c = @a >>+<< @b

Page 71: Perl 6 for Concurrency and Parallel Computing

@c = @a >>+<< @b@c[0] = @a[0] + @b[0];

Page 72: Perl 6 for Concurrency and Parallel Computing

@c = @a >>+<< @b@c[0] = @a[0] + @b[0];@c[1] = @a[1] + @b[1];

Page 73: Perl 6 for Concurrency and Parallel Computing

@c = @a >>+<< @b@c[0] = @a[0] + @b[0];@c[1] = @a[1] + @b[1];@c[2] = @a[2] + @b[2];

Page 74: Perl 6 for Concurrency and Parallel Computing

@c = @a >>+>> 1

Page 75: Perl 6 for Concurrency and Parallel Computing

@c = @a >>+>> 1@c[0] = @a[0] + 1;

Page 76: Perl 6 for Concurrency and Parallel Computing

@c = @a >>+>> 1@c[0] = @a[0] + 1;@c[1] = @a[1] + 1;

Page 77: Perl 6 for Concurrency and Parallel Computing

@c = @a >>+>> 1@c[0] = @a[0] + 1;@c[1] = @a[1] + 1;@c[2] = @a[2] + 1;

Page 78: Perl 6 for Concurrency and Parallel Computing

2. Junctions

Page 79: Perl 6 for Concurrency and Parallel Computing

Or Quantum

Superpositions

Page 80: Perl 6 for Concurrency and Parallel Computing

Many values as one

Page 81: Perl 6 for Concurrency and Parallel Computing

my $j = 1 | 2 | 3 | 5;

Page 82: Perl 6 for Concurrency and Parallel Computing

my $j = 1 | 2 | 3 | 5;

say 1 if 3 == $j;

Page 83: Perl 6 for Concurrency and Parallel Computing

my $j = 1 | 2 | 3 | 5;

say 1 if 3 == $j;

Page 84: Perl 6 for Concurrency and Parallel Computing

my $j = 1 | 2 | 3 | 5;

say 1 if 3 == $j;

Page 85: Perl 6 for Concurrency and Parallel Computing

my $j = 1 | 2 | 3 | 5;

say 1 if 3 == $j;

}

Page 86: Perl 6 for Concurrency and Parallel Computing

my $j = 1 | 2 | 3 | 5;

say 1 if 3 == $j;

}1

Page 87: Perl 6 for Concurrency and Parallel Computing

3.Feeds

Page 88: Perl 6 for Concurrency and Parallel Computing

my @a = 1..10;

Page 89: Perl 6 for Concurrency and Parallel Computing

my @a = 1..10;@a ==> grep {$_ mod 2};

Page 90: Perl 6 for Concurrency and Parallel Computing

my @a = 1..10;@a ==> grep {$_ mod 2};!

1 3 5 7 9

Page 91: Perl 6 for Concurrency and Parallel Computing

my @a = 1..10;@a ==> grep {$_ mod 2} ==> map {$_ ** 2};

Page 92: Perl 6 for Concurrency and Parallel Computing

my @a = 1..10;@a ==> grep {$_ mod 2} ==> map {$_ ** 2};!

1 9 25 49 81

Page 93: Perl 6 for Concurrency and Parallel Computing
Page 94: Perl 6 for Concurrency and Parallel Computing

4.Channels

Page 95: Perl 6 for Concurrency and Parallel Computing

my $c = Channel.new;

Page 96: Perl 6 for Concurrency and Parallel Computing

my $c = Channel.new;$c.send(42);

Page 97: Perl 6 for Concurrency and Parallel Computing

my $c = Channel.new;$c.send(42);say $c.receive;!

42

Page 98: Perl 6 for Concurrency and Parallel Computing

my $ch = Channel.new;

Page 99: Perl 6 for Concurrency and Parallel Computing

my $ch = Channel.new;for <1 3 5 7 9> { $ch.send($_);}

Page 100: Perl 6 for Concurrency and Parallel Computing

my $ch = Channel.new;for <1 3 5 7 9> { $ch.send($_);}while $ch.poll -> $x { say $x;}

Page 101: Perl 6 for Concurrency and Parallel Computing

5.Promises

Page 102: Perl 6 for Concurrency and Parallel Computing

my $p = Promise.new;

Page 103: Perl 6 for Concurrency and Parallel Computing

my $p = Promise.new;say $p.status;

Planned

Page 104: Perl 6 for Concurrency and Parallel Computing

my $p = Promise.new;$p.keep;

Page 105: Perl 6 for Concurrency and Parallel Computing

my $p = Promise.new;$p.keep;say $p.status;!

Kept

Page 106: Perl 6 for Concurrency and Parallel Computing

my $p = Promise.new;$p.break;

Page 107: Perl 6 for Concurrency and Parallel Computing

my $p = Promise.new;$p.break;say $p.status;!

Broken

Page 108: Perl 6 for Concurrency and Parallel Computing

Factory methods

Page 109: Perl 6 for Concurrency and Parallel Computing

start

Page 110: Perl 6 for Concurrency and Parallel Computing

my $p = start {42};

Page 111: Perl 6 for Concurrency and Parallel Computing

my $p = start {42}; say $p.WHAT;

(Promise)

Page 112: Perl 6 for Concurrency and Parallel Computing

my $p1 = start {sleep 2};

Page 113: Perl 6 for Concurrency and Parallel Computing

my $p1 = start {sleep 2};my $p2 = start {sleep 2};

Page 114: Perl 6 for Concurrency and Parallel Computing

my $p1 = start {sleep 2};say $p1.status;my $p2 = start {sleep 2};say $p2.status;

Page 115: Perl 6 for Concurrency and Parallel Computing

my $p1 = start {sleep 2};say $p1.status;my $p2 = start {sleep 2};say $p2.status;!

PlannedPlanned

Page 116: Perl 6 for Concurrency and Parallel Computing

my $p1 = start {sleep 2};my $p2 = start {sleep 2};sleep 3;

Page 117: Perl 6 for Concurrency and Parallel Computing

my $p1 = start {sleep 2};my $p2 = start {sleep 2};sleep 3;say $p1.status;say $p2.status;

Page 118: Perl 6 for Concurrency and Parallel Computing

my $p1 = start {sleep 2};my $p2 = start {sleep 2};sleep 3;say $p1.statussay $p2.statusKeptKept

Page 119: Perl 6 for Concurrency and Parallel Computing

start in a thread

Page 120: Perl 6 for Concurrency and Parallel Computing

in

Page 121: Perl 6 for Concurrency and Parallel Computing

my $p = Promise.in(3);

Page 122: Perl 6 for Concurrency and Parallel Computing

my $p = Promise.in(3);!

for 1..5 { say "$_ {$p.status}"; sleep 1;}

Page 123: Perl 6 for Concurrency and Parallel Computing

my $p = Promise.in(3);!

for 1..5 { say "$_ {$p.status}"; sleep 1;}

Page 124: Perl 6 for Concurrency and Parallel Computing

1 Planned

Page 125: Perl 6 for Concurrency and Parallel Computing

1 Planned2 Planned

Page 126: Perl 6 for Concurrency and Parallel Computing

1 Planned2 Planned3 Planned

Page 127: Perl 6 for Concurrency and Parallel Computing

1 Planned2 Planned3 Planned4 Kept

Page 128: Perl 6 for Concurrency and Parallel Computing

1 Planned2 Planned3 Planned4 Kept5 Kept

Page 129: Perl 6 for Concurrency and Parallel Computing

Example:Sleep Sort

Page 130: Perl 6 for Concurrency and Parallel Computing

!

for @*ARGS -> $a { !

!

!

!

}

Page 131: Perl 6 for Concurrency and Parallel Computing

!

for @*ARGS -> $a { !

!

!

!

}

Page 132: Perl 6 for Concurrency and Parallel Computing

!

for @*ARGS -> $a { @promises.push( Promise.in($a).then({ say $a; }) );}!

await(|@promises);

Page 133: Perl 6 for Concurrency and Parallel Computing

my @promises;for @*ARGS -> $a { @promises.push( Promise.in($a).then({ say $a; }) );}!

await(|@promises);

Page 134: Perl 6 for Concurrency and Parallel Computing

my @promises;for @*ARGS -> $a { @promises.push( Promise.in($a).then({ say $a; }) );}!

await(|@promises);

Page 135: Perl 6 for Concurrency and Parallel Computing

my @promises;for @*ARGS -> $a { @promises.push( Promise.in($a).then({ say $a; }) );}!

await(|@promises);

Page 136: Perl 6 for Concurrency and Parallel Computing

my @promises;for @*ARGS -> $a { @promises.push( Promise.in($a).then({ say $a; }) );}!

await(|@promises);

Page 137: Perl 6 for Concurrency and Parallel Computing

$ ./sleep-sort.pl

Page 138: Perl 6 for Concurrency and Parallel Computing

$ ./sleep-sort.pl 3 1 2

Page 139: Perl 6 for Concurrency and Parallel Computing

$ ./sleep-sort.pl 3 1 21

Page 140: Perl 6 for Concurrency and Parallel Computing

$ ./sleep-sort.pl 3 1 212

Page 141: Perl 6 for Concurrency and Parallel Computing

$ ./sleep-sort.pl 3 1 2123

Page 142: Perl 6 for Concurrency and Parallel Computing

Home work:Channels inside

Promises

Page 143: Perl 6 for Concurrency and Parallel Computing

More:Schedulers

Page 144: Perl 6 for Concurrency and Parallel Computing

More:Suppliers

Page 145: Perl 6 for Concurrency and Parallel Computing

More:I/O and Suppliers

Page 146: Perl 6 for Concurrency and Parallel Computing

More:Signals

Page 147: Perl 6 for Concurrency and Parallel Computing

More:Threads

Page 148: Perl 6 for Concurrency and Parallel Computing

More:Atomic

Page 149: Perl 6 for Concurrency and Parallel Computing

More:Locks

Page 150: Perl 6 for Concurrency and Parallel Computing

More:Semaphores

Page 151: Perl 6 for Concurrency and Parallel Computing

__END__

Page 152: Perl 6 for Concurrency and Parallel Computing

Andrew Shitov [email protected] April 2015