[tamarin系列之1] tamarin简介
本系列主要是用来研究AVM2和Tamarine相关的技术应用。
一、相关概念 (灰色部分选自 http://www.ibm.com/developerworks/cn/web/wa-actionscript/index.html) 在 2006 年 11 月 7 日,Adobe Systems 宣布将 ActionScript Virtual Machine 的代码捐献给 Mozilla Foundation。因此,Mozilla 启动了一个新的开放源码项目 Tamarin。Adobe 和 Mozilla 希望以此促进这种创建 Web 应用程序的标准化语言的推广。
Tamarin 项目的目标是实现一个高性能的开放源码的 ECMAScript 第四版(ES4)语言规范实现。Mozilla 在 SpiderMonkey 中使用 Tamarin Virtual Machine,SpiderMonkey 是 Firefox 和其他基于 Mozilla 的产品中嵌入的核心 JavaScript 引擎。Adobe 将继续在 Adobe Flash Player 中的 ActionScript Virtual Machine 中使用这些代码。
Tamarin Virtual Machine 当前实现 ECMAScript 第三版语言标准(这是 JavaScript、Adobe ActionScript 和 Microsoft Jscript 采用的标准),还支持 ES4 中建议的一些新语言特性。社区正在开发 ES4 的开放源码实现,Adobe 和 Mozilla 希望以此促进这种创建 Web 应用程序的标准化语言的推广。Tamarin 项目的目标是帮助开发人员创建可以跨多个平台的效果丰富的高度交互性的用户体验。
Tamarin 将支持 ECMAScript 第四版(或者说 “JavaScript 2”)语言,并将集成进 Mozilla 2 项目中的 SpiderMonkey,预期在 2008 年发布。
Mozilla 的开放源码项目团队刚刚开始开发 Tamarin,它的一些目标技术包括:
* 1. 将 Tamarin VM 和垃圾收集器集成进 SpiderMonkey 中
* 2. 使用 SpiderMonkey 编译器生成 Tamarin 的代码
* 3. 将即时编译器移植到新的硬件平台
* 4. 完成 ECMAScript 4 编译器
从以上概述,我们可以对Tamarin有一个初步的认识。虽然Tamarin实现的是一个ES4引擎,但这个项目对我们认识AVM2虚拟机和实现Flex下的脚本解析器活脚本引擎绝对有重要的意义。 下面我们来看一张图:
图描述了AVM2框架的各个部分和各部分之间的关系。
可以看出,是的Flash Player 9有JIT complier,同时,它也有Interpreter,并且一切都建立在.abc之上。
随着Flash Player以后的版本将基于tamarine平台,将会有更多的脚本语言能够参与进来,包括目前tamaine的ES4,AS3(Action Monkey)和Iron系列(见IronMonkey, 可能包括IronPython,IronRuby,IronPHP等),到此,像不像.NET framework的感觉了? 甚至还要代替IE的JavaScript、VBScript客户端脚本(见ScreamingMonkey)。
好了,前景先简单介绍到这里,下面,让我们进入tamarine及其AVM2相关的世界中吧。
二、获得tamarin
我们可以用多种途径很轻松的获得tamarin。由于tamarin项目没有release,目前还只是模型阶段。
1、我们可以用mercurial的命令:
hg clone http://hg.mozilla.org/tamarin-tracing/
(没有hg的,可以用APT来安装,sudo apt-get install mercurial)
2、可以直接用浏览器从http://hg.mozilla.org/tamarin-tracing/上点击gz或zip链接来下载。
下载完毕后,就可以编译了。
这里注意编译环境:
1、在WINDOWS下,通过项目文件夹/platform/win32下的avmplus_9.sln或avm_plus_8.sln打开整个项目。
注意解决方案中有zlib,而tamarin源码包并没有包括zlib, 去相关网站下载zlib源码,并配置好路径即可。
编译时,core文件夹下的ErrorCostants.cpp可能出错,这个文件是错误信息常量表,可能是因为字符集的问题,我的解决方案很简单,删除多余的语言,只留en,即数组只留en。其他全部去掉,这样编译就通过了,反正这个文件没什么大用。
2、在LINUX下编译,最好建立一个空的文件夹,然后编译:
mkdir build
cd build
../tamarin-tracing/configure --enable-shell --enable-debugger
编译最好加 --enable-shell --enable-debugger这两个选项,否则,嘿嘿,第一个不加是不会有可执行的shell的,至于第二个不加,调试,汇编都不会有。
configure后生成Makefile文件。然后就可以make了。make后会生成shell目录,里面就有我们最终想要的avmshell这个Interpreter了。
3、测试一下:首先作一个hello.as 内容为print ("Hello world");
然后用Flex-sdk的asc.jar:
java -jar asc.jar hello.as
显示 hello.abc, 84 bytes written
ls一下,可以看到hello.abc
然后./avmshell hello.abc
输出结果Hello world
好了,今天简单介绍这些作为进入tamarin世界的热身运用,下一期,我们来深入了解avmshell这个shell工具
==============================================
由于资料较少,肯定会有遗漏,错误和要补充的地方,欢迎大家讨论并指正。
================================================================
新增源码SVN: svn://svnhost.cn/tamarin-tracing
[tamarin系列之1] tamarin简介相关推荐
- [tamarin系列之6] tamarin外篇---As3Eval
1.As3Eval简介 这是一个由Tamarin衍生出的as3库,作者把Tamarin的思想融合到了as3的库中.支持as3和ES4两种格式的动态编译.运行,有AS3来解释AS3或ES4,是不是很神奇 ...
- C#多线程编程系列(一)- 简介
目录 系列大纲 一.前言 二.目录结构 四.章节结构 五.相关链接 系列大纲# 目前只整理到第二章,线程同步,笔者后面会慢慢更新,争取能把这本书中精华的知识都分享出来. C#多线程编程系列(一)- 简 ...
- RxJS 系列之一 - Functional Programming 简介
RxJS 系列目录 RxJS 系列之一 - Functional Programming 简介 (本文) RxJS 系列之二 - Observable 详解 RxJS 系列之三 - Operators ...
- 智能小车系列文章之小车简介
智能小车系列文章之小车简介 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成 ...
- 博客搬家系列(一)-简介
这个功能思来想去想了很久,终于实现了基本功能,自己基于别人的后台权限管理系统写了一个博客系统,其实博客系统只是一小部分,但今天只讲博客部分,其他详见: RZSpider详见:https://blog. ...
- LXD 2.0系列之一:LXD简介
本文讲的是LXD 2.0系列之一:LXD简介, [编者的话] 第三方调查报告 显示LXD有潜质成为一款受欢迎的第三方容器管理工具.本文是LXD核心维护者.加拿大程序员Stéphane Graber有关 ...
- M0R1系列模块烧写简介
M0R1系列模块烧写简介 烧写简介 连接模组的引脚 下载最新的烧写固件 下载相关工具 烧写软件设置 说明 烧写简介 M0R1的模组使用了RDA5981芯片进行设计,烧写时只需要文件进行烧录,则模组在开 ...
- 【Youtobe trydjango】Django2.2教程和React实战系列一【项目简介 | 搭建 | 工具】
[Youtobe trydjango]Django2.2教程和React实战系列一[项目简介 | 搭建 | 工具] 1.环境与选型说明 2.技术栈选型说明 3.django搭建详解 3.1. 项目虚拟 ...
- 【KVM系列01】KVM简介及安装
第一章 KVM简介及安装 1. KVM 介绍 1.0 虚拟化简史 1.1 KVM 架构 2. KVM 的功能列表 3. KVM 工具集合 4. RedHat Linux KVM 安装 4.1 在安装 ...
最新文章
- ACMNO.8输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 输入 一行字符 输出 统计值 样例输入 aklsjflj123 sadf918u324 asdf91u32
- NHibernate2.1新特性之entity-name
- 【操作系统】考研の处理机调度算法(看不懂你来打我~!)
- Cow Relays POJ - 3613
- 抢红包算法 c++_十大排序算法(一):冒泡排序法
- Python Tutorial(六):模块
- c高级语言程序设计B试题,2019-2010-2-《高级语言程序设计(C)》期末考试-题
- 关于__int128高精度运算
- landset8各波段_landsat8波段
- Ubuntu下EEUPDATE工具的使用方法
- 微信小程序云函数使用讲解
- eas表单分录带出自定义核算项目
- Ubuntu连接不上网络问题的解决方法
- 通过 scrapy 爬取豆果美食热门数据, 使用 flask 搭建后端, 最后搭建一个简单的小程序
- 【Python数据分析学习实例】篮球运动位置分析
- Kafka分区分配策略以及重平衡过程总结
- android apk格式,apk是什么文件格式?.apk文件怎么打开?
- Docker 2.3:Docker 镜像管理
- 基于微信小程序的食堂窗口自助点餐系统
- matlab 元胞自动机