解读 alchemy 技术,加上个人理解
针对 adobe 公司停止开发移动版Flash Player以后,从我了解的内容上看,flash 端的构架是个问题,为了支撑 native code 引入了一个叫 Alchemy 技术,事实上是在为原来的 LLVM 虚拟机的基础上又托管了一个虚拟机,AVM2 将负责实时的把本地代码翻译成中间件,再由LLVM 转译成机器码。这种设计在嵌入式上有很大的瓶颈,什么瓶颈大家也看到了。adobe
针对 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。
更多推荐
所有评论(0)