Бурная дискуссия развернулась в ruFlash вокруг новой разработки Alchemy в Adobe Labs — технологии, которая может сделать флэш-приложения быстрее.
Alchemy — это исследовательский проект Adobe. Они публикуют его, чтобы понять, насколько это может быть интересно разработчикам, как много найдется желающих использовать существующие библиотеки C и C++ в веб-приложениях для Adobe Flash Player и Adobe AIR. Костя Ковалев подсказывает: ответы на многие вопросы Adobe дает в официальном FAQ'е по Alchemy.
Файл .c -> промежуточный LLVM-байткод -> AVM2-байткод
Здесь есть парадокс: в результате работы Alchemy мы получаем тот же байткод AVM2, что и в AS3. Окуда же взяться приросту производительности? Канасье копнул тему и нашел 12 недокументированных операций AVM2 (opcodes), которые используются только Alchemy.
Николя пишет, что разберется и включит их в апдейт haXe вместе с поддержкой Pixel Blender. Интересные вещи начинаются!
adobe сознательно тормозит флеш на ас3?
Попробовал Alchemy.. ничего интересного, применение ограничено чисто математикой. То есть это просто чтобы можно было старые C/C++ алгоритмы (математические) использовать в AS. Никакие библиотеки, кроме math.h , stdio.h и несколько других использовать нельзя. Вобщем, Си-плагины не попишешь...
На многие из этих вопросов отвечают сами Adobe в официальном FAQ'е :)
интересно, а Адоби добавят эти 12 инструкций в штатный флексовый компилятор? :)
что ж он не написал что за конструкции
Так он сам пока не знает:
Николя пишет, что разберется
Т.е. найти нашёл. А как работают - пока не знает.
Никакие библиотеки, кроме math.h , stdio.h и несколько других использовать нельзя. Вобщем, Си-плагины не попишешь...
Хмм... А можно zlib более нормально подключить (чтобы Adler32 не требовала)?
Не с того конца начал объяснять, это я к тому что до архивации руки не доходили, но теоретически zip и tar должны подключится без особых проблем.
И, кстати, приблизилась давняя идея портировать линух под флеш (ну или хотя бы некоторые GNUтые тулзы).
Кстати, по поводу LUA. насколько я знаю, она поддерживает псевдо-потоки (забыл точное название). Во флеш-версии это сохранилось?
Псевдо потоки мы вырезали, вообще в 2007 году, Адоб показывал что потоки пашут в С, но у нас не получилось их запустить. Ждем ответа, но так как Адоб запустил Quake на FP10, потоки там есть (квейк юзает многопоточность 100%). Просто возможно процедура запуска чуть изменилась, может есть какие то прослойки.
>Во флеш-версии это сохранилось? Ммм, нету флэш версии языка LUA, мы просто скачали исходны код под С и откомпилировали как swc библиотеку, так что там есть то чего мы не удалили =)
Флеш-версии языка нет. А флеш-версия интерпретатора теперь есть :)
А где посмотреть Quake на FP10?
http://www.google.com/search?num=20&hl=en&safe=off&client=safari&rls=en-us&q=quake+flash+player&btnG=Search
Dan http://quakelive.com/ - вот это?
quakelive - это вроде не флеш.
Почитайте комент от Gabriele Farina на блоге Николя. Кое-что проясняет.
Может быть особого прироста и не получим, но, скажем, сделать более шустрый Base64 может и получится.
Прирост есть при Math и при String манипуляциях, этого достаточно для интерпритатоворов, физики, геометрии и стереометрии. Плюс есть Pixel Blender для шейдеров. Для GUI фреймворков это мало что дает, тоесть я сомневаюсь, что получится посадить Flex Framework на стеройды, но для игр это хорошая новость. По моему очень даже неплохо дела обстоят =)
P.S. Кстати скорость выполнения GUI даже в взрослых играх (PS3, XBox 360, Direct 10) серьезная проблема с производительностью =) Не зря же Photoshop и MS Office тормозят больше Crysis =)
Не силён в С, но если это сделает 64 быстрей, то уже благо какое будет! Подскажите, где пишут про то, как это сделать :)
Плюс есть Pixel Blender для шейдеров.
Подскажите, где пишут про то, как это сделать :)
http://ncannasse.fr/blog/adobe_alchemy В коментах.
0x3c li32 – load a 32 bit integer from global memory 0x3a li8 – load an 8 bit unsigned integer from global memory 0x35 si8 – store an 8 bit integer to global memory 0x37 si32 – store a 32 bit integer to global memory
Если они работают быстрее, чем byteArray.readUnsignedInt(), byteArray.writeUnsignedInt(), byteArray[i] = x, x = byteArray[i] и т.д., то можно получить прирост для Base64 кодирования.
Мне тут кстати недавно как раз надо было кодировать файлики по 2-4 мегабайта во флеше. Пришлось отказаться по причине производительности. Примерно секунда уходила на кодирование. Вроде и немного, а вроде и дофига.
Он как раз таки больше для математики :) Тот же Life на нём реализовывать (хотя это можно сделать и фильтрами).
Примерно секунда уходила на кодирование. Вроде и немного, а вроде и дофига.
фильтры из flash.filters.* это – тоже по своему шейдеры, хотя, какой нибудь крутой гейм девелопер, написавший за 1000 шейдеров может названить их недо-шейдерами =)
flash.filters.ShaderFilter - (это те самые, которые в Pixel Bender'е делаются, хотя можно и по другому их создавать) - тоже недошейдеры. Циклов нет, массивов нет, функций нет. Хорошо хоть if else есть. Надеялся сделать 3D с помощью шейдеров (по так называемой вертексной технике), так как с помощью фильтров или с помощью ByteArray получалось тормознуто - но не вышло. Слишком ограниченные возможности.
и потом подавали вычисления на enterFrame, получилось так что задача происходило в фоновом режиме
Получилось затестить. приду завтро на работу вышлю Росту флешку пример. например MD5 через алхимию ровненько в два раза быстрее чем на AS (Рост, добавишь в этот пост?)
(Рост, добавишь в этот пост?)
Re:Где про это посмотреть более подробно? http://labs.adobe.com/wiki/index.php/Alchemy:FAQ
Блин, Николя жжот не по детски!
очень интересно было бы посмотреть какие-нибудь бенчмарки и тд.
Предыдущий пост
Следующий пост