История StablexUI, перспективы UI в Haxe

Этот пост является ответом на вопрос заданный zzzzzzerg в рамках инициативы "Спроси меня"

Тут есть некоторое количество ностальгических воспоминаний о зарождении StablexUI, немного о проблемах, лежащих в его основе и ещё чуть-чуть о GUI в Haxe в целом.

Моим первым знакомством с игростроем была работа в одной конторе, которая разрабатывала браузерную игру. Когда начальство решило портироваться в социалки, наш flash-программист (я был серверником) стал писать клиентскую часть с применением собственных наработок, среди которых был некий фреймворк, позволяющий строить интерфейсы разметкой xml (и это был не флекс, а самопальный велосипед :) ). В тот xml можно было добавлять некоторые обработчики событий, но только на lua. После увольнения флешера, мне пришлось тянуть ещё и клиентскую часть. Тогда я столкунлся с большим количеством проблем, рождённых тем самопальным фреймворком. Самыми большими из них были: непредсказуемость позиционирования элементов интерфейса (несмотря на задание точных координат в xml), проблемы с конвертацией as3-переменных в lua и обратно, молчаливое проглатывание ошибок в lua-интерпретаторе (из-за чего отладка превращалась в ад) и протекание памяти на десятки мегабайт в минуту.

Вот именно эта ситуация меня и вдохновила на создание StablexUI :) Я хотел создать библиотеку, которая всегда будет вести себя так, как я того от неё ожидаю, и позволит писать простую логику интерфейсов внутри xml-разметки на том же языке, на котором написан код остального проекта.

На тот момент (да и до сих пор) я не был знаком ни с одним другим GUI фреймворком ни в мире флеша, ни где-либо ещё. И это мой большой минус. Т.к. сейчас я понимаю, что некоторые вещи в StablexUI можно было реализовать иначе, и это позволило бы проще расширять функциональность фреймворка.
По ходу работы я часто посматривал на проекты типа Feathers, Minimal comps и т.п. Но всё равно не припомню ни одного раза, когда я взял бы из них какие-то идеи. Каждый раз думал, что реализую ту или иную фичу так, что её будет удобнее использовать, чем, например, в Feathers (NIH, наверное :) )

Работа над StablexUI сильно продвинула мои знания по макросам и Haxe в целом. До этого макросы были для меня чёрным ящиком.

Ну, а если вы решили создать свой собственный UI фреймворк, то, пожалуйста, внимательно изучите существующие. Возможно, вы сможете внести в них свой вклад, который позволит решить ваши задачи с меньшими затратами усилий, чем создание нового фреймворка :)

С WPF и XAML я пока не знаком (чтение статьи в википедии не в счёт). А вот биндинги мне нравятся :) Рекомендую всем использовать библиотеку, созданную Димой - bindx. Надо только не забывать при удалении объектов освобождать обработчики, создаваемые для биндинга данных.

Для облегчения работы со StablexUI очень бы пригодился визуальный редактор интерфейсов. Ещё я очень надеюсь, что в следующих версиях StablexUI мне удастся использовать HML (about) вместо самописного xml-парсера.

Хотелось бы, конечно, иметь некий волшебный фреймворк, который позволить создавать интерфейсы не только из кастомных элементов в играх, но и используя нативные интерфейсы на различных платформах (и такая попытка была: GUISE), но пока что я не представляю, как это реализовать так, чтобы с этим было удобно работать разработчику. Однако, считаю, что возможность создавать нативные интерфейсы очень важна, т.к. игры это не весь софт. И всякий там enterprise, который мог бы влить немало денег в мир Haxe, это как раз не игры. Надеюсь Basis всё-таки получит развитие, или у него появятся преемники.