Алексей Распопов "Будущее асинхронного...

50
Будущее асинхронного программирования Алексей Распопов

Upload: fwdays

Post on 15-Apr-2017

512 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Будущее асинхронногопрограммирования

Алексей Распопов

Page 2: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

2

Page 3: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

whoami

— 5 лет двигаю кнопки на 3px влево

— Разработчик в DataRobot

— Храню личный говнокод на ГитХабе

3

Page 4: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Побочные эффекты (side effects)Общение с другими сервисами/базами данных, события в

окружении, прочее.

4

Page 5: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

5

Page 6: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

АсинхронноепрограммированиеТип параллельных вычислений, который подразумевает, что

операция может быть выполнена кем-то на стороне, за пределами

текущего вычислительного устройства.

Можно выполнять несколько асинхронных операций одновременно.

Результат работы нужно ждать.

6

Page 7: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Где в JavaScript асинхронноепрограммирование?

— HTTP запросы

— Работа с файловой системой

— Таймеры

— События системы и пользователя

— Worker'ы

— ...

7

Page 8: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Как мы это делаем?

8

Page 9: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

9

Page 10: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

10

Page 11: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Promise?

11

Page 12: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Обещания этохорошо?

12

Page 13: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Все еще коллбеки!

13

Page 14: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

.then(

get('/resources', (resources) => {

renderResources(resources);

});

get('/resources') (resources) => {

renderResources(resources);

});

01.

02.

03.

01.

02.

03.

14

Page 15: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Новый (другой)синтаксис

15

Page 16: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

resources

error

// wow

function main() {

try {

let = getResources();

render(resources);

} catch ( ) {

}

}

01.

02.

03.

04.

05.

06.

07.

08.

16

Page 17: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

resources

error

// wow

function main() {

getResources()

.then(( ) => {

render(resources);

})

.catch(( ) => {

})

}

01.

02.

03.

04.

05.

06.

07.

08.

09.

17

Page 18: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

18

Page 19: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

resources

error

// wow

.finally

// hell yeah

function main() {

getResources()

.then(( ) => {

render(resources);

})

.catch(( ) => {

})

(() => {

})

}

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12. 19

Page 20: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Angular, что тыделаешь, ахаха,прекрати!

20

Page 21: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Антипаттерны и сложности— Размытие сложности по модулю

— Все еще есть задачи в которых приходится писать вложенные

промисы

— Сколько раз вы гуглили статьи по вопросам использования

промисов?

21

Page 22: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Хорошие практики— Переносимость кода

— Поддержка return

— Отсутствие вложенности в 99% случаев

22

Page 23: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

ECMAScript 20XX

23

Page 24: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Статус спецификаций

24

Page 25: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

async/await

25

Page 26: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Асинхронные функции— Есть в других языках (C#, Python 3.5)

— Поддерживает стандартные операторы языка

— Композиция все еще работает

26

Page 27: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

resources

error

// wow

function main() {

try {

let = getResources();

render(resources);

} catch ( ) {

}

}

01.

02.

03.

04.

05.

06.

07.

08.

27

Page 28: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

async

resources await

error

// wow

function main() {

try {

let = getResources();

render(resources);

} catch ( ) {

}

}

01.

02.

03.

04.

05.

06.

07.

08.

28

Page 29: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

async

await

// ...

return

function a() {

let status;

do {

status = get('/status');

} while (status !== 'COMPLETED');

result;

}

01.

02.

03.

04.

05.

06.

07.

08.

29

Page 30: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Как? Хочу прямосейчас!

30

Page 31: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Генераторы и итераторыfunction* numbers() {

yield 1;

yield 2;

return 3;

}

01.

02.

03.

04.

05.

31

Page 32: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

.next() // 1

// 2

// 3

const iterator = numbers();

iterator ;

iterator.next();

iterator.next();

01.

02.

03.

04.

32

Page 33: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

function*

yield

yield

Корутиныco( () {

var str = read(‘secret-passwords.txt’);

str = str.replace(‘qwerty’, ‘123456’);

write(‘new-passwords.txt’, str);

});

01.

02.

03.

04.

05.

33

Page 34: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

npm install co

34

Page 35: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

browserify code.js> bundle.js

35

Page 36: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

co.wrap (name)

// ...

// wow

Async/await уже сегодняconst getResources = (function* {

try {

const data = yield fetch(̀/resources/${name}̀);

return result;

} catch (error) {

}

});

01.

02.

03.

04.

05.

06.

07.

08.

09.36

Page 37: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

37

Page 38: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Async/await иколлекции

38

Page 39: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Еще больше интерфейсов[1, 2, 3, 4]

.map(n => n * 3)

.filter(n => n < 10)

01.

02.

03.

39

Page 40: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Что не так?— Жрущие память промежуточные результаты

— Еще один интерфейс

40

Page 41: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

yield

yield

Можно использовать итераторfunction* getNames(users) {

for (let user of users)

user.name;

}

function* isAdult(users) {

for (let user of users)

if (user.age > 18) user;

}

01.

02.

03.

04.

01.

02.

03.

04. 41

Page 42: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Композиция работаетfor (let user of getNames(isAdult(users))) {

render(user);

}

01.

02.

03.

42

Page 43: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

События —асинхроннаяколлекция

43

Page 44: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

async iteraton

44

Page 45: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

async

await

yield

function* getCompanies() {

for (let name of ['Alex', 'Ann', 'Vlad']) {

const profile = get(̀/users/${name}̀);

profile.company;

}

}

01.

02.

03.

04.

05.

06.

45

Page 46: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

for await (let company of getCompanies()) {

console.log(company);

}

01.

02.

03.

46

Page 47: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Ссылки— ECMAScript status, process, and documents

— Async/await for ECMAScript

— Asynchronous Iteration for ECMAScript

47

Page 48: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Что почитать— TJ Holowaychuk: Callbacks vs Coroutines

— Jake Archibald: ES7 Async Functions

— Dr. Axel Rauschmayer: What’s in ECMAScript 2016 (ES7)?

— Dr. Axel Rauschmayer: ES6 generators in depth

48

Page 49: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

49

Page 50: Алексей Распопов "Будущее асинхронного программирования в ECMAScript"

Спасибо за внимание!— twitter.com/alexeyraspopov

— github.com/alexeyraspopov

Ссылка на эти слайды:

alexeyraspopov.github.io/es-async-future

50