针对 adobe 公司停止开发移动版Flash Player以后,从我了解的内容上看,flash 端的构架是个问题,为了支撑 native code 引入了一个叫 Alchemy 技术,事实上是在为原来的 LLVM 虚拟机的基础上又托管了一个虚拟机,AVM2 将负责实时的把本地代码翻译成中间件,再由 LLVM 转译成机器码。

这种设计在嵌入式上有很大的瓶颈,什么瓶颈大家也看到了。adobe 想让大家使用 flash 做出够炫的 3D 游戏,但是 flash 无法做到像 C# 那样,直接中间语言到 native 的互动甚至是硬件层,也没有像 JAVA 的 JVM 技术去映射,而这个问题最大的可能出现,就是自己的虚拟机内核是一面墙。

解读 alchemy 技术:adobe 的 alchemy 技术事实上引用了 freebsd 的内核,然后把你写的代码,根本 freebsd api 抽象成中间件,再由 freebsd 内核接口实现到各个操作平台上。 说白了,就是你写的代码,要根本不同的平台去映射一下实现,前端是他们的代理层,也就是所谓的虚拟机。跨平台的原理就是在此。

前端是 as3 的解析器,as3 的解析器会转换成中间件,再由中间件映射到系统的二进制,c++ 的部分也会在此转换成中间件,只是走了一套不同的解析器工作。最终实现 flash 的整个动作。

当然理论是你只能使用 freebsd 提供的 api 来书写你所要完成的 c++ 代码,之后会有 flash 的虚拟机抽象成 win32 的接口来适应 windows 平台。举个例子,虽然你在 alchemy 中实现了 posix 的 pthread_create, 但是在解析器中依然会把你变成 __beginthreadex。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐