7 февраля в офисе компании InnoGames состоялась очередная мини-конференция HaxeUp Sessions 2020 Hamburg, на которой Саймон Краевский отчитался о проделанной работе, рассказал немного о ближайшем будущем Haxe. И здесь я хотел бы представить перевод основной части его доклада (пропустив начало, в котором Саймон рассказывает о том, как он попал в Haxe и чем занимался в Haxe Foundation. Об этом он уже рассказывал на предыдущем HaxeUp).
Кратко о том, что было сделано за прошедший 2019 год:
- в феврале и марте вышли 2 релиз-кандидата (4.0.0-rc1 и 4.0.0-rc2)
- в апреле к команде Haxe Foundation присоединились 2 новых человека: Аурел Били начал проходить шестимесячную практику в качестве интерна, а Александр Кузьменко стал вторым штатным разработчиком компилятора
- в мае прошел Haxe US Summit 2019
- в июне вышел Haxe 4.0.0-rc3. А в сентябре — Haxe 4.0.0-rc4 и Haxe 4.0.0-rc5
- и в октябре, после нескольких лет разработки, вышел Haxe 4.0.0
после этого до конца 2019 года вышло несколько минорных релизов, включающих в себя в основном исправления найденных проблем. На текущий момент последняя официальная версия Haxe — 4.0.5.
Рассказав о прошлом, давайте посмотрим, что ждет Haxe в 2020 году:
В первой половине года планируется выпустить Haxe 4.1. Данная версия будет включать в себя:
- оптимизация хвостовых вызовов (tail-recursion elimination) — если в самом конце тела функции она вызывает сама себя, то компилятор может заменить этот вызов на цикл (данная фича уже присутствует в ночных сборках)
- поддержка SSL в интерпретаторе макросов eval (соответствующий pull request был смержен на прошлой неделе)
- в настоящее время Александр Кузьменко работает над улучшением обработки исключений (планируется добавить новый класс
haxe.Exception
, который можно будет использовать в качестве базового класса для исключений) - улучшение поддержки IDE со стороны компилятора. Для крупных проектов скорость работы IDE особенно актуальна (в том числе и для игры Forge of Empires от InnoGames — партнера Haxe Foundation)
Во второй половине 2020 года планируется добавить:
- асинхронное системное API — asys (о нем в октябре подробно рассказывал Аурел Били)
- корутины, обсуждение которых сильно затянулась, но Саймон надеется, что скоро команда придет к консенсусу, после чего можно будет приступить к их реализации
- функции, доступные на уровне модуля, с которыми отпадает необходимость "оборачивать" функции в классы
И в октябре планируется провести европейский Haxe Summit в Германии, в городе Линц-ам-Райн.
Давайте поговорим немного о Haxe Foundation, потому что обычно все обсуждают сам язык, его фичи, но практически никогда не говорится о том, что же такое Haxe Foundation и чем вообще занимается.
На сайте Haxe можно найти следующее описание: "Haxe Foundation был создан для долгосрочного финансирования разработки Haxe и оказания поддержки компаниям, использующим Haxe". И это, в принципе, все — Haxe Foundation оказывает платную поддержку своим партнерам.
Давайте сначала я расскажу о том, куда идут полученные деньги:
- во-первых, часть средств идет на оплату труда разработчиков (в настоящий момент это Саймон Краевский и Александр Кузьменко)
- во-вторых, часть идет на финансирование отдельных проектов. В настоящее время такой проект один — dts2hx Джорджа Корни. dts2hx конвертирует декларативные файлы TypeScript (d.ts) в Haxe-экстерны. Некоторое время назад Саймон начинал работать над этим проектом, он написал генератор парсеров, применил его к декларативным файлам TypeScript, следующим шагом была генерация экстернов. Сначала такой подход сработал, но с течением времени TypeScript эволюционировал и парсить его стало существенно сложнее. Вместо парсинга было бы проще задействовать компилятор самого TypeScript, чтобы сам компилятор сразу выдавал Haxe-экстерны. Именно над этим и работает Джордж, в настоящее время у него есть прототип, примерно в марте ожидается версия, которую можно будет тестировать. В итоге dts2hx должен значительно повысить качество экстернов для JavaScript-библиотек и упростить их использование из Haxe
- и в-третьих, часть средств Haxe Foundation идет на организацию мероприятий. Например, упомянутый ранее EU Haxe Summit 2020.
Теперь давайте рассмотрим, в чем выгода партнерства с Haxe Foundation для компаний:
- это, конечно же, приоритетное исправление ошибок и внесение улучшений
партнеры также могут влиять на выбор стратегических направлений развития. Обычно это происходит в рамках Haxe Summit, где можно обсудить вещи, на которых по мнению партнеров стоит сосредоточить усилия. На основании таких встреч делаются выводы о дальнейшей работе - однако, будучи партнером Haxe Foundation, вам не удастся "купить" нужную вам фичу в языке. Саймон специально оговорил этот момент, т.к. ранее один из бывших партнеров запросил привнести в Haxe фичу из TypeScript, но в Haxe Foundation решили, что она не впишется в язык. В таких случаях вместо этого Haxe Foundation предложит помощь в решении существующей проблемы, т.к. обычно вам требуется именно решить существующую проблему, а не получить новую фичу в языке
- связь между Haxe Foundation и партнерами обычно осуществляется через "послов Haxe Foundation". В случае InnoGames таким человеком является Даниил Коростелев — он состоит в Haxe Foundation с 2013 года и в то же время является сотрудником InnoGames.
В качестве примера работы Haxe Foundation с партнерами рассмотрим реализацию поддержки функции "Go To Implementations" в VS Code:
Обычно в IDE есть функция перехода от определения интерфейса ко всем классам, реализующим данный интерфейс — в VS Code данная функция называется "Go To Implementations". И до недавнего времени Haxe не поддерживал данную функцию.
InnoGames сообщили нам о том, что в случае их проекта с большим количеством интерфейсов, классов, реализующих эти интерфейсы, и их подклассов, им не хватает этой функции. Была заведена соответствующая задача (18 декабря 2019 года).
В Haxe Foundation провели внутреннее обсуждение этой проблемы.
И 13 января эта проблема уже была разрешена.
Как видно, процесс занял меньше месяца, но также стоит учесть, что существенную часть этого времени пришлось на праздники (Рождество и Новый год).
И теперь данная функция доступна в ночных сборках Haxe и в vshaxe 2.18.0.
Хотелось бы отметить, что решение проблем в рамках партнерства приносит пользу всем: InnoGames получили нужную им функцию, но теперь ей могут пользоваться и все остальные!
Конечно, это совсем небольшая фича, но таких фич много, и каждая из них помогает всем. Поддержка со стороны партнеров позволяет улучшать Haxe, и я надеюсь, что этот процесс развития будет продолжаться.