SlideShare a Scribd company logo
1
Продуктивность и
производительность с
новым поколением
скриптовых языков
А н т о н Ю д и н ц е в
G a i j i n E n t e r t a i n m e n t
2
Gaijin – это
War Thunder,
Enlisted &
more
Компания Gaijin занимается разработкой и изданием
онлайн-игр – игр с большим жизненным циклом и для
всех платформ.
3
Продуктивность -
ключ к успеху
Evergreen-игры постоянно развиваются. В
первый же год после лонча в игре
появляется в разы больше контента, чем за
всё время разработки.
За 10 и более лет развития меняются
(и добавляются) платформы,
меняются разработчики, концепции.
Чтобы игра развивалась, необходимо,
чтобы скорость и продуктивность
разработки увеличивались после
релиза, а не снижались.
Архитектура и дизайн должны быть
гибкими и устойчивыми к изменениям.
4
С++ – основной
язык игр
Большая часть игр сделаны на С++,
это де-факто индустриальный стандарт.
• C++ обеспечивает оптимальный компромисс между
производительностью C и удобством написания
кода.
• Широкая поддержка на всех платформах и
middleware
• Lingua franca любой платформы С напрямую
совместима с C++
• Как следствие — мощные IDE, широкая
распространенность.
• Генерирует машинный код, оптимальный на каждой
платформе.
• Даже Unity написан на С++ 
• … к сожалению, этот язык — не без проблем.
5
Но …
Вот только часть проблем С++:
• C++ требует ручного менеджмента памяти
• С++ преисполнен undefined behavior, unspecified
behavior
• С++ медленно компилируется (увеличивая время
итерации) и линкуется.
• Это усложняет локализацию и воспроизведение
ошибок.
• Так как С++ генерирует машинный код, то
исправлений любой ошибки или добавление новой
функциональности, это выпуск патча или
обновления. И это не всегда возможно.
• С++ не очень дружественен к многопоточности,
допуская легкость создания data race / dead locks /
un-optimal multithreaded code
В конечном итоге, всё это просто замедляет
разработку, которая уходит на поиск и исправление
ошибок.
6
Скорость –
это и есть
качество.
Быстро или качественно?
• Качество – это просто функция от количества
итераций по улучшению
• Меньше длительность итерации == лучше качество
• Если минимальное время на «компиляцию и
перезапуск» составляют всего лишь 2 минуты (а это
очень хорошее время, большая часть игр даже
грузится куда дольше) – то вы сокращаете рабочий
час на 15%
• По исследованиям, если некоторое действие
требует нарушить flow более чем на 1 минуту,
продуктивные люди будут стараться его вообще
избегать.
• На самом деле, большая часть ситуаций, где вы бы
хотели лишь немного улучшить то или иное
поведение или намного более сложна в
воспроизведении (десятки минут) или и вовсе
непрактично воспроизводить.
• Эффективно, только Hot reload и модели данных и
кода обеспечивают продуктивность и качество
© Tynan Sylvester, RimWorld
7
Недостатки С++ в основном относятся к
продуктивности.
В целях сохранения производительности, мы жертвуем
продуктивностью, тратя время на поиск
трудноуловимых ошибок, утечек памяти, или просто на
компиляцию и перезапуск с целью воспроизведения
ошибки.
В основном, разработчики готовы жертвовать
производительностью для увеличения продуктивности.
Time-to-market — это ключевой показатель и для
бизнеса и для качества продукта.
… и тем не менее, производительность важна!
Производительность или
продуктивность?
Tim Sweeney, 2005, «The next mainstream programming language. The
game developer’s perspective»
8
Tim Sweeney,
2005
«The next
mainstream
programming
language»
9
BTW,
UE4 real mainstream programing
language, 2020
blueprintsfromhell.tumblr.co
m/image/185614874046
10
Инструменты
программисто
в
Игровая индустрия быстро растёт и развивается, и для
художников количество и качество инструментов,
увеличивающих производительность их труда растёт
опережающими темпами.
Инструменты, улучшающие производительность труда
программистов существенно отстают.
За последние годы лучшими действительно новыми
инструментами для работы на С++ стали анализаторы,
санитайзеры и фаззеры (…и clang-format).
И это было 10 лет+ назад.
11
Инструменты
выручают?
• В War Thunder используются и sanitizers, и статические
анализаторы кода, и автоматическое тестирование.
Это позволяет решить/поймать/не допустить сотни и
тысячи ошибок в год.
• И всё равно, в среднем, в год 5% всех «крашей»
просочившихся хотя бы в QA билд, были связаны
именно с ошибками управления/доступа памяти (в
2020 это 333/6514)
• Большая часть остальных — это логические ошибки
модели данных, ошибки испорченных данных и
проблемы железа
12
Скриптовые
языки?
• Основным решением для увеличения продуктивности
таким образом, до сих пор остаются скриптовые языки
(вот уже ~30 лет). QuakeScript, UnrealScript, Lua,
Squirrel и другие
• Высокая скорость разработки, низкая когнитивная
нагрузка, автоматический менеджмент памяти,
высокая безопасность (memory safety)
• Hot reload, горячая смена модели данных (ECS)
• Легкость в воспроизведении ошибок, легкость в их
исправлении
• Легкость в освоении, простота концепций
• Решение, используемое в большинстве PC/консольных
игр (Valve, id Software, Bungie, Epic Games, Ubisoft, etc.)
• В 2021м самый популярный язык разработки игр, по
количеству и разработчиков и игр — это Lua (Roblox).
13
Code as data –
серебряная пуля
оперирования
• Code as data!
• Возможность обновления игры «на лету», в том числе
в продакшене, без проблем для пользователей.
• В War Thunder каждый месяц выходят сотни
«невидимых» обновлений (скриптов игры), которые
исправляют ошибки, улучшают UX, и добавляют
пользовательский опыт
• Только за один рождественский период 2019/2020,
когда выпуск патчей на консолях вообще невозможен,
было сделано 650 коммитов, которые исправляют
ошибки и добавляют контент пользователям.
• В том числе такие «невидимые» обновления
позволяют «исправлять» и ошибки в С++ коде,
«обходя» сломанную функциональность.
• (…не относится к Unity).
14
Скриптовые
языки 
15
Dynamic typing &
GC
• Большая часть скриптовых языков — dynamic typed и
с automatically managed memory (GC/ref-counted).
Тому есть и исторические и объективные причины
(удобство написания без дженериков).
• Dynamic Typing вызывает ошибки, которые можно
увидеть только в момент выполнения кода, так как в
фазу компилирования информация о типах
неизвестна. Это драматически усложняет
поддержание написанного кода и рефакторинг,
«резистентность к изменениям».
• GC — существенно увеличивает пиковое
потребление памяти, и создает неприятные «пики»
(stop-the-world GC). На самом деле, это приводит к
необходимости управлять временем жизни (ручное
управление памятью)
• Референс типы и GC существенно замедляют работу
программы (cache-locality). (А Boehm GC — ещё
хуже)
16
Dynamic Typing и
analyzers
• War Thunder использует Quirrel.io (форк squirrel lang),
520k+ LoC – в два+ раза больше (и более
лаконичного), чем во всём Gears of War.
• Этот код надо менять, рефакторить, развивать и
поддерживать!
• Мы написали (и развиваем) статический анализатор
кода, который суммарно ретроспективно(!) нашёл
десятки или сотни ошибок в скриптах, успешно и
долго работающих на продакшене на миллионах
человек (и не допускает возникновение новых).
• Существуют так же форки Typed Lua, TypeScript и
прочая.
• Но динамическая природа – существенное свойство
уже написанного кода, самого скрипта и подхода к
разработке, влияющего и на производительность
этого кода.
17
… и
производительно
cть
Игроки могут начать играть только из-
за красивых скриншотов.
Но даже если игра и красива и
интересна, играть при низком FPS —
некомфортно.
Количество «слабого» (по CPU)
железа растёт, а не падает. Ноутбуки
«отменили» закон Мура.
Одна из самых популярных «новых»
платформ – Switch – слабее консолей
прошлого поколения.
Самые быстрые скрипт языки
(LuaJIT, Wren) в разы медленнее
наивного C++!
И даже компилируемый C# обладает существенными
перформанс проблемами и сильно зависит от JIT.
18
Реальные улучшения
инструментария – Unity/C#.
• Устойчивый к ошибкам язык — большая часть
ошибок С++ просто невозможна в написании.
• Более строго типизированный.
• Нет ручного управления памятью
• Легче кривая обучения.
• EC/ECS модель
Но…
• На самом деле управление памятью есть, а GC всё
равно приносит сюрпризы.
• Во многих случаях разница производительности с
C++ достигает порядка. AAA-индустрия не готова к
такой цене.
• Hot reload долгий и не очень работающий
• Обновления требуют патчей
C#
..и Unity
19
Blueprints.
• Да, это тяжелый для рефакторинга и поддержки
код.
• Программисты не любят «писать мышью».
• Высокая когнитивная нагрузка на чтение.
• Даже «нативизированные» блюпринты в разы
медленнее С++.
…и тем не менее, это:
• Устойчивый к ошибкам язык — большая часть
ошибок С++ просто невозможна в написании.
• Строго типизированный.
• Нет ручного управления памятью
• Легкая кривая обучения.
20
2018-2019
Использовать скрипт-языки – жизненная необходимость и
для оперирования и особенно, для продуктивности
разработки (в сравнении с С++).
В играх - никакая производительность не бывает «лишней».
Часть скриптового кода превращается в «технический долг»
(см. Optimizing Fortnite).
К сожалению, все существовавшие скриптовые языки не
отвечали требованиям изложенным в докладе 2005г от Tim
Sweeney «The next mainstream programming language».
Не отвечал и не отвечает им и С++ (и C#), которые
вдобавок существенно усложняют оперирование онлайн-
игрой.
И мы запустили разработку своего языка!
…а Джонатан Блоу начал делать Jai.
21
Язык будущего
Безопасность.
Безопасный, без необходимости ручного управления
памятью.
… но без высокой цены GC
«Поддерживаемость»
Статически типизированный, strong typed (C++ — weak
typed)
Парето-оптимальная производительность.
Производительность в 90% случаях должна быть не
меньше 90% от наивного С++. А лучше — быстрее
наивного С++.
..и быстрый interop c C++!
Удобство использования и оперирования.
Hot reload, рефакторинг тулчейн, интерпретируемость.
Низкая резистентность к изменениям модели данных.
ECS-friendly, reflection, кастомизация языка.
22
daScript • Первая версия: 15.08.2019
• С тех пор написано 150k
(лаконичного) LoC. (200k+ с {})
• Суммарное время компиляции всех
строк — 2.1 секунды в один поток
на Xbox.
• Среднее время hot reload одной
системы — измеряется
миллисекундами.
• Высокая продуктивность и
высокая безопасность.
• Ahead-of-time compilation, yet
patchable with interpretation
• strong static typing
• amazing performance
• instant hot reload
• generics and type inference
• fast and easy-to-reset execution context, allowing
automatic burst free memory management. No memory
leaks yet with no GC/reference counting cost.
• Hygienic macro, AST/reader macro, reflection – ECS-
friendly
• Fast and powerful C++ interop
• Data oriented
•Open Source – BSD license
23
Laconic&unifor
mal
def fibR(n)
if (n < 2)
return n
else
return fibR(n - 1) + fibR(n - 2)
def fibI(n)
var last = 0
var cur = 1
for i in range(0, n-1)
let tmp = cur
cur += last
last = tmp
return cur
24
High-
performance
• В интерпретации, в среднем в 3-6 раз
быстрее Lua/Squirrel в интерпретации
и в 2 раза быстрее LuaJIT
• В data-oriented ECS коде — в ~30+
раз
• В Ahead-of-time от 10% медленнее, до
30% быстрее «наивного» C++
• Burst-free GC, no memory leak memory
management
25
Powerful tools
• Powerful VS Code extension (LSP), with
auto-completion, type/function hinting,
go-to-definition, etc.
• Debugger
• Profiler
• GitHub Copilot
26
VS Code IDE
27
VS Code IDE
28
Debugger
29
GitHub Copilot
30
Example: done in ~1hr, 40
iterations
31
Вопросы?
Live coding:
https://cutt.ly/mWRGpCJ
google “youtube dascript ext”

More Related Content

Similar to Продуктивность и производительность в новых скриптовых языках / Антон Юдинцев (Gaijin Entertainment)

Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программист
ru_Parallels
 
Разработчик компьютерных игр
Разработчик компьютерных игрРазработчик компьютерных игр
Разработчик компьютерных игр
ir_556
 
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesAlexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
White Nights Conference
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
e-Legion
 
Характеристики языка С++
Характеристики языка С++Характеристики языка С++
Характеристики языка С++
DEVTYPE
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинOntico
 
Применение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеПрименение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзе
Alexander Byndyu
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU
 
трики разработчика мобильных игр
трики разработчика мобильных игртрики разработчика мобильных игр
трики разработчика мобильных игрAlexander Degtyarev
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
Provectus
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
HappyDev
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Anthony Marchenko
 
Team workflow
Team workflowTeam workflow
Сергей Константинов (Яндекс)
Сергей Константинов (Яндекс)Сергей Константинов (Яндекс)
Сергей Константинов (Яндекс)Ontico
 
1. yandex maps
1. yandex maps1. yandex maps
1. yandex mapsOntico
 
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
Maksym Bezuglyi
 
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014it-people
 

Similar to Продуктивность и производительность в новых скриптовых языках / Антон Юдинцев (Gaijin Entertainment) (20)

Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программист
 
Разработчик компьютерных игр
Разработчик компьютерных игрРазработчик компьютерных игр
Разработчик компьютерных игр
 
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesAlexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
 
Характеристики языка С++
Характеристики языка С++Характеристики языка С++
Характеристики языка С++
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
Применение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеПрименение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзе
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 
трики разработчика мобильных игр
трики разработчика мобильных игртрики разработчика мобильных игр
трики разработчика мобильных игр
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 
Kranonit s16 (python). sergey burma
Kranonit s16 (python). sergey burmaKranonit s16 (python). sergey burma
Kranonit s16 (python). sergey burma
 
Team workflow
Team workflowTeam workflow
Team workflow
 
Сергей Константинов (Яндекс)
Сергей Константинов (Яндекс)Сергей Константинов (Яндекс)
Сергей Константинов (Яндекс)
 
1. yandex maps
1. yandex maps1. yandex maps
1. yandex maps
 
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
 
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
 

More from DevGAMM Conference

The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...
DevGAMM Conference
 
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
DevGAMM Conference
 
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
DevGAMM Conference
 
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
DevGAMM Conference
 
AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)
DevGAMM Conference
 
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
DevGAMM Conference
 
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
DevGAMM Conference
 
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
DevGAMM Conference
 
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
DevGAMM Conference
 
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
DevGAMM Conference
 
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
DevGAMM Conference
 
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
DevGAMM Conference
 
How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...
DevGAMM Conference
 
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
DevGAMM Conference
 
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
DevGAMM Conference
 
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
DevGAMM Conference
 
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
DevGAMM Conference
 
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
DevGAMM Conference
 
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
DevGAMM Conference
 
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
DevGAMM Conference
 

More from DevGAMM Conference (20)

The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...
 
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
 
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
 
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
 
AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)
 
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
 
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
 
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
 
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
 
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
 
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
 
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
 
How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...
 
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
 
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
 
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
 
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
 
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
 
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
 
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
 

Продуктивность и производительность в новых скриптовых языках / Антон Юдинцев (Gaijin Entertainment)

  • 1. 1 Продуктивность и производительность с новым поколением скриптовых языков А н т о н Ю д и н ц е в G a i j i n E n t e r t a i n m e n t
  • 2. 2 Gaijin – это War Thunder, Enlisted & more Компания Gaijin занимается разработкой и изданием онлайн-игр – игр с большим жизненным циклом и для всех платформ.
  • 3. 3 Продуктивность - ключ к успеху Evergreen-игры постоянно развиваются. В первый же год после лонча в игре появляется в разы больше контента, чем за всё время разработки. За 10 и более лет развития меняются (и добавляются) платформы, меняются разработчики, концепции. Чтобы игра развивалась, необходимо, чтобы скорость и продуктивность разработки увеличивались после релиза, а не снижались. Архитектура и дизайн должны быть гибкими и устойчивыми к изменениям.
  • 4. 4 С++ – основной язык игр Большая часть игр сделаны на С++, это де-факто индустриальный стандарт. • C++ обеспечивает оптимальный компромисс между производительностью C и удобством написания кода. • Широкая поддержка на всех платформах и middleware • Lingua franca любой платформы С напрямую совместима с C++ • Как следствие — мощные IDE, широкая распространенность. • Генерирует машинный код, оптимальный на каждой платформе. • Даже Unity написан на С++  • … к сожалению, этот язык — не без проблем.
  • 5. 5 Но … Вот только часть проблем С++: • C++ требует ручного менеджмента памяти • С++ преисполнен undefined behavior, unspecified behavior • С++ медленно компилируется (увеличивая время итерации) и линкуется. • Это усложняет локализацию и воспроизведение ошибок. • Так как С++ генерирует машинный код, то исправлений любой ошибки или добавление новой функциональности, это выпуск патча или обновления. И это не всегда возможно. • С++ не очень дружественен к многопоточности, допуская легкость создания data race / dead locks / un-optimal multithreaded code В конечном итоге, всё это просто замедляет разработку, которая уходит на поиск и исправление ошибок.
  • 6. 6 Скорость – это и есть качество. Быстро или качественно? • Качество – это просто функция от количества итераций по улучшению • Меньше длительность итерации == лучше качество • Если минимальное время на «компиляцию и перезапуск» составляют всего лишь 2 минуты (а это очень хорошее время, большая часть игр даже грузится куда дольше) – то вы сокращаете рабочий час на 15% • По исследованиям, если некоторое действие требует нарушить flow более чем на 1 минуту, продуктивные люди будут стараться его вообще избегать. • На самом деле, большая часть ситуаций, где вы бы хотели лишь немного улучшить то или иное поведение или намного более сложна в воспроизведении (десятки минут) или и вовсе непрактично воспроизводить. • Эффективно, только Hot reload и модели данных и кода обеспечивают продуктивность и качество © Tynan Sylvester, RimWorld
  • 7. 7 Недостатки С++ в основном относятся к продуктивности. В целях сохранения производительности, мы жертвуем продуктивностью, тратя время на поиск трудноуловимых ошибок, утечек памяти, или просто на компиляцию и перезапуск с целью воспроизведения ошибки. В основном, разработчики готовы жертвовать производительностью для увеличения продуктивности. Time-to-market — это ключевой показатель и для бизнеса и для качества продукта. … и тем не менее, производительность важна! Производительность или продуктивность? Tim Sweeney, 2005, «The next mainstream programming language. The game developer’s perspective»
  • 9. 9 BTW, UE4 real mainstream programing language, 2020 blueprintsfromhell.tumblr.co m/image/185614874046
  • 10. 10 Инструменты программисто в Игровая индустрия быстро растёт и развивается, и для художников количество и качество инструментов, увеличивающих производительность их труда растёт опережающими темпами. Инструменты, улучшающие производительность труда программистов существенно отстают. За последние годы лучшими действительно новыми инструментами для работы на С++ стали анализаторы, санитайзеры и фаззеры (…и clang-format). И это было 10 лет+ назад.
  • 11. 11 Инструменты выручают? • В War Thunder используются и sanitizers, и статические анализаторы кода, и автоматическое тестирование. Это позволяет решить/поймать/не допустить сотни и тысячи ошибок в год. • И всё равно, в среднем, в год 5% всех «крашей» просочившихся хотя бы в QA билд, были связаны именно с ошибками управления/доступа памяти (в 2020 это 333/6514) • Большая часть остальных — это логические ошибки модели данных, ошибки испорченных данных и проблемы железа
  • 12. 12 Скриптовые языки? • Основным решением для увеличения продуктивности таким образом, до сих пор остаются скриптовые языки (вот уже ~30 лет). QuakeScript, UnrealScript, Lua, Squirrel и другие • Высокая скорость разработки, низкая когнитивная нагрузка, автоматический менеджмент памяти, высокая безопасность (memory safety) • Hot reload, горячая смена модели данных (ECS) • Легкость в воспроизведении ошибок, легкость в их исправлении • Легкость в освоении, простота концепций • Решение, используемое в большинстве PC/консольных игр (Valve, id Software, Bungie, Epic Games, Ubisoft, etc.) • В 2021м самый популярный язык разработки игр, по количеству и разработчиков и игр — это Lua (Roblox).
  • 13. 13 Code as data – серебряная пуля оперирования • Code as data! • Возможность обновления игры «на лету», в том числе в продакшене, без проблем для пользователей. • В War Thunder каждый месяц выходят сотни «невидимых» обновлений (скриптов игры), которые исправляют ошибки, улучшают UX, и добавляют пользовательский опыт • Только за один рождественский период 2019/2020, когда выпуск патчей на консолях вообще невозможен, было сделано 650 коммитов, которые исправляют ошибки и добавляют контент пользователям. • В том числе такие «невидимые» обновления позволяют «исправлять» и ошибки в С++ коде, «обходя» сломанную функциональность. • (…не относится к Unity).
  • 15. 15 Dynamic typing & GC • Большая часть скриптовых языков — dynamic typed и с automatically managed memory (GC/ref-counted). Тому есть и исторические и объективные причины (удобство написания без дженериков). • Dynamic Typing вызывает ошибки, которые можно увидеть только в момент выполнения кода, так как в фазу компилирования информация о типах неизвестна. Это драматически усложняет поддержание написанного кода и рефакторинг, «резистентность к изменениям». • GC — существенно увеличивает пиковое потребление памяти, и создает неприятные «пики» (stop-the-world GC). На самом деле, это приводит к необходимости управлять временем жизни (ручное управление памятью) • Референс типы и GC существенно замедляют работу программы (cache-locality). (А Boehm GC — ещё хуже)
  • 16. 16 Dynamic Typing и analyzers • War Thunder использует Quirrel.io (форк squirrel lang), 520k+ LoC – в два+ раза больше (и более лаконичного), чем во всём Gears of War. • Этот код надо менять, рефакторить, развивать и поддерживать! • Мы написали (и развиваем) статический анализатор кода, который суммарно ретроспективно(!) нашёл десятки или сотни ошибок в скриптах, успешно и долго работающих на продакшене на миллионах человек (и не допускает возникновение новых). • Существуют так же форки Typed Lua, TypeScript и прочая. • Но динамическая природа – существенное свойство уже написанного кода, самого скрипта и подхода к разработке, влияющего и на производительность этого кода.
  • 17. 17 … и производительно cть Игроки могут начать играть только из- за красивых скриншотов. Но даже если игра и красива и интересна, играть при низком FPS — некомфортно. Количество «слабого» (по CPU) железа растёт, а не падает. Ноутбуки «отменили» закон Мура. Одна из самых популярных «новых» платформ – Switch – слабее консолей прошлого поколения. Самые быстрые скрипт языки (LuaJIT, Wren) в разы медленнее наивного C++! И даже компилируемый C# обладает существенными перформанс проблемами и сильно зависит от JIT.
  • 18. 18 Реальные улучшения инструментария – Unity/C#. • Устойчивый к ошибкам язык — большая часть ошибок С++ просто невозможна в написании. • Более строго типизированный. • Нет ручного управления памятью • Легче кривая обучения. • EC/ECS модель Но… • На самом деле управление памятью есть, а GC всё равно приносит сюрпризы. • Во многих случаях разница производительности с C++ достигает порядка. AAA-индустрия не готова к такой цене. • Hot reload долгий и не очень работающий • Обновления требуют патчей C# ..и Unity
  • 19. 19 Blueprints. • Да, это тяжелый для рефакторинга и поддержки код. • Программисты не любят «писать мышью». • Высокая когнитивная нагрузка на чтение. • Даже «нативизированные» блюпринты в разы медленнее С++. …и тем не менее, это: • Устойчивый к ошибкам язык — большая часть ошибок С++ просто невозможна в написании. • Строго типизированный. • Нет ручного управления памятью • Легкая кривая обучения.
  • 20. 20 2018-2019 Использовать скрипт-языки – жизненная необходимость и для оперирования и особенно, для продуктивности разработки (в сравнении с С++). В играх - никакая производительность не бывает «лишней». Часть скриптового кода превращается в «технический долг» (см. Optimizing Fortnite). К сожалению, все существовавшие скриптовые языки не отвечали требованиям изложенным в докладе 2005г от Tim Sweeney «The next mainstream programming language». Не отвечал и не отвечает им и С++ (и C#), которые вдобавок существенно усложняют оперирование онлайн- игрой. И мы запустили разработку своего языка! …а Джонатан Блоу начал делать Jai.
  • 21. 21 Язык будущего Безопасность. Безопасный, без необходимости ручного управления памятью. … но без высокой цены GC «Поддерживаемость» Статически типизированный, strong typed (C++ — weak typed) Парето-оптимальная производительность. Производительность в 90% случаях должна быть не меньше 90% от наивного С++. А лучше — быстрее наивного С++. ..и быстрый interop c C++! Удобство использования и оперирования. Hot reload, рефакторинг тулчейн, интерпретируемость. Низкая резистентность к изменениям модели данных. ECS-friendly, reflection, кастомизация языка.
  • 22. 22 daScript • Первая версия: 15.08.2019 • С тех пор написано 150k (лаконичного) LoC. (200k+ с {}) • Суммарное время компиляции всех строк — 2.1 секунды в один поток на Xbox. • Среднее время hot reload одной системы — измеряется миллисекундами. • Высокая продуктивность и высокая безопасность. • Ahead-of-time compilation, yet patchable with interpretation • strong static typing • amazing performance • instant hot reload • generics and type inference • fast and easy-to-reset execution context, allowing automatic burst free memory management. No memory leaks yet with no GC/reference counting cost. • Hygienic macro, AST/reader macro, reflection – ECS- friendly • Fast and powerful C++ interop • Data oriented •Open Source – BSD license
  • 23. 23 Laconic&unifor mal def fibR(n) if (n < 2) return n else return fibR(n - 1) + fibR(n - 2) def fibI(n) var last = 0 var cur = 1 for i in range(0, n-1) let tmp = cur cur += last last = tmp return cur
  • 24. 24 High- performance • В интерпретации, в среднем в 3-6 раз быстрее Lua/Squirrel в интерпретации и в 2 раза быстрее LuaJIT • В data-oriented ECS коде — в ~30+ раз • В Ahead-of-time от 10% медленнее, до 30% быстрее «наивного» C++ • Burst-free GC, no memory leak memory management
  • 25. 25 Powerful tools • Powerful VS Code extension (LSP), with auto-completion, type/function hinting, go-to-definition, etc. • Debugger • Profiler • GitHub Copilot
  • 30. 30 Example: done in ~1hr, 40 iterations