пятница, 4 сентября 2009 г.

Свобода попугаев. Предисловие.

Приветствую всех!
Сегодня начал практически ковыряться в haXe и решил параллельно писать заметки по этому поводу.

Предисловие.

Вводную про haXe я давать не буду. Я лучше расскажу, что меня сподвигло на его изучение. Однажды, после долгих лет GUЯния на разных платформах, языках и фреймворках, я встретил Adobe Flex. С тех пор прошло уже два года. Тогда я только предполагал, что при всех своих недостатках Flash+Flex framework это лучшее, что есть для GUI-писателя. Сейчас я в этом уверен.

Мысль о вытаскивании Flash\Flex-приложения (в качестве красивой морды) за пределы его песочницы посещала меня давно, равно как и регулярно.(В предыдущих моих постах слышны отголоски этих посещений :)) Лейтмотивом мотивации являлось: "Какое было бы счастье забыть про Win32\MFC\wxWidgets\WinForms\Qt\Gtk\jQuery и прочее и прочее". И вот оно (счастье), кажется, медленно, но верно надвигается. Вы спрашиваете причём тут haXe?

А вот причём: ECMAScript-образный язык haXe (т.е. он похож на AS3\javascript) позволяет нам (кроме всего прочего) компилить один и тот же исходник как в swf, так и в executable файл. Специально подчеркну, что исполняемый файл получается путём совершенно легальной компиляции промежуточного cpp-кода, (полученного из haXe сорцов) и линковкой с библиотеками хакса(open-source между прочим). На данный момент библиотеки имплементированы для 4х разных платформ: Win32, Linux, Mac и (та-дам!) iPhone.
Приведу кусок haxe-кода:

class Application extends MovieClip
{
public var surface:Sprite;

public function new()
{
super();
surface = new Sprite();
this.addChild(surface);
timer = new Timer(50);
timer.addEventListener(TimerEvent.TIMER, handlerTimer);
surface.addEventListener(MouseEvent.CLICK, handlerClick);
sprite.graphics.beginFill(0x00ff00, 0.5);
sprite.graphics.drawEllipse(20, 30, 25, 35);
sprite.graphics.endFill();
trace(width);
}

Ничего не напоминает? :) Этот код може быть скомпилен в swf. И этот же код БЕЗ ИЗМЕНЕНИЙ компилится в EXE-шник (под виндой) и мало того, он ещё и работает! И для его работы никакой AdobeFlash-плеер не требуется! И в самом экзешнике ни про какого Adobe не знают и знать не хотят!!! Всё, здесь у меня начинается истерика:)).

Теперь можно задать такой вопрос: "Ну и чо? Ну есть, ну компилится, ну EXE-шник, а в чём радость-то ... profit где?!?". Нету! :) Пока - нету. Но есть мысли и я их хочу проверить, и если в том будет хоть капля смысла - реализовать. Вот парочка, в качестве затравки:


  • Портануть neash под WinMobile и посмотреть как оно будет вертеться там

  • Портировать на haXe (а значит и в native на разных плафтормах) его... FLEX SDK!




Кстати, если первое сложить со вторым, то получаем единственный вменяемый GUI фреймворк под WinMobile. Краткий обзор существующих там фреймворков: .NET CF+WinForms = 20 Mb DLLек и просто "никакая" кастомизация контролов. Qt=15 Mb DLLек и неюзабельные тормоза. Остальное - дикий и беспощадный хардкодинг. А в случае успеха затеи мы имеем 3 Mb DLLек и предположительно хорошее быстродействие(хотя тут конечно бабушка надвое)

Ну, это всё лирика. Переходим к практическим занятием. В следующей части расскажу как я настраивал FlashDevelop и окружение и как скомпилил первую пару swf-exe. Спасибо за внимание.

5 комментариев:

yzh44yzh комментирует...

Ага, ты хочешь иметь кросс-платформенные GUI. Хороший замысел. Только вот нормальной GUI-библиотеки для haXe нет.

То, что есть: Arctic, haxegui и т.д. -- слабенько. Там даже Combobox нормального нет, не говоря уже о PopupManager, LayoutManagers и т.д. Ничего похожего на Flex фреймворк.

Есть вариант прикрутить AsWing, или написать свою GUI библиотеку, или подождать, пока кто-нибудь напишет. ( Я выбрал последнее :)

Buran комментирует...

Не-не-не-не....Смотри сюда, следи за мыслью, если я где-то не прав - пинай сразу. Есть Flex SDK. От компании Adobe. Оно всё сществует в виде AS3 исходников. Внешними для этого SDK классами являются только core-flash классы, типа Sprite, Shape, Movie Clip и т.д. Всё остальное есть в сорцах самого SDK. Т.е. у нас есть две задачи. 1) Перетранслировать AS3 код в HaXe код. При наличии тулзов автоматических (а они есть) задача не сильно слоная. 2) Подсунуть довольно ограниченный набор классов, под наш транслированный Haxe-Flex SDK чтобы система замкнулась и это всё собралось. Замечу, что большая часть core-flash классов уже реализована neash. Ну как? Где я не прав?

yzh44yzh комментирует...

Гм. Не думаю, что так просто будет портировать Flex фреймворк на haXe. Но если у тебя получится, я первый обрадуюсь :)

Теоретически возможно, практически хз.

Что-то уведомления на мыло о комментариях не работают. Так и должно быть?

Buran комментирует...

Я тоже думаю что будет не просто :) Надо начать с краеугольного камня - UIComponent. Если удасться портировать его, полдела сделано.

По поводу email оповещений - это не я, честное слово. Сейчас буду разбираться почему так.

Buran комментирует...
Этот комментарий был удален автором.