- PVSM.RU - https://www.pvsm.ru -

Зимний отчет о состоянии Haxe

7 февраля в офисе компании InnoGames состоялась очередная мини-конференция HaxeUp Sessions 2020 Hamburg, на которой Саймон Краевский отчитался о проделанной работе, рассказал немного о ближайшем будущем Haxe. И здесь я хотел бы представить перевод основной части его доклада (пропустив начало, в котором Саймон рассказывает о том, как он попал в Haxe и чем занимался в Haxe Foundation. Об этом он уже рассказывал на предыдущем HaxeUp [1]).

image

Кратко о том, что было сделано за прошедший 2019 год:

  • в феврале и марте вышли 2 релиз-кандидата (4.0.0-rc1 и 4.0.0-rc2)
  • в апреле к команде Haxe Foundation присоединились 2 новых человека: Аурел Били [2] начал проходить шестимесячную практику в качестве интерна, а Александр Кузьменко [3] стал вторым штатным разработчиком компилятора
  • в мае прошел Haxe US Summit 2019 [4]
  • в июне вышел Haxe 4.0.0-rc3. А в сентябре — Haxe 4.0.0-rc4 и Haxe 4.0.0-rc5
  • и в октябре, после нескольких лет разработки, вышел Haxe 4.0.0
    после этого до конца 2019 года вышло несколько минорных релизов, включающих в себя в основном исправления найденных проблем. На текущий момент последняя официальная версия Haxe — 4.0.5.

image

Рассказав о прошлом, давайте посмотрим, что ждет Haxe в 2020 году:
В первой половине года планируется выпустить Haxe 4.1. Данная версия будет включать в себя:

  • оптимизация хвостовых вызовов (tail-recursion elimination) — если в самом конце тела функции она вызывает сама себя, то компилятор может заменить этот вызов на цикл (данная фича уже присутствует в ночных сборках)
  • поддержка SSL в интерпретаторе макросов eval (соответствующий pull request [5] был смержен на прошлой неделе)
  • в настоящее время Александр Кузьменко работает над улучшением обработки исключений [6] (планируется добавить новый класс haxe.Exception, который можно будет использовать в качестве базового класса для исключений)
  • улучшение поддержки IDE со стороны компилятора. Для крупных проектов скорость работы IDE особенно актуальна (в том числе и для игры Forge of Empires от InnoGames — партнера Haxe Foundation)

Во второй половине 2020 года планируется добавить:

  • асинхронное системное API — asys (о нем в октябре подробно рассказывал Аурел Били [7])
  • корутины, обсуждение которых сильно затянулась, но Саймон надеется, что скоро команда придет к консенсусу, после чего можно будет приступить к их реализации
  • функции, доступные на уровне модуля [8], с которыми отпадает необходимость "оборачивать" функции в классы

И в октябре планируется провести европейский Haxe Summit в Германии, в городе Линц-ам-Райн.

image

Давайте поговорим немного о Haxe Foundation, потому что обычно все обсуждают сам язык, его фичи, но практически никогда не говорится о том, что же такое Haxe Foundation и чем вообще занимается.

На сайте Haxe [9] можно найти следующее описание: "Haxe Foundation был создан для долгосрочного финансирования разработки Haxe и оказания поддержки компаниям, использующим Haxe". И это, в принципе, все — Haxe Foundation оказывает платную поддержку своим партнерам.

Давайте сначала я расскажу о том, куда идут полученные деньги:

  • во-первых, часть средств идет на оплату труда разработчиков (в настоящий момент это Саймон Краевский и Александр Кузьменко)
  • во-вторых, часть идет на финансирование отдельных проектов. В настоящее время такой проект один — dts2hx [10] Джорджа Корни. dts2hx конвертирует декларативные файлы TypeScript (d.ts) в Haxe-экстерны. Некоторое время назад Саймон начинал работать над этим проектом, он написал генератор парсеров, применил его к декларативным файлам TypeScript, следующим шагом была генерация экстернов. Сначала такой подход сработал, но с течением времени TypeScript эволюционировал и парсить его стало существенно сложнее. Вместо парсинга было бы проще задействовать компилятор самого TypeScript, чтобы сам компилятор сразу выдавал Haxe-экстерны. Именно над этим и работает Джордж, в настоящее время у него есть прототип, примерно в марте ожидается версия, которую можно будет тестировать. В итоге dts2hx должен значительно повысить качество экстернов для JavaScript-библиотек и упростить их использование из Haxe
  • и в-третьих, часть средств Haxe Foundation идет на организацию мероприятий. Например, упомянутый ранее EU Haxe Summit 2020.

image

Теперь давайте рассмотрим, в чем выгода партнерства с Haxe Foundation для компаний:

  • это, конечно же, приоритетное исправление ошибок и внесение улучшений
    партнеры также могут влиять на выбор стратегических направлений развития. Обычно это происходит в рамках Haxe Summit, где можно обсудить вещи, на которых по мнению партнеров стоит сосредоточить усилия. На основании таких встреч делаются выводы о дальнейшей работе
  • однако, будучи партнером Haxe Foundation, вам не удастся "купить" нужную вам фичу в языке. Саймон специально оговорил этот момент, т.к. ранее один из бывших партнеров запросил привнести в Haxe фичу из TypeScript, но в Haxe Foundation решили, что она не впишется в язык. В таких случаях вместо этого Haxe Foundation предложит помощь в решении существующей проблемы, т.к. обычно вам требуется именно решить существующую проблему, а не получить новую фичу в языке
  • связь между Haxe Foundation и партнерами обычно осуществляется через "послов Haxe Foundation". В случае InnoGames таким человеком является Даниил Коростелев [11] — он состоит в Haxe Foundation с 2013 года и в то же время является сотрудником InnoGames.

image

В качестве примера работы Haxe Foundation с партнерами рассмотрим реализацию поддержки функции "Go To Implementations" в VS Code:

image

Обычно в IDE есть функция перехода от определения интерфейса ко всем классам, реализующим данный интерфейс — в VS Code данная функция называется "Go To Implementations". И до недавнего времени Haxe не поддерживал данную функцию.

InnoGames сообщили нам о том, что в случае их проекта с большим количеством интерфейсов, классов, реализующих эти интерфейсы, и их подклассов, им не хватает этой функции. Была заведена соответствующая задача [12] (18 декабря 2019 года).

В Haxe Foundation провели внутреннее обсуждение этой проблемы.
И 13 января эта проблема уже была разрешена [13].

Как видно, процесс занял меньше месяца, но также стоит учесть, что существенную часть этого времени пришлось на праздники (Рождество и Новый год).

И теперь данная функция доступна в ночных сборках Haxe и в vshaxe 2.18.0.

Хотелось бы отметить, что решение проблем в рамках партнерства приносит пользу всем: InnoGames получили нужную им функцию, но теперь ей могут пользоваться и все остальные!
Конечно, это совсем небольшая фича, но таких фич много, и каждая из них помогает всем. Поддержка со стороны партнеров позволяет улучшать Haxe, и я надеюсь, что этот процесс развития будет продолжаться.

Автор: Александр Хохлов

Источник [14]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/haxe/346566

Ссылки в тексте:

[1] рассказывал на предыдущем HaxeUp: https://habr.com/ru/post/474452/

[2] Аурел Били: https://github.com/Aurel300

[3] Александр Кузьменко: https://github.com/RealyUniqueName/

[4] Haxe US Summit 2019: https://haxe.org/videos/conferences/haxe-summit-us-2019/

[5] pull request: https://github.com/HaxeFoundation/haxe/pull/9009

[6] улучшением обработки исключений: https://github.com/HaxeFoundation/haxe/pull/9124

[7] рассказывал Аурел Били: https://habr.com/ru/post/475226/

[8] функции, доступные на уровне модуля: https://github.com/HaxeFoundation/haxe-evolution/blob/master/proposals/0007-module-level-funcs.md

[9] сайте Haxe: https://haxe.org/foundation/

[10] dts2hx: https://github.com/haxiomic/dts2hx

[11] Даниил Коростелев: https://github.com/nadako

[12] заведена соответствующая задача: https://github.com/HaxeFoundation/haxe/issues/9043

[13] была разрешена: https://github.com/HaxeFoundation/haxe/pull/9079

[14] Источник: https://habr.com/ru/post/488118/?utm_source=habrahabr&utm_medium=rss&utm_campaign=488118