-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgophercon.slide
131 lines (82 loc) · 5.01 KB
/
gophercon.slide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
Гоферкон from Раша
Go: плюсы и минусы на фоне языка Pony
Елеськин Григорий
Senior Developer, Mobalytics
https://github.com/Nyarum
* Что такое Go?
Компилируемый язык со сборщиком мусора, в императивном стиле с целью покрытия многопоточных и распределенных систем
> Его преимущества
- Гоурутины с каналами
- Быстрая компиляция
- Большая экосистема
- Простота разработки
* Что такое Pony?
Компилируемый ООП язык основанный на модели акторов с той же целью, что и Go, но с безопасным подходом ко всему
> Его преимущества
- Прозрачная и быстрая многопоточность
- То, что скомпилировалось - никогда не упадет
- Простота разработки
- Дженерики :)
* Подробнее о Pony
- Безопасная работа с типами
- Безопасная работа с памятью
- Скажем нет исключениям
- Data-race и Dead-lock free
* Как выглядит простейшая программа на Pony?
Давайте попробуем посмотреть глубже на простейшую инициализацию
.image hello_part1.png 475 _
* Продолжение
.image hello_part2.png 550 _
* Вывод
.code hello_output.txt
* Как реализованы акторы в Pony?
Чтобы объект в Pony был актором и мог исполняться на множестве ядер (Заметьте, один актор в одно время исполняется только в одном из потоков, что гарантирует постоянное состояние на момент исполнения)
.image actor_part1.png 450 _
* Продолжение
.image actor_part2.png 550 _
* Вывод
.code actor_output.txt
* Что дает система типов в Pony?
В Pony есть всем известные стандартные типы, которые свойственны всем ООП языкам, но так же он имеет так называемые Reference capabilities
- iso
- val
- ref
- box
- trn
- tag
* Вещи в кратком обзоре
Pony так же имеет
- Трейты (Как в Rust) / Интерфейсы (Как в Go)
- Алиасы типов
- Примитивы
- Деструктивное чтение
- Паттерн матчинг
- Алгебраические типы данных (Юнионы, перечисления, сопоставление)
Это не все, но это важная составляющая, которая позволяет не ограничиваться одним подходом к реализации
* Давайте заглянем под капот
- У Go есть шедулер
- У Pony есть шедулер
- Так в чем же отличие?
.image joke.jpg _ 600
* Как они могут быть симбиозом?
- Представим, что вы устали от очередной паники на продакшене по вине одной случайно забытой проверки на `nil`
Варианты:
- Берем библиотеку для GRPC на C, подключаем ее к Pony через FFI
- Пишем свой вариант *RPC на Pony, который может общаться с Go
- Пишем bi-directional варианты shared library
* Зачем нам это нужно?
Pony находится в альфа состоянии своего развития
Из этого исходят такие пункты, как:
- Малое сообщество = малое количество библиотек / их отсутствие
- Возможность писать безопасный конкурентный код, думая лишь о логике, а не безопаности передачи данных между потоками
- Быстрая дистрибуция данных (За счет отсутствия любого вида локов, у нас нет оверхеда на быстрый счет данных используя передачу между акторами)
* Банальное сравнение скорости передачи сообщений
- Результаты (Macbook Pro 2016 Jule) - [Go: ~2500ms, Pony: ~1150ms], 2x разница
.image code23.png _ 1100
* Конец
- Тут должны быть какие-то результаты плюсов и минусов, но я оставлю раздумия на вас
- ponylang.org (Сайт)
- ponyc.slack.com (Slack сообщество)
.image logo.jpg _ 500
Give me more peace in the world :)