1 of 54

Что будет, если выбрать Dart для диссертации

Павел Герасимов, Wrike

2 of 54

Почему я?

  • Был свой стартап по автономным дронам
  • Закончил аспирантуру с ресерчем по дронам
  • 2 года работаю с Dart

Павел Герасимов

Frontend Team Lead, Wrike

Что будет, если выбрать Dart для диссертации

2

3 of 54

Студентам

Дартизанам

Хейтерам

Себе

Пробуйте новое!

Это не только про Флаттер!

Порефлексировать

Нормальный язык :)

Что будет, если выбрать Dart для диссертации

3

4 of 54

Полосочка

Что будет, если выбрать Dart для диссертации

4

5 of 54

Полосочка сдвинулась

Что будет, если выбрать Dart для диссертации

5

6 of 54

Как я до этого дошел

Что будет, если выбрать Dart для диссертации

6

7 of 54

Что будет, если выбрать Dart для диссертации

7

8 of 54

Что будет, если выбрать Dart для диссертации

8

9 of 54

Что будет, если выбрать Dart для диссертации

9

10 of 54

Увеличение производительности системы массового обслуживания на основе автономных беспилотных летательных аппаратов

Что будет, если выбрать Dart для диссертации

10

11 of 54

Что нужно

Что будет, если выбрать Dart для диссертации

11

12 of 54

Мораль: нужна модель

Что будет, если выбрать Dart для диссертации

12

13 of 54

компетентность

Уверенность

Эффект Даннинга-Крюгера

Что будет, если выбрать Dart для диссертации

13

14 of 54

компетентность

Уверенность

Эффект Даннинга-Крюгера

Я перед собеседованием в Wrike

Скала Глупости

Что будет, если выбрать Dart для диссертации

14

15 of 54

Картинка с Джеки Чаном, �который держится за голову

Что будет, если выбрать Dart для диссертации

15

16 of 54

Где мой

???

Что будет, если выбрать Dart для диссертации

16

17 of 54

Проблема: “я ничего не знаю”

Что будет, если выбрать Dart для диссертации

17

18 of 54

Что будет, если выбрать Dart для диссертации

18

19 of 54

Симулятор

  • С последовательными / параллельными заявками
  • От 10 до 50 дронов
  • От 100 до 1000 заявок
  • LIFO/FIFO
  • 5 стратегий выбора дрона
  • 2 варианта построения маршрута

Что будет, если выбрать Dart для диссертации

19

20 of 54

Симулятор

Что будет, если выбрать Dart для диссертации

20

21 of 54

Симулятор

Что будет, если выбрать Dart для диссертации

21

22 of 54

Проблема #1:

Я не знаю, как создать проект

Что будет, если выбрать Dart для диссертации

22

23 of 54

Картинка с удивленными ребятами

Что будет, если выбрать Dart для диссертации

23

24 of 54

Стратегии

class LifoStrategy implements ServingStrategy {

@override

bool isServingNext(Request request, Iterable<Request> activeRequests) {

return activeRequests.last == request;

}

@override

Iterable<Request> getSortedRequests(Iterable<Request> activeRequests) {

return activeRequests;

}

}

Что будет, если выбрать Dart для диссертации

24

25 of 54

Стратегии

Что будет, если выбрать Dart для диссертации

25

26 of 54

Модель дрона

Что будет, если выбрать Dart для диссертации

26

27 of 54

Что вышло

for (var servingStrategy in servingStrategies) {

for (var agentSelectionStrategy in agentSelectionStrategies) {

for (var routingStrategy in routingStrategies) {

for (var networkConfig in networkConfigs) {

for (var agentsCount in agentsCounts) {

for (var requestType in requestTypes) {

for (var requestsCount in requestsCounts) {

final servingSystem = new ServingSystem.build(

servingStrategy,

agentSelectionStrategy,

routingStrategy,

networkConfig,

agentsCount,

);

final playground = new Playground(servingSystem);

final res = await playground.emulate(requestType, requestsCount);

print(res);

}

}

}

}

}

}

}

Что будет, если выбрать Dart для диссертации

27

28 of 54

Проблема #2:

Многопоточность

Что будет, если выбрать Dart для диссертации

28

29 of 54

Event Loop

Что будет, если выбрать Dart для диссертации

29

30 of 54

Event Loop

Что будет, если выбрать Dart для диссертации

30

31 of 54

Isolates

Foo

foo

Bar

Bar

Что будет, если выбрать Dart для диссертации

31

32 of 54

Isolates

main() async {

final receivePort = new ReceivePort();

await Isolate.spawn(echoIsolate, receivePort.sendPort);

}

echoIsolate(SendPort sendPort) async { ... }

Что будет, если выбрать Dart для диссертации

32

33 of 54

Isolates

[“Foo”, port]

[“bar”, port]

Future sendToIsolateAndReturnResult(SendPort port, msg) {

ReceivePort response = new ReceivePort();

port.send([msg, response.sendPort]);

return response.first;

}

Что будет, если выбрать Dart для диссертации

33

34 of 54

Isolates

[“Foo”, port]

[“bar”, port]

echoIsolate(SendPort sendPort) async {

final port = new ReceivePort();

sendPort.send(port.sendPort);

await for (var msg in port) {

final data = msg[0];

SendPort replyTo = msg[1];

replyTo.send(data);

If (data == "bar") port.close();

}

}

Что будет, если выбрать Dart для диссертации

34

35 of 54

Isolates

main() async {

final receivePort = new ReceivePort();

await Isolate.spawn(echoIsolate, receivePort.sendPort);

final sendPort = await receivePort.first;

var msg = await sendToIsolateAndReturnResult(sendPort, "foo");

print('received $msg');

msg = await sendToIsolateAndReturnResult(sendPort, "bar");

print('received $msg');

}

Что будет, если выбрать Dart для диссертации

35

36 of 54

Isolates

var globalStateInt = 0;

main() async {

final receivePort = new ReceivePort();

await Isolate.spawn(echoIsolate, receivePort.sendPort);

final sendPort = await receivePort.first;

var msg = await sendToIsolateAndReturnResult(sendPort, "foo");

print('received $msg');

msg = await sendToIsolateAndReturnResult(sendPort, "bar");

print('received $msg');

}

Что будет, если выбрать Dart для диссертации

36

37 of 54

Isolates

var globalStateInt = 0;

echoIsolate(SendPort sendPort) async {

// ...

await for (var msg in port) {

print('isolated state $globalState');

}

}

Что будет, если выбрать Dart для диссертации

37

38 of 54

Isolates

var globalStateInt = 0;

main() async {

final receivePort = new ReceivePort();

await Isolate.spawn(echoIsolate, receivePort.sendPort);

final sendPort = await receivePort.first;

var msg = await sendToIsolateAndReturnResult(sendPort, "foo");

print('received $msg');

msg = await sendToIsolateAndReturnResult(sendPort, "bar");

print('received $msg');

}

globalStateInt ++;

Что будет, если выбрать Dart для диссертации

38

39 of 54

Isolates

0 = ноль

var globalStateInt = 0;

echoIsolate(SendPort sendPort) async {

// ...

await for (var msg in port) {

print('isolated state $globalState');

}

}

globalStateInt ++;

Что будет, если выбрать Dart для диссертации

39

40 of 54

Isolates

0 = ноль

var globalStateInt = 0;

echoIsolate(SendPort sendPort) async {

// ...

await for (var msg in port) {

print('isolated state $globalState');

}

}

globalStateInt ++;

Что будет, если выбрать Dart для диссертации

40

41 of 54

main() async {

// ...

print('global state $globalState');

var msg = await sendToIsolateAndReturnResult(sendPort, "foo");

print('global state $globalState');

globalState ++;

msg = await sendToIsolateAndReturnResult(sendPort, "bar");

print('global state $globalState');

}

echoIsolate(SendPort sendPort) async {

// ...

await for (var msg in port) {

globalState ++;

print('isolated state $globalState');

// …

}

}

A: 0

B: 1

C: 0

E: 1

D: 2

var globalStateInt = 0;

Что будет, если выбрать Dart для диссертации

41

42 of 54

Проблема #3:

Нет общей памяти у Isolates

?

Что будет, если выбрать Dart для диссертации

42

43 of 54

Isolates

void initDrone() async {

final fromDronePort = ReceivePort();

droneIsolate = await Isolate.spawn(runDroneAgent, fromDronePort.sendPort);

final toDronePort = await fromDronePort.first as SendPort;

onControlMessage.listen((message) {

// handle control messages

toDronePort.send(message);

});

fromDronePort.listen((data) {

// handle telemetry from a drone

});

}

Что будет, если выбрать Dart для диссертации

43

44 of 54

onControlMessage.listen((message) {

// handle control messages

toDronePort.send(message);

});

Стейт или �апдейты стейта

Картинка с Гарольдом

Где коптеры

Какой заряд

Куда летят

Что с заявками

Свободные станции

Веса графа

Корректировки маршрута

Что будет, если выбрать Dart для диссертации

44

45 of 54

Что вышло

Что будет, если выбрать Dart для диссертации

45

46 of 54

Картинка с Doge

Что будет, если выбрать Dart для диссертации

46

47 of 54

Производительность

Что будет, если выбрать Dart для диссертации

47

48 of 54

Многопоточность

  • Нормальный механизм Isolates
  • Нет shared memory

Что будет, если выбрать Dart для диссертации

48

49 of 54

Типизация

  • Легкое и быстрое прототипирование
  • Минимальные затраты на дебаг
  • Удобная имплементация объектно-ориентированной модели

Картинка со слезами счастья

Что будет, если выбрать Dart для диссертации

49

50 of 54

Нет готовых либ

Что будет, если выбрать Dart для диссертации

50

51 of 54

Dart для вас ОК, если вы:

Студент, учите первый язык

Уже на дарте

Хейтите дарт

Ищите что попробовать

Что будет, если выбрать Dart для диссертации

51

52 of 54

Язык - инструмент

Что будет, если выбрать Dart для диссертации

52

53 of 54

И еще

  • Делать вещи с нуля - важно (ваш Кэп)
  • По производительности для исследовательского проекта - не очень
  • По туллингу - ок
  • По удобству - ок
  • Низкая популярность - хороший повод наконец написать либы самим

Что будет, если выбрать Dart для диссертации

53

54 of 54

Удачи!

Павел Герасимов, Wrike