CSE语言发展历史

2015-03-25 00:43

算起来快3年没更新这个“CSE脚本世界”的博客了,上一篇博文更新时间是12年4月7日,惭愧呀!第一问题,博客停3年,这期间都发生了些什么?为什么又捡回来,有大动作吗?

 

为什么回来?

CSE语言一直遵循“开发致用”的原则,不落实到具体应用就尽量不开发,先期CSE为VcSmith与VcTester两个工具服务,后来(近两年)CSE为PINP(PINP Is Not PPT: http://www.pinp.me/www/www/index.html)服务,当CSE够PINP使用时,就暂停开发,我集中精力搞PINP去了。本人向来低调,CSE还没作为一门独立的、通用的编程语言向外界推荐,所以也不屑于为之做宣传,博客停3年自是情理之中,最后的博客介绍了CSE-Super语言集,其实此后CSE又足足做了一年的,加起来CSE共研发了8年,耗去个人8年全职时间。

为什么回来?其实并未走远。是pause,不是stop,PINP研发告一段落就该回来,但要不要回来,让我很纠结,为CSE我耗进的时间可以打一次抗战了,做这事还没任何回报,继续做下去其实是缺少理由的。去年Apple发布Swift对我触动很大,我专门花两天研究Swift,发现Swift相对objC改进的部分,多数正是我所做的,超越Swift的也不少(在你了解CSE之前,先别忙着喷我,拜托)。我比Apple早动手3年,人家推出来了,我还藏在家中,郁闷!另一方面,Swift侧面验证了我所坚持的方向,也给了我信心。融合WebApp与NativeApp、融合强类型与弱类型,无疑是现今编程语言的发展趋势,微软搞TypeScript,Facebook弄Reactive Native,Firefox搞Rust,就连与编译八杆子打不着的PHP也宣称要增加类型检查,如果说两年前大家还看不清趋势,现在只要是行业内的都能看得清了。

为什么回来?其实并未走远。如果马上回来,我还有比他人领先数年的资本,只要条件具备就能回来。我有重起CSE念头,手头事情得了一下,整理一下过往历史,便于重启此事。

 

CSE发展概况

这门语言最早的渊源还得从15年前说起,当时我还在某通信设备公司就职,我负责开发一个服务于代码级测试的覆盖率工具,有一整套方案,大致是找一个脚本语言,仿真C语言的语法,通过映射,让脚本能直接读写C变量、调用C函数,换句话说,采用一种机制把硬语言(C语言是编译语言)变软,以脚本方式高效率的实现调测,这个工具很功能,至少当时很成功,后来因组织调整,工具失去维护主体逐渐衰败是另一回事了。

2005年7月启动CSE项目(这与我原供职的公司没关系),最初定位是用全新语言仿真C语言,如果沿用Python去映射,除了写代码别扭,还只映射80%的C语法,改CSE映射95%,实现这个目标还是很顺利,先着眼做一个纯粹的编程语言,花了近一年时间,然后转移重心做VcTester/VcSmith,顺应测试工具的需求,为CSE 不断增加特性,如此做了两年多。

之后,09年CSE全新规划过,版本从V1升到V2,目前CSE功能基本在那次规划范围内,映射C语法,也扩大到映射C++语法,用了近四年时间,实现了C++除模板之外多数特性的映射,不止用来支持测试,也支持用CSE脚本开发软件,然后翻译成C++代码发布,当时还实现Qt4.7的接口映射,用CSE可以开发GUI程序的,还合入OpenGL库,原理上支持游戏开发,只是没进入实用。

映射C++的思路是失败的,原因大家差不多能猜出,C++太复杂,映射它又附加许多规则,导致这个工具难以使用,尽管只选C++基础特性做映射,但教育用户哪些支持,哪些不支持都费劲,更别说推开来用了。这阶段工作最大贡献是:摸清了面向对象的编译语言,如何与脚本语言实现融合,这件事硬着头皮往下做,看到一点微光,傻乎乎的硬挺过来。这点微光,就是OOP编译语言与脚本语言合为一体,调测在脚本形态,发布时译为C++源码(也可译为JIT中间码,或维持原脚本形态)。期间,还在CSE-Super子集验证了原型化编程(类似于JS的prototype)的可行性。

之后,花了10个月做了一次全局重构,增加不少功能,CSE从V2升级到V3,该版本放弃以C++标准做映射,按自定义的规格描述module、Namespace、Class、Closure、Interface等,粗略来看,语言规格比objC稍大,但没有objC种种限制(因从C扩展而来)与怪里怪气语法,同时支持类继承与原型编程。比较完善了,事实也是(相比Swift而言),我原以为这是CSE最后一次全局重构,现在看来还不是,近两年编程语言发展很快,为了适应更多平台我们的基础库要拓展,语法规格还要继续完善(支持ECMA 6等)。

 

CSE版本概览

版本

时间

说明

1.0 ~ 1.2

05年7月 ~ 06年4月

纯粹做原型,用Delphi开发

1.3 ~ 1.4

06年5月 ~ 08年11月

实现C语言映射,在VcTester/VcSmith使用。本软件改用C++开发,有完整用户手册。

2.1 ~ 2.2

08年12月 ~ 12年6月

实现C++映射,在VcTester/VcSmith使用,有完整用户手册。

3.0

12年6月 ~ 13年4月

没写手册,目前仅在PINP工具中使用。放弃C++映射,把LISP层独立出来,支持CSE嵌入到基于Webkit的浏览器中,支持用CSE替代JS做开发,可将CSE代码翻译成JS脚本。

 

阶段性成果

如果您想深入了解CSE,如下材料可能会帮到你。

1.  CSEV2.2.3版本的用户手册

2.  CSEV2.2.3安装盘

3.  CSE V3.0 因为没有手册指导,不建议大家尝试。集成到 PINP 客户端工具 中了,安装后,设置CSE_DIR环境变量后才能运行CSE命令行。

4.  关于脚本运行效率与译为C++ 后的对比,用CSE V2.2做测试,翻译工具本身是用CSE脚本写的,就测翻译过程的运行效率,结果是:相同代码译为C++ 比脚本快 近500 倍(原始数据找不到了,结论我还记得)

5.  几份用CSE编码,译成JS的试验性例子,翻译时用了混淆码选项,不妨在浏览器查看index.html源文件中的JS代码(连全局变量都是混淆了的,若用JS压缩工具做不到这一步)
点击拉下对联   点击开门再点击倒福  放爆竹   露点了

6.  其它:由CSE支持的 VcSmith、VcTester、qt4cse、VcAgile、PINP等,大家到网上自行搜索,托管在Google Code上,Google Code关了后在其它地方应能搜到。