Что будет, если выбрать Dart для диссертации
Павел Герасимов, Wrike
Почему я?
Павел Герасимов
Frontend Team Lead, Wrike
Что будет, если выбрать Dart для диссертации
2
Студентам
Дартизанам
Хейтерам
Себе
Пробуйте новое!
Это не только про Флаттер!
Порефлексировать
Нормальный язык :)
Что будет, если выбрать Dart для диссертации
3
Полосочка
Что будет, если выбрать Dart для диссертации
4
Полосочка сдвинулась
Что будет, если выбрать Dart для диссертации
5
Как я до этого дошел
Что будет, если выбрать Dart для диссертации
6
Что будет, если выбрать Dart для диссертации
7
Что будет, если выбрать Dart для диссертации
8
Что будет, если выбрать Dart для диссертации
9
Увеличение производительности системы массового обслуживания на основе автономных беспилотных летательных аппаратов
Что будет, если выбрать Dart для диссертации
10
Что нужно
Что будет, если выбрать Dart для диссертации
11
Мораль: нужна модель
Что будет, если выбрать Dart для диссертации
12
компетентность
Уверенность
Эффект Даннинга-Крюгера
Что будет, если выбрать Dart для диссертации
13
компетентность
Уверенность
Эффект Даннинга-Крюгера
Я перед собеседованием в Wrike
Скала Глупости
Что будет, если выбрать Dart для диссертации
14
Картинка с Джеки Чаном, �который держится за голову
Что будет, если выбрать Dart для диссертации
15
Где мой
???
Что будет, если выбрать Dart для диссертации
16
Проблема: “я ничего не знаю”
Что будет, если выбрать Dart для диссертации
17
Что будет, если выбрать Dart для диссертации
18
Симулятор
Что будет, если выбрать Dart для диссертации
19
Симулятор
Что будет, если выбрать Dart для диссертации
20
Симулятор
Что будет, если выбрать Dart для диссертации
21
Проблема #1:
Я не знаю, как создать проект
Что будет, если выбрать Dart для диссертации
22
Картинка с удивленными ребятами
Что будет, если выбрать Dart для диссертации
23
Стратегии
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
Стратегии
Что будет, если выбрать Dart для диссертации
25
Модель дрона
Что будет, если выбрать Dart для диссертации
26
Что вышло
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
Проблема #2:
Многопоточность
Что будет, если выбрать Dart для диссертации
28
Event Loop
Что будет, если выбрать Dart для диссертации
29
Event Loop
Что будет, если выбрать Dart для диссертации
30
Isolates
Foo
foo
Bar
Bar
Что будет, если выбрать Dart для диссертации
31
Isolates
main() async {
final receivePort = new ReceivePort();
await Isolate.spawn(echoIsolate, receivePort.sendPort);
}
echoIsolate(SendPort sendPort) async { ... }
Что будет, если выбрать Dart для диссертации
32
Isolates
[“Foo”, port]
[“bar”, port]
Future sendToIsolateAndReturnResult(SendPort port, msg) {
ReceivePort response = new ReceivePort();
port.send([msg, response.sendPort]);
return response.first;
}
Что будет, если выбрать Dart для диссертации
33
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
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
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
Isolates
var globalStateInt = 0;
…
echoIsolate(SendPort sendPort) async {
// ...
await for (var msg in port) {
print('isolated state $globalState');
}
}
Что будет, если выбрать Dart для диссертации
37
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
Isolates
0 = ноль
var globalStateInt = 0;
…
echoIsolate(SendPort sendPort) async {
// ...
await for (var msg in port) {
print('isolated state $globalState');
}
}
globalStateInt ++;
Что будет, если выбрать Dart для диссертации
39
Isolates
0 = ноль
var globalStateInt = 0;
…
echoIsolate(SendPort sendPort) async {
// ...
await for (var msg in port) {
print('isolated state $globalState');
}
}
globalStateInt ++;
Что будет, если выбрать Dart для диссертации
40
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
Проблема #3:
Нет общей памяти у Isolates
?
Что будет, если выбрать Dart для диссертации
42
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
onControlMessage.listen((message) {
// handle control messages
toDronePort.send(message);
});
Стейт или �апдейты стейта
Картинка с Гарольдом
Где коптеры
Какой заряд
Куда летят
Что с заявками
Свободные станции
Веса графа
Корректировки маршрута
Что будет, если выбрать Dart для диссертации
44
Что вышло
Что будет, если выбрать Dart для диссертации
45
Картинка с Doge
Что будет, если выбрать Dart для диссертации
46
Производительность
Что будет, если выбрать Dart для диссертации
47
Многопоточность
Что будет, если выбрать Dart для диссертации
48
Типизация
Картинка со слезами счастья
Что будет, если выбрать Dart для диссертации
49
Нет готовых либ
Что будет, если выбрать Dart для диссертации
50
Dart для вас ОК, если вы:
Студент, учите первый язык
Уже на дарте
Хейтите дарт
Ищите что попробовать
Что будет, если выбрать Dart для диссертации
51
Язык - инструмент
Что будет, если выбрать Dart для диссертации
52
И еще
Что будет, если выбрать Dart для диссертации
53
Удачи!
Павел Герасимов, Wrike