Easton JavaScript Tool Alpha 第二版 发布

二月 17, 2015 at 11:05 下午Easton

Easton JavaScript(下简称EJS)是JavaScript语言的拓展实现,它符合ECMA-262标准,请参考:ECMA-262官方文档

维基百科关于ECMAScript的介绍:点击这里

由于有详细的官方文档和维基百科的介绍,这里就不过多介绍ECMA-262标准了。

这里需要详细介绍的是EJS语言拓展了JS哪些功能?

  1. 增加了预编译指令,目前EJS语言支持“#include”预编译指令,可将引用外部JS文件;
  2. EJS脚本可以无障碍引用.NET Framework 4.0类库下的所有类(EJS脚本解释器和预编译器都是采用C#实现,因此可以完美使用.NET Framework 4.0类库);
  3. EJS原生支持Http访问,通过内置Http对象,可用于处理Http协议;
  4. EJS原生支持IO操作,可对文件以字节方式写入和读取。

关于.NET Framework 4.0类库介绍点击这里

 

现有的脚本语言足够多了,为何要选用EJS脚本语言?

绝大多数学过编程的人都应该接触过JavaScript语言,它是脚本世界的绝对霸主,而JavaScript语言也有其天生的不足,它不适用于处理网络通信、文件处理等工作。最近特别流行的NodeJS就解决了这个问题,但是它的主要目的还是为了让JavaScript语言运行在服务端,而不是拓展客户端的JavaScript语言功能。

最初想到设计这个工具主要还是工作需要,我的工作是设计各种应用型系统,为了测试系统各个接口是否正常,通常比较麻烦,比如可通过C#、Java等语言提供的类测试接口,也可以通过Fiddler2实现,或者通过HTML+JavaScript测试。但是无论是哪种方法,都需要花比较多的时间。我看很多开放平台都有提供接口测试工具,但他们提供的测试工具都有局限性,比如仅仅局限于当前平台的接口测试,或者使用起来很麻烦,不符合程序员思维。早在我读大学的时候就实现过脚本语言解释器(Plain Script,用于网络爬虫内置的脚本引擎,可编写脚本采集不同站点数据),因此我遇到这类问题首先想到的是能否实现一门脚本语言专门用于webapi接口测试。在权衡各方因素后,我考虑选用JavaScript作为基础,在此基础上再拓展功能(之前还考虑过使用Python,因为.NET平台提供了IronPython,这玩意跟C#交互可以说是完美的不能再完美,但是由于其语法比较奇葩,我们公司很多人都是搞类C语言(如:C#、Java等)出身的而且考虑层次较低的程序员接受起来可能会有些麻烦,最最重要的一点还是JS是原生支持JSON的,这一点对测试webapi来说是非常方便的,目前绝大多数webapi都采用JSON格式传输数据)。

在经过半个月的努力后,利用开源宝库内的大量资源,开发出了第一版EJS测试工具,当时叫“Http Protocol Test Tool”,是在一个小的开源JS引擎(Jint)的基础上开发的工具,但是由于此开源JS引擎本身存在的BUG较多,并且开发周期很短,时间仓促,因此这个版本的工具功能非常单一,仅仅是满足测试接口的需求。好在这个版本使用的还比较愉快,大家在使用的过程中并未出现特别严重的问题,主要还是由于功能单一,很多功能实现的还不够方便,比如连多文本编辑器都未实现,一次只能编辑一个脚本(因为功能单一,仅作为内部工具使用)。

有了这个测试工具的开发经验和信心,再利用原来自己开发的Plain Script的IDE工具源代码,花了大约一个月的时间,终于把EJS解释器、预编译器、IDE工具实现了。实现这些东西的目的是为了编写webapi测试脚本的时候更加方便(提供了自动完成功能,可很方便的编写程序),让EJS脚本语言拓展起来也更加方便(运行库是开源的,可随时拓展),并且可以让EJS脚本做更多有意义的事情(如:采集网络数据、文件读写操作)。这里的EJS解释器还是在之前的开源JS引擎的基础上开发的,并且解决了其中的绝大部分已发现的BUG,这些BUG主要是JS与.NET类库间交互的问题。预编译器是完全自己实现,目前功能还比较单一,未来将拓展更多的预编译指令。IDE工具的开发也利用了大量的开源项目,比如:DockPanel、ScintillaNET。这里也非常感谢这些开源作者对计算机世界作出的贡献,没有他们,计算机世界也不会那么丰富多彩。

在性能上,EJS有何优势?

EJS的诞生最初就不是为了性能,而是牺牲性能换取开发时间,通过简单的几行代码实现复杂的功能。所以在性能方面,EJS可能比起C#、JavaScript之类的语言来说还弱了很多(嘿嘿,EJS本身就是使用C#实现的,效率不可能比C#还高,毕竟这只是解释运行的语言),比起V8这类高性能解释器来说也还是远远不如的。但是它并不是为了跑大型项目和代码的,仅仅只是做一些简单的功能,比如:接口测试、网络数据采集、文件读写等。并且它并不需要运行在服务器上,而仅仅只是客户端工具。未来,我还将提供V8版本的EJS,不过可以想象得到的是这两个版本的EJS的某些功能是不能兼容的,因为当前的EJS脚本存在了太多.NET的东西,不过通过EJS运行库可以掩盖掉这些问题,非常期待。

如何运行EJS脚本语言?

在本文底部有下载地址,双击ejstool.exe运行即可IDE环境,程序本身是绿色程序,无需安装,放入U盘可随身携带。

依赖:由于采用C#编写的,因此ejstool.exe依赖.NET Framework 4.0,可通过微软官方网站提供的下载地址下载并安装(目前绝大多数WIN7系统内应该都是内置了的,无需额外安装,但是老式XP系统可能会提示错误)。下载地址:官方下载

内附“demo”可供参考,lib文件夹内为IDE工具运行库。

运行库目前仅提供部分核心功能,运行库为开源项目(可通过SVN检出最新版覆盖原有目录即可),未来将拓展更多功能。

 

svn:https://svn.ily.so/svn/ejslib/

账号:public 无密码

 

如何关联EJS脚本文件?

主菜单->工具->EJS脚本文件->关联EJS文件\取消关联EJS文件

 

如何关联系统右键菜单?

双击install.cmd脚本关联系统右键菜单,双击uninstall.cmd取消关联系统右键菜单。

 

 

软件下载: EJSTool Alpha2 V1.3[R2].zip

软件下载: EJSTool Alpha2 V1.3[R2](绿色版).zip (绿色版)

 

更新日志:

9、IDE 1.3.1.0、Shell 1.1.0.0(EJSTool Alpha2 V1.3[R2])【2015年10月11日】:

   1)新增依赖项加载功能,在使用importAssembly函数导入外部程序集后,如果importAssembly函数导入的外部程序集还依赖别的程序集,则会在该外部程序集同目录加载依赖的其他程序集;

   2)脚本运行库新增__ide_version__全局变量,可获取当前IDE或Shell版本号。

 

8、IDE   1.3.0.0(EJSTool Alpha2 V1.3[R1])【2015年3月15日】:

1)新增importAssembly函数,可导入外部程序集文件,支持.NET 4.0文件;

2)错误提示将精确到内存堆栈中的每一级调用;

3)在执行已经保存的脚本文件时可使用__script_path__、__script_dir__全局变量分别获取当前执行的脚本路径、当前执行的脚本存放目录。

   Shell 1.1.0.0

1)新增importAssembly函数,可导入外部程序集文件,支持.NET 4.0文件。

 

7、IDE   1.2.0.1(EJSTool Alpha2 V1.2[R2])【2015年3月13日】:

1)修复在启动Shell时如果代码修改启动Shell前不保存代码的BUG。

   Shell 1.0.0.1

1)修复在IDE启动Shell的部分BUG。

 

6、IDE   1.2.0.0(EJSTool Alpha2 V1.2[R1])【2015年3月7日】:

1)在IDE内新增Shell按钮,可以Shell方式执行脚本。

   Shell 1.0.0.0

1)新增Shell工具,可直接运行脚本文件,当前版本Shell与IDE工具无本质区别;

2)新增SJS文件,SJS与EJS无本质区别,仅仅是为关联Shell工具而设计,也考虑后期IDE和Shell工具可能存在的差异;

3)Shell工具支持-f [filename]、-icon [r|u]指令,具体说明请cmd执行ejsshell。

 

5、1.1.0.1(EJSTool Alpha2 V1.1[R2])【2015年3月6日】:

1)调整了各组件的.NET框架版本,原有项目中主要依赖.NET 4.0,但是部分组件会依赖.NET 2.0,当前已确保所有组件都是.NET 4.0。

 

4、1.1.0.0(EJSTool Alpha2 V1.1[R1])【2015年3月5日】:

1)新增事件绑定功能,采用IL汇编实现,对性能影响几乎可以忽略。

 

3、1.0.0.5(EJSTool Alpha2 V1.0[R6])【2015年2月28日】:

1)为prompt、imgPrompt弹窗置顶(置于所有窗口的顶层),以及将任务栏中的图标移除;

2)修改配置文件Autocomplete.xml、Editor.xml的后缀为“json”;

3)修复工具栏“运行”or“停止”按钮在切换活动文档时不会改变的BUG;

4)修复IDE底部状态栏信息不会随切换活动文档变化的BUG。

 

2、1.0.0.4(EJSTool Alpha2 V1.0[R5.1])【2015年2月26日】:

1)移除运行库(lib)目录内的datetime.ejs文件,并且在__init__.ejs文件内移除datetime.ejs引用;

2)后期无法直接使用new Date().format方式格式化日期(此方法存在潜在BUG);

3)新增date目录,通过“#include”预编译指令方式自行加载目录内模块;

4)在date目录内新增“format.ejs”模块,包含formatDate函数。

 

1、1.0.0.4(EJSTool Alpha2 V1.0[R5])【2015年2月26日】:

修复此版本前已发现的所有BUG,如下;

1)解释器在执行错误时能报详细的错误信息;

2)修复解释器累加BUG,比如:执行fun(i++)时会产生BUG,导致i++被执行两次。

  但是直接执行i++; fun(i)则不出错。

Posted in: EJSTool

Tags:

添加评论

  Country flag

biuquote
  • 评论
  • 在线预览
Loading