Параллельные вычисления в perl 6

147
Perl 6 для параллельных вычислений

Upload: andysh

Post on 19-Jul-2015

68 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Параллельные вычисления в Perl 6

Perl 6для параллельных

вычислений

Page 2: Параллельные вычисления в Perl 6

The Parallel Features of the Perl Six

Page 3: Параллельные вычисления в Perl 6

Parallel Futuresof Perl 6

Page 4: Параллельные вычисления в Perl 6

Предисловие

Page 5: Параллельные вычисления в Perl 6

Интервью Pragmatic Perl в 2013–2015

Page 6: Параллельные вычисления в Perl 6
Page 7: Параллельные вычисления в Perl 6

Что, по-твоему, является наиболее важной особенностью языков будущего?

Q:

Page 8: Параллельные вычисления в Perl 6

Я не знаюA:

Не знаю (2 ответа)

Page 9: Параллельные вычисления в Perl 6

Нет хорошего ответаA:

Не знаю (2 ответа)

Page 10: Параллельные вычисления в Perl 6

Похожий на натуральный язык

A:

Синтаксис (1/3)

Page 11: Параллельные вычисления в Perl 6

Здоровый минимализмA:

Синтаксис (2/3)

Page 12: Параллельные вычисления в Perl 6

РасширяемостьA:

Синтаксис (3/3)

Page 13: Параллельные вычисления в Perl 6

Гибкий и надежный вывод типов

A:

Объектная система (1/3)

Page 14: Параллельные вычисления в Perl 6

НадежностьA:

Объектная система (2/3)

Page 15: Параллельные вычисления в Perl 6

Интроспекции самого языка

A:

Объектная система (3/3)

Page 16: Параллельные вычисления в Perl 6

Поддержка JVMA:

Среда (1/4)

Page 17: Параллельные вычисления в Perl 6

Работа в браузереA:

Среда (2/4)

Page 18: Параллельные вычисления в Perl 6

Совместимость с другими языками

A:

Среда (3/4)

Page 19: Параллельные вычисления в Perl 6

Возможность встраиваимости

A:

Среда (4/4)

Page 20: Параллельные вычисления в Perl 6

СообществоA:

Гуманизм (1/8)

Page 21: Параллельные вычисления в Perl 6

ЧеловечностьA:

Гуманизм (2/8)

Page 22: Параллельные вычисления в Perl 6

Open sourceA:

Гуманизм (3/8)

Page 23: Параллельные вычисления в Perl 6

ПрагматизмA:

Гуманизм (4/8)

Page 24: Параллельные вычисления в Perl 6

Управляемость сознанием (sic!)

A:

Гуманизм (5/8)

Page 25: Параллельные вычисления в Perl 6

Возможность просто объяснить задачу

A:

Гуманизм (6/8)

Page 26: Параллельные вычисления в Perl 6

Легкость решения задач в предметной области

A:

Гуманизм (7/8)

Page 27: Параллельные вычисления в Perl 6

НенавязчивостьA:

Гуманизм (8/8)

Page 28: Параллельные вычисления в Perl 6

Ответ номер 1

Параллельность

Page 29: Параллельные вычисления в Perl 6

ПараллелизмA:

Параллельность (1/12)

Page 30: Параллельные вычисления в Perl 6

Работа с распределенными ресурсами

A:

Параллельность (2/12)

Page 31: Параллельные вычисления в Perl 6

ПараллелизмA:

Параллельность (3/12)

Page 32: Параллельные вычисления в Perl 6

Хорошая модель распараллеливания

A:

Параллельность (4/12)

Page 33: Параллельные вычисления в Perl 6

Интуитивные корутины и поддержка многоядерности

A:

Параллельность (5/12)

Page 34: Параллельные вычисления в Perl 6

ПараллелизмA:

Параллельность (6/12)

Page 35: Параллельные вычисления в Perl 6

Безопасность параллельных операций

A:

Параллельность (7/12)

Page 36: Параллельные вычисления в Perl 6

Встроенная многопоточность

A:

Параллельность (8/12)

Page 37: Параллельные вычисления в Perl 6

Качественная абстракция над сложной многопоточностью

A:

Параллельность (9/12)

Page 38: Параллельные вычисления в Perl 6

ПараллелизмA:

Параллельность (10/12)

Page 39: Параллельные вычисления в Perl 6

Хороший параллелизмA:

Параллельность (11/12)

Page 40: Параллельные вычисления в Perl 6

МногозадачностьA:

Параллельность (12/12)

Page 41: Параллельные вычисления в Perl 6

Вернемся к Perl 6

Page 42: Параллельные вычисления в Perl 6

Идея: прозрачность операций

Page 43: Параллельные вычисления в Perl 6

Пользователь просто

пользуется

Page 44: Параллельные вычисления в Perl 6

Компилятор делает всю работу

Page 45: Параллельные вычисления в Perl 6

Все примеры на Rakudo Star

Page 46: Параллельные вычисления в Perl 6

Все примеры на Rakudo Star под MoarVM

Page 47: Параллельные вычисления в Perl 6

Два типа параллельных возможностей

Page 48: Параллельные вычисления в Perl 6

1) неявные 2) явные

Page 49: Параллельные вычисления в Perl 6

Операторы (кратко)

Page 50: Параллельные вычисления в Perl 6

1. Гипероператоры

Page 51: Параллельные вычисления в Perl 6

Гипероператор это

метаоператор

Page 52: Параллельные вычисления в Perl 6

+оператор

Page 53: Параллельные вычисления в Perl 6

+=метаоператор

Page 54: Параллельные вычисления в Perl 6

>>+<<гипероператор

Page 55: Параллельные вычисления в Perl 6

»+«гипероператор

Page 56: Параллельные вычисления в Perl 6

>>+гипероператор

Page 57: Параллельные вычисления в Perl 6

»+гипероператор

Page 58: Параллельные вычисления в Perl 6

>>+>>гипероператор

Page 59: Параллельные вычисления в Perl 6

<<+<<гипероператор

Page 60: Параллельные вычисления в Perl 6

«+«гипероператор

Page 61: Параллельные вычисления в Perl 6
Page 62: Параллельные вычисления в Perl 6

<<+>>гипероператор

Page 63: Параллельные вычисления в Perl 6

«+»гипероператор

Page 64: Параллельные вычисления в Perl 6

<<<>>гипероператор

Page 65: Параллельные вычисления в Perl 6

«<»гипероператор

Page 66: Параллельные вычисления в Perl 6

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

Page 67: Параллельные вычисления в Perl 6

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

Page 68: Параллельные вычисления в Perl 6

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

Page 69: Параллельные вычисления в Perl 6

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

Page 70: Параллельные вычисления в Perl 6

@c = @a >>+>> 1

Page 71: Параллельные вычисления в Perl 6

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

Page 72: Параллельные вычисления в Perl 6

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

Page 73: Параллельные вычисления в Perl 6

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

Page 74: Параллельные вычисления в Perl 6

2. Junctions

Page 75: Параллельные вычисления в Perl 6

Или квантовые

суперпозиции

Page 76: Параллельные вычисления в Perl 6

Несколько значений как одно

Page 77: Параллельные вычисления в Perl 6

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

Page 78: Параллельные вычисления в Perl 6

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

say 1 if 3 == $j;

Page 79: Параллельные вычисления в Perl 6

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

say 1 if 3 == $j;

Page 80: Параллельные вычисления в Perl 6

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

say 1 if 3 == $j;

Page 81: Параллельные вычисления в Perl 6

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

say 1 if 3 == $j;

}

Page 82: Параллельные вычисления в Perl 6

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

say 1 if 3 == $j;

}1

Page 83: Параллельные вычисления в Perl 6

3.Feeds

Page 84: Параллельные вычисления в Perl 6

my @a = 1..10;

Page 85: Параллельные вычисления в Perl 6

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

Page 86: Параллельные вычисления в Perl 6

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

1 3 5 7 9

Page 87: Параллельные вычисления в Perl 6

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

Page 88: Параллельные вычисления в Perl 6

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

1 9 25 49 81

Page 89: Параллельные вычисления в Perl 6
Page 90: Параллельные вычисления в Perl 6

4.Каналы

Page 91: Параллельные вычисления в Perl 6

my $c = Channel.new;

Page 92: Параллельные вычисления в Perl 6

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

Page 93: Параллельные вычисления в Perl 6

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

42

Page 94: Параллельные вычисления в Perl 6

my $ch = Channel.new;

Page 95: Параллельные вычисления в Perl 6

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

Page 96: Параллельные вычисления в Perl 6

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

Page 97: Параллельные вычисления в Perl 6

5.Промисы

Page 98: Параллельные вычисления в Perl 6

my $p = Promise.new;

Page 99: Параллельные вычисления в Perl 6

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

Planned

Page 100: Параллельные вычисления в Perl 6

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

Page 101: Параллельные вычисления в Perl 6

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

Kept

Page 102: Параллельные вычисления в Perl 6

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

Page 103: Параллельные вычисления в Perl 6

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

Broken

Page 104: Параллельные вычисления в Perl 6

Фабричные методы

Page 105: Параллельные вычисления в Perl 6

start

Page 106: Параллельные вычисления в Perl 6

my $p = start {42};

Page 107: Параллельные вычисления в Perl 6

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

(Promise)

Page 108: Параллельные вычисления в Perl 6

my $p1 = start {sleep 2};

Page 109: Параллельные вычисления в Perl 6

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

Page 110: Параллельные вычисления в Perl 6

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

Page 111: Параллельные вычисления в Perl 6

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

PlannedPlanned

Page 112: Параллельные вычисления в Perl 6

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

Page 113: Параллельные вычисления в Perl 6

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

Page 114: Параллельные вычисления в Perl 6

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

Page 115: Параллельные вычисления в Perl 6

start блок кода для отложенного исполнения

Page 116: Параллельные вычисления в Perl 6

in

Page 117: Параллельные вычисления в Perl 6

my $p = Promise.in(3);

Page 118: Параллельные вычисления в Perl 6

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

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

Page 119: Параллельные вычисления в Perl 6

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

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

Page 120: Параллельные вычисления в Perl 6

1 Planned

Page 121: Параллельные вычисления в Perl 6

1 Planned2 Planned

Page 122: Параллельные вычисления в Perl 6

1 Planned2 Planned3 Planned

Page 123: Параллельные вычисления в Perl 6

1 Planned2 Planned3 Planned4 Kept

Page 124: Параллельные вычисления в Perl 6

1 Planned2 Planned3 Planned4 Kept5 Kept

Page 125: Параллельные вычисления в Perl 6

Пример:Sleep Sort

Page 126: Параллельные вычисления в Perl 6

!

for @*ARGS -> $a { !

!

!

!

}

Page 127: Параллельные вычисления в Perl 6

!

for @*ARGS -> $a { !

!

!

!

}

Page 128: Параллельные вычисления в Perl 6

!

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

await(|@promises);

Page 129: Параллельные вычисления в Perl 6

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

await(|@promises);

Page 130: Параллельные вычисления в Perl 6

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

await(|@promises);

Page 131: Параллельные вычисления в Perl 6

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

await(@promises);

Page 132: Параллельные вычисления в Perl 6

$ ./sleep-sort.pl

Page 133: Параллельные вычисления в Perl 6

$ ./sleep-sort.pl 3 1 2

Page 134: Параллельные вычисления в Perl 6

$ ./sleep-sort.pl 3 1 21

Page 135: Параллельные вычисления в Perl 6

$ ./sleep-sort.pl 3 1 212

Page 136: Параллельные вычисления в Perl 6

$ ./sleep-sort.pl 3 1 2123

Page 137: Параллельные вычисления в Perl 6

Домашнее задание:

каналы внутри промисов

Page 138: Параллельные вычисления в Perl 6

Что еще:Schedulers

Page 139: Параллельные вычисления в Perl 6

Что еще:Suppliers

Page 140: Параллельные вычисления в Perl 6

Что еще:I/O и Suppliers

Page 141: Параллельные вычисления в Perl 6

Что еще:Signals

Page 142: Параллельные вычисления в Perl 6

Что еще:Threads

Page 143: Параллельные вычисления в Perl 6

Что еще:Atomic

Page 144: Параллельные вычисления в Perl 6

Что еще:Locks

Page 145: Параллельные вычисления в Perl 6

Что еще:Semaphores

Page 146: Параллельные вычисления в Perl 6

__END__

Page 147: Параллельные вычисления в Perl 6

Андрей Шитов [email protected] май 2015