Сначала немного предыстории: я ищу способ создать библиотеку «коллекций», которая абстрагирует реализацию на основе версии Flash Player (Vector на FP10, Array на FP9) от вызывающего кода. Я уже написал небольшую библиотеку AS3, которая делает это, но ...
- ... производительность плохая (особенно из-за двух уровней косвенности и проверки типов во время выполнения в реализации Array)
- ... код уродлив (поскольку типы Vector нужно определять во время компиляции, мне нужна фабрика, возвращающая конкретные экземпляры Vector на основе Enum, который содержит только поддерживаемые типы)
В настоящее время я рассматриваю Haxe как возможное решение, поскольку оно поддерживает параметры типа и может компилироваться в различные версии Flash Player (и, по-видимому, компилируется в байт-код, оптимизированный по mmore).
Теперь мой вопрос: существует ли способ написать библиотеку в Haxe, которую можно использовать в коде AS3 следующим образом
var foo:IMyInterface = new MyImplementation(int);
var bar:IMyInterface = new MyImplementation(getDefinitionByName("my.package.MyClass"));
с IMyInterface
раскрытием необходимых методов (push
, pop
, ...)?
Основная идея заключается в том, что я хочу предоставить информацию о типе во время выполнения и получить типизированную «коллекцию» независимых версий Flash Player для использования в вызывающем коде, не беспокоясь об условных фрагментах компиляции повсюду.
Может ли Haxe сделать что-то подобное, и если да, как я могу заставить это работать?