Cross-platform

Ссылки по NME и install tool

Сюда сбрасываю последние ссылки связанные c NME, о его установке, настройке и компиляции для Andriod и iOS. Надо в этом деле разобраться. Приглашаю интересующихся темой присоединяться.

NME - gm2d - Android - iOS... Настройка среды для кросс-платформенной разработки
(по-русски, 16.08, я;))

http://www.joshuagranick.com/blog/2011/08/19/haxe-nme-screencast-is-now-... - Haxe NME Screencast (Joshua Granick)

http://www.joshuagranick.com/blog/2011/07/14/android-ios-webos-and-more-... - (Joshua Granick) - 14 июля
http://lists.motion-twin.com/pipermail/haxe/2011-July/045405.html - Update on the install tool (Joshua Granick) - 13 июля

Новости прошедшей недели

Как все уже знают, на прошлых выходных состоялась конференция haxecon, в рамках которой обсуждались вопросы о текущем положении и будущем данной платформы. Докладов было немного, но все они довольно интересны.
Первоначально планировалось, что будет осуществляться вещание с конференции, но из-за возникших проблем с доставкой оборудования это оказалось невозможным. К счастью были сделаны видеозаписи докладов, а сегодня они стали доступны здесь.

Полиморфные функции. Библиотека. Версия 1.0

Библиотека реализующая полиморфные функции. Инструкция по установке и использованию:

haxelib install PolymorphFunction

Во FlashDevelop создаем проект, например haXe/Flash:

Заходим Project -> Properies -> Compiler Options -> Libraries
добавляем туда строчку PolymorphFunction

package ;

import flash.Lib;

enum MyEnum {q; w; e;}

class Main
{
        static var myfunc:Dynamic = PolymorphFunction.parse([
                function(a:Int, b:Int) { return a + b; },
                function(a:Int, b:Int, c:Int) { return a + b + c; },
                function(value:String) { return "Hello, " + value + "!"; },
                function(first:Float, two:String) { return Std.string(first) + " -> " + two; },
                function(p1:{ x:Int, y:Int }, p2:{ x:Int, y:Int } ){return { x:p1.x + p2.x, y:p1.y + p2.y };},
                function(arr:Array<Dynamic>) { return "This is Array<Dynamic>"; },

haXe 2.07

Новая стабильная версия haXe - 2.07 опубликована и доступна для скачивания / обновления.

Самые важные изменения :
- макросы : http://haxe.org/manual/macros - другие источники информации: http://ncannasse.fr/blog/haxe_got_macros,
- flash9 API обновлен до совместимости с версиями flash player 10.1 и 10.2
- избавление от неиспользуемых функций на этапе компиляции с помощью --dead-code-elimination
- flash9: исправлена загрузка другого haXe SWF
- большое увеличение скорости компилятора для внутреннего автодополнения
- чистка, благодаря которой обеспечен более аккуратный и читаемый вывод JS/CPP/PHP
- собственный генератор js кода : макросы могут быть использованы в частности для написания собственного js - генератора, см. haxe/std/haxe/macros/DefaultJSGenerator для примера

Полиморфные функции. Удобный класс

Я написал класс полиморфных функций и решил поделится. Чтобы понять как задается сигнатура, рекомендую посмотреть http://haxe.ru/node/274

package;
import Type;
/**
 * ...
 * @author Mr.Cheater
 */

 
class PolymorphFunction
{
        static public function create(args:Array<Array<Dynamic>>)
        {
                var hashTable = new Hash<Dynamic>();
                for (i in args) hashTable.set(Std.string(i[0]), i[1]);
                return Reflect.makeVarArgs(function (args:Array<Dynamic>):Dynamic
                {
                        return Reflect.callMethod(null, hashTable.get({
                                var signature = new Array<String>();
                                for (i in args) signature.push(Std.string(Type.typeof(i)));
                                Std.string(signature);
                        }), args);
                });
        }
}

class Main
{
        static var myfunc:Dynamic =  PolymorphFunction.create([
                //The addition of 2 Ints
                [[ValueType.TInt, ValueType.TInt],
                function(a:Int, b:Int)
                {
                        return a + b;
                }]
                ,

Релиз Eclihx 0.3.0

Опубликован новый релиз Eclihx 0.3.0 - IDE для программирования на haXe, на основе Eclipse.
Автор - Николай Красько пригласил всех haxe-разработчиков к тестированию новой версии.

Полный список возможностей Eclihx 0.3.0:

  • Навигатор по проектам
  • Автодополнение в haXe коде (с опцией haxe --display).
  • Установка путей для автодополнения и библиотек в hxml-файле
  • Сборка проекта с hxml-файлом.
  • Простая навигация по расположению ошибок при сборке.
  • Подсветка синтаксиса и форматирование haxe кода.

Дайджест: Ressy, Stax, Hydrax, Flixel-Haxe

Очередной небольшой дайджест новых и не очень библиотек для haXe:

Ressy - менеджер ресурсов для haXe.
Позволяет получать доступ к ресурсам по аналогии с [Embed] в AS3 используя loader mode (для загрузки внешних ресурсов) или embed mode (для внедрения ресурсов в swf)
http://github.com/alijaya/ressy

Stax
Stax это новая стандартная библиотека для haXe созданная для разработчиков, которые предпочитают декларативное программирование и для которых скорость разработки важнее чем размер программы и ее скорость.
http://github.com/jdegoes/stax

Константы и условная компиляция

Я глубоко убеждён, что константные типы недооцениваются разработчиками компиляторов и, как итог, разработчиками. Константы должны задавать не просто "неизменяемые" данные с удобным доступом, но и участвовать в прекомпиляции (условной компиляции).

Генерация номера сборки для проекта

Введение
В настоящее время, я работаю над проектом, одним из основных инструментов, в котором является язык haxe. В качестве среды разработки для haxe, в данном проекте, я использую FlashDevelop. В течение дня, проект собирается множество раз, и надо точно знать, какая сборка, сейчас, выложена в общий доступ. Для этого необходимо нумеровать сборки. Так как, ни в haxe, ни во FlashDevelop стандартного средства генерации номера сборки найдено не было, предлагаю для решения этой задачи, провернуть определённый трюк.

Трюк

Вышел haxe 2.04

26 июля вышел haXe 2.04. Основное нововведение - поддержка с++ (спасибо стараниям Хью Сандерсона http://gamehaxe.com/).
Основным преимуществом программ на с++ является высокая производительность. Плюс мы еще на шаг ближе к флэш-играм на iPhone http://gamehaxe.com/2009/07/28/haxe-iphone-cpp-at-last/.
Что необходимо для того, чтобы начать работать с новой платформой, можно почитать здесь http://blog.touchmypixel.com/2009/04/our-possible-haxe-c-plans/ (на английском).
http://ncannasse.fr/blog/haxe_2.04 - здесь создатель языка haXe показывает классический пример "Hello world" для с++.

Влияние Haxe

Haxe->flash странно на меня подействовал, пишу на php - не в своей стихии, пишу на haxe->javascript - не хватает многих вещей которые были под флэш платформу. Например, нельзя просто взять и сделать lib.current.addChild(someObj), вместо этого:

package classes;
import js.Lib;
import js.Dom;

class Logo
{
        public var displayObj:HtmlDom;
        public function new()
        {
                displayObj = Lib.document.createElement('div');
        }
}

А потом в main:
lib.document.appendChild(logo.displayObj);

hscript 1.4

Вчера стала доступна новая версия hscript с которым мы уже знакомились на страницах haXe.ru.

К имеющимся ранее возможностям/операторам в hscript теперь добавлены следующие:

  • new
  • оператор ...
  • шестнадцатеричные числа (hex)
  • try/catch : разрешён только один catch с типом "Dynamic"
  • throw

Мой доклад о haXe на 1й BAFPUG

Дело продвижения haXe живет. Сегодня в Минске состоялась первая встреча Belarusian Adobe Flash Platform User Group, на которой я сделал доклад по haXe.

Доклад, конечно, можно почитать на моем сайте.

haXe 2.0 вышел!

Посыпаю голову пеплом. Рост опередил нас с сообщением о том, что haXe 2.0 вышел. :)
Ничего не остаётся, как рассказать чуть подробнее о релизе.
Помимо самых основных, объявленных ранее нововведений, таких как возможность компиляции для новой платформы - PHP, капитальные изменения в haxe.remoting, значения параметров по умолчанию и пакет haxe.oi, в обьявлении о релизе haXe 2.0 Николя опубликовал полный список изменений, примерно в три раза больший чем список обычного релиза. На перевод всего ни времени ни понимания не хватает, так что выделю кратко, то, что показалось наиболее актуальным лично мне (если кому-то показались более важными другие вещи - комментарии к вашим услугам):

  • f9dynamic из flash9 теперь стал ключевым словом dynamic обязательным на всех платформах
  • ключевое слово override теперь тоже обязательно, ключа компилятора --override больше нет
  • flash9 API теперь соответствует flex3/flash player 9.0.115
  • поддержка haxe.Stack для flash9
  • добавлен haxe.TimerQueue, добавлен haxe.Timer.delay, убран haxe.Timer.delayed
  • добавлен haxe.Resource, разрешены бинарные данные в ресурсах
  • __resolve стал resolve (и может/должен теперь документироваться)
  • оптимизирован haxe.Md5
  • Neko VM обновилась до версии 1.7.1

И почти сразу за релизом начали поступать новости об обновлениях в связанных с haXe проектах:

RSS-материал