Содержание докладов Haxe Summit 2018

Привет всем!

Этой статьей хочу начать серию переводов / краткое содержание докладов, которые были представлены на Haxe Summit 2018, 3-5 мая. Кстати, в нашем telegram-чате переводы будут появляться раньше на несколько дней. 

Что ж перейдем сразу к делу...

Josefiene

Конференция началась с приветствия от Josefiene Pertosa, в котором она рассуждала о том, что нужно человеку для счастья. Источников счастья может быть множество, но для программистов одним из таких источников может быть ощущение движения вперед, ощущение прогресса, достижения чего-либо нового, осознания, что в процессе ты узнаешь что-то новое и чувствуешь вдохновение.

И Haxe как уникальный язык может дать нам, программистам, новый опыт, дать инструменты для необычного решения задач и тем самым стать таким источником вдохновения. Сама конференция тоже должна вдохновить нас и дать пищу для ума для дальнейших действий.

Далее последовал традиционный доклад от Nicolas Cannasse о текущем состоянии дел.

Nicolas

Начал он с краткой истории Haxe и Haxe Foundation: 

  • в 2005 началась работа над Haxe, в основном в свободное время;
  • в 2012 Nicolas покинул компанию Motion Twin и основал собственную - Shiro Games. Также в это время появился Haxe Foundation с целью передачи прав на Haxe этой организации;
  • в 2013 у Haxe Foundation появляются первые партнеры, спонсируется работа над компилятором, сайтом и т.д.;
  • первые годы Haxe Foundation были доступны небольшие бюджеты - около 60 тыс. евро / год в 2015-2016 годах;
  • в 2017 бюджет увеличился до 100 тыс. евро / год и стало возможным нанять дополнительно людей на постоянную работу (но об этом чуть позже).

Новые партнеры Haxe Foundation:

Новые партнеры Haxe Foundation

Команда у Haxe небольшая, приятно знать, что двое из них - это наши соотечественники: Александр Кузьменко (занимается поддержкой PHP-платформы) и Даниил Коростелёв (занимается поддержкой Haxe со стороны IDE).
Также в этом году к команде присоединился Phil Chertok в качестве директора по маркетингу (он также выступил с докладом).

Haxe Team

Работа над языком координируется через Slack.
Средства Github используются для:

  • отслеживания проблем, найденных пользователями (через issues);
  • рассмотрения и принятия pull request’ов;
  • continuous integration (непрерывной интеграции)

How Haxe Team work

Кроме основного репозитория существует проект Haxe Evolution, предназначенный для внесения и обсуждения предложений от членов сообщества на предмет новых возможностей языка и изменений в архитектуре компилятора.

Haxe Evolution

Примерами новых фич, которые появились в языке с помощью Haxe Evolution, являются тип Any и Arrow Functions.

Далее Nicolas перечислил сильные и слабые стороны команды компилятора и Haxe Foundation.

What Haxe team good at

Как видно, сильными сторонами он считает, что им удается:

  • довольно длительное время заниматься поддержкой языка;
  • поддерживать все 12 целевых платформ в актуальном состоянии с учетом всех новых фич языка;
  • предоставлять один из самых быстрых компиляторов языков высокого уровня;
  • поддерживать довольно высокий уровень стабильности языка не привнося изменений, нарушающих обратную совместимость;
  • поддерживать чистоту кодовой базы;
  • поддерживать здоровую атмосферу в сообществе, избегая конфликтов.

What Haxe team bad at

Слабыми же сторонами Nicolas считает:

  • соблюдение графика выпуска обновлений;
  • длительность принятия решений;
  • “связь с внешним миром” - не удается донести информацию о Haxe новым людям и компаниям, вследствие чего сообщество у него небольшое;
  • развитие бизнеса - хотя Haxe Foundation постепенно находит новых партнеров и наращивает бюджеты, этот процесс занимает довольно долгое время.

Говоря о развитии Haxe Foundation, Nicolas упомянул, что они продолжают поиски разработчика компилятора на постоянную работу.

Далее Nicolas рассказал о том, что было сделано непосредственно с компилятором за прошедшие с Haxe Summit 2017 полгода. Почти 1900 коммитов - это вам не шутки :)

Haxe 4

Также нас ждет новый интерпретатор макросов Eval, о котором в прошлом году рассказывал Simon Krajewski. Eval в среднем в 4 раза быстрее своего предшественника, а в некоторых случаях - до 10 раз быстрее.
Улучшена стабильность Compilation Server’а. Данные изменения означают сокращение времени компиляции, а также лучшую поддержку автодополнения для IDE.
Очень большое внимание уделяется интеграции с Visual Studio Code. Данная IDE стала очень популярна среди Haxe-программистов - доказательством этого является тот факт, что большая часть докладчиков использовала VS Code (сам Nicolas несколько лет подряд использовал FlashDevelop, а на этой конференции он уже пересел на VS Code).

Haxe tools support

В Haxe 4 нас ждут:

  • Arrow functions. Сам Nicolas изначально был против данной фичи, но поработав с Promises, он согласился с добавлением их в язык;
  • новый синтаксис описания типов функций;
  • новое ключевое слово final, которое можно использовать как для локальных переменных, так и для членов классов. При этом final действует на переменную как на ссылку, а не как на значение, то есть, например, пометив массив как final, можно будет изменять его содержимое;
  • final можно использовать для полей объектов. final x:Int можно рассматривать как короткую форму записи var x(default, null):Int;
  • “подтяжка” синтаксиса: @:enum abstract стал enum abstract (изначально абстрактные перечисления былы экспериментальной фичей).

More Haxe 4

Plans for Haxe 4+

Для следующей версии (Haxe 4.1?) запланированы следующие фичи:

  • поддержка юникода по-умолчанию. Данное изменение касается в основном c++ и neko (лично я это изменение жду, т.к. работа, например, с кириллицей, должна очень сильно упроститься, уйдет необходимость использования класса Utf8);
  • новый синтаксис итерации по мапам;
  • возможность встраивания xml прямо в код (тоже довольно удобно);
  • реализация async / await для всех платформ;
  • и т.д.

Большую часть своего выступления Nicolas посвятил HashLink - новой виртуальной машине для Haxe. Долгое время я вообще не знал что это такое :)

HashLink target

С использованием HashLink выпущена игра от студии Shiro Games - NorthGard. Таким образом Nicolas считает, что HashLink готов к использованию в продакшене коммерческих проектов.

Northgard

Главной особенностью HashLink является Dual compilation (“двойная” компиляция) -  возможность скомпилировать проект в байт-код или в нативный код.
При этом байт-код на выходе получается намного быстрее байт-кода neko, связано это с тем, что neko - динамически типизирован, а HashLink - статически.
Нативный код - это по сути Си, который затем можно скомпилировать в исполняемый файл.

HashLink dual compilation

При этом Nicolas считает, что удобнее использовать именно вариант с компиляцией проектов в байт-код (NorthGard именно так и выпущен в Steam), при этом не требуется промежуточный шаг компиляции кода, а байт-код получается незначительно медленее нативного кода (по его оценкам разница в скорости работы составляет около 30%). Разница в производительности достигается тем, что код дополнительно оптимизируется Си-компилятором.
В случае байт-кода проект можно запустить с помощью JIT-рантайма, используя параметры запуска: hl myApp.hl <args>.

HashLink dual compilation details

Оба варианта (байт-код или нативный код) используют общий компактный рантайм, включающий в себя стандартную библиотеку (например, для работы со строками) и garbage collector (кстати, Nicolas признает, что garbage collector в hxcpp работает намного быстрее, поэтому для релиза игр на HashLink на консолях нужно проводить дополнительную работу - стараться как можно меньше создавать новые объекты во время исполнения, а также дополнительно отслеживать утечки памяти).
С недавнего времени HashLink-проекты можно запустить не только на десктопах, но и на мобильных платформах и на консолях (Nicolas обещал скорый релиз Northgard на консолях).
Еще одной сильной стороной HashLink является поддержка инструментов для разработчика - интеграция с VSCode с полной поддержкой дебаггера, в том числе с возможность отладки многопоточного кода.

И завершил свой доклад Nicolas перечислив успешные игровые проекты, использующие Haxe:

Vegas world

Vegas World - социальное казино от FlowPlay, которое перешло с Flash на html5 с помощью OpenFL (об этом были доклады в прошлом году, а также в этом). 

Northgard

Northgard - стратегия от студии Shiro Games

DeadCells

Dead Cells - игра от MotionTwin

Steam indie games

И Northgard и Dead Cells сделаны на HashLink + Heaps, имеют высокие оценки от пользователей и продались (по примерным оценкам SteamSpy) более чем 500 тыс. копий каждая. Обе игры планируется выпустить на консолях (PS4 и Xbox One).