CSE-Super语言概貌

经过3个多月努力,CSE-SUPER语言的主体开发已完成,除了即时编译还没做外,其它功能都完成了,今天我介绍一下CSE-Super大概长什么样子。

 

 

用CSE-Super开发程序的例子

下图是用CSE-Super开发程序的情形,右下角那个窗体(有金鱼在游)是被测程序,左上角是CSE的集成开发界面。在集成界面里编写脚本,选中执行某段代码,可控制被测程序的界面如何表现。

 

 

CSE-Super在CSE技术体系中的位置

或许您对CSE技术体系尚不了解,我还是先介绍CSE-Super在CSE体系中的位置吧。关于CSE的扼要介绍:

CSE是一门新兴脚本编程语言,它的语法特性与主流脚本语言(如Python、Ruby等)接近,支持面向过程与面向对象编程,基于一组高度抽像的数据结构,支持所调即所得方式快速开发应用程序。

CSE由多个语言子集构成,如下图,其中CSE-C与C语言语法对应,用脚本语言仿真C语言句法,CSE-C++仿真C++语言,CSE-C#大致与C#规格对应,CSE-Super则基本与javascript对应,是一种原型导向(Prototype Oriented)的语言。这些语言集都是用脚本模拟其它语言,达到高效编码、高效调测的目的,它们均从属于CSE语法规格,为简便起见,我们把上述语法集之外的CSE脚本称为CSE-CSE语言集。


CSE-Super并非刻意为仿真某个语言而设计的,而是在整个CSE语言链中,有这么不可忽略的一环要填补,对照现有编程语言,与JavaScript最为接近,所以,我们拿它来做对比,其实,C-Super规格相比JavaScript,还稍往编译语言靠一些。

为描述方便,下文将CSE-SUPER语言简称为Super语言。

 

 

CSE-Super关键特征

一个字概括:简,两个字概括:简、快,三个字概括:简而快,四个字概括:既简又快!

“简”是简单的简,Super语言比JavaScript简单,上手更快。“快”有两层意思:一是开发快,你应该找不到比它开发还更快的编程语言了(当然,这句话有失严谨,能否快速开发还与库使用有关,你想要的东西如果库帮你实现了95%,你只做5%,对差劲些的语言来说,也一样能快速完成开发)。“快”的另一层意思是程序跑得快,如果编程快是坐飞机的话,程序跑得快就是他娘的坐火箭了!用Super开发的程序可翻译成C++,更便捷的方式是用即时编译(JIT)方式跑,其效率与编译过的代码没差别。

Super是一门让你既像JavaScript那样快速使用,又能生成C++品质代码的编程语言,外加优质的调测支持系统、可视化开发、跨平台布署等特性。

 

 

另类真正的“快”

或许你会说,JavaScript也支持即时编译,Google的V8引擎也跑得飞快呀!我强调的是真正的“快”,即时编译后JS是快,但脱离不了解释性执行的框架,V8能支撑有数万行JS源码的3D网页游戏吗?或许有人反问,用WebGL不也能表现超炫的3D界面吗?OK,这里我强调是有数万行Javascript源码,WebGL快是“库”跑得快,库是怎么来的,编译后随浏览器安装的,它的快不是因为Javascript有多快。要不,Google搞出V8后,怎么不满意它的性能,还要去弄Dart语言呢?

CSE-Super凭啥跑那么快呀!原因是Super语言以真正的C++编程思维做开发,这涉及“映射”的概念,它用脚本的形式写“以C++潜质运行”的代码。之所以用脚本形式编码,是为了保证软件开发得快,调测方法,也支持WEB开发普遍要求的“所见即所得”特征。

本文不展开论证CSE-Super为啥跑得快的问题,该话题将在后续博客将陆续介绍。

 

 

jQuery风格

jQuery是Web开发中广泛应用的一项技术,它与JS的原型导向的编程相得益彰,---- 以一种高效手段,从一堆“物件”中选出一个或多个你想操纵的物件,改它属性、或调用方法、或触发事件,这种编程方式很符合开发者思维习惯,编码、维护都简单。

Super语言继承了这个特性,不废话,举个例子:

S("BtnInfo")
  .filter( super(me) as SInt:
    return me.BtnInfo.id == 0;
  end)
 
  .bind("mouseclick",super(me,pos as SPoint,bEid as SBuff):
    sFileList as SStrList =OpenDialog.execute("select image");
    if sFileList.len():
      sourImg as Image.c(sFileList[0]);
      if !sourImg.isNull():
        img as Image().extendFrom(sourImg,wd,hi);
        BgEntity.Canvas.bindImage(img);
      end else S.stateInfo("openimage file error");
    end;
  end)
;

上面“S("BtnInfo")”选择所有使用了BtnInfo组件的实体,然后调用filter函数进一步筛选符合条件的实体,之后给这个(或这些)实体定义鼠标点击(mouseclick)事件函数。

 

 

面向对象解决方案

面向对象是现代编程语言的基本要求,类似JavaScript的原型编程是个解决方案,能避开C++的语言复杂性,也获得一定程度的“面向对象”开发特征。遗憾的是,这门语言有点老旧,且缺少事先规划,缺陷很多,JavaScript 之父Brendan Eich当初只花了10天时间就把JavaScript设计出来了,Brendan Eich曾说:

与其说我爱 JavaScript,不如说我恨它。它是 C 语言和 Self 语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:“它的优秀之处并非原创,它的原创之处并不优秀。”

从CSE-Super与JavaScript对比的角度看,JavaScript主要缺陷有三:一是性能、二是不适合写大程序,三是欠严谨与使用不便,比如:undefined、null、false、数值0、空字串都可以表示条件为“假”,它们之间的传值、比较等很烦琐,函数缺省参数用起也啰哩啰嗦的,假如Brendan Eich当初多花10天做设计,把细节考虑周详一些,格式化字串(printf或sprintf)都加上,JavaScript就不会这么被人垢病了。这里,我不并否定JS的优秀性,尤其是原型化编程方面,几项简易措施(prototype、this、闭包等)就支撑了以对象为中心编程模式,设计称得上出色,只是在当前发展条件下JS有点不适应了。

这三点缺陷中前两点最为致命,性能且不说,“不适合写大程序”主要受限于语言规格,是天生的,还不是缺少编程工具的事(当然,编程工具也缺)。基于原型的架构,只依赖操纵prototype获得对象化编程特性,它的命名系统容易乱,或者准确来说,让人觉得乱,如果编写大规模程序,命名冲突对JS架构来说似乎是一剂不可挽救的毒药。

Super语言增加“包”的概念,另有类似“域名空间”的机制,保证了它适合用来编写数十万行,甚至上百万行代码的程序。它采用类似C++域名空间,但没附加特殊语法,简单来说,域名空间只是“Super包”的自然延伸,并未因此增加语法负担。

 

 

避开了C++的复杂性

如果只取C语言特性,代码跑得飞快,编程却是个麻烦,尤其是面向对象特性缺失,编程没那么爽,但引入C++特性,面向对象有了,一堆烦碎的、令人烦心的事情接踵而来,像多态性、操作符重载、const/static/volatile修饰、传值与传址、缺省构造、拷贝构造等,还有Template模板,不用吧真缺点东西,用吧,简直是引狼入室,编程复杂性容易失控。

我所说失控指的是:不该在语言上耗精力的,结果耗去大量时间,语言只是工具嘛!你的思想却被工具奴役了。这好比你有一把铁锹,每天8小时干活,生活过得不紧不慢,有人给你推荐一种电动锹,是个好东西,每天能让你提前半小时收工,但它老坏,每坏一次你要花半天时间送修,还得等上半天不能干活。

Super语言采用了一种巧妙的办法,让C++成为一种“后台语言”,CSE-SUPER是“前台语言”,日常编程大家使用前台语言,翻译、即时编译、高级功能拓展使用后台语言,努力让编码简化,又同时保持功能强大。举个例子来说,闭包的功能比较有用,它将函数与它执行依赖的环境(变量)一起打包,在原型导向编程语言中,闭包尤显重要,熟悉javascript的朋友不妨设想一下,如果不用闭包,定义实体的属性与事件是不是很别扭?因为JS缺少C++那种严格的类封装与类继承机制,借用闭包,你可以随时定义几个局部变量,随后定义若干函数使用这些变量,很灵活,闭包变量其实承担了C++类成员的功能。C++没有闭包特性(注:C++0x标准有建议,但目前多数编译器未支持),如果C++用作前台语言,开发人员真是无能为力,C++用作后语言,由翻译器能自动插装一些处理代码时,语言自身是否支持闭包就变得不重要了,因为翻译器(或即时编译器)延伸了C++的语言能力。Super语言的上述处理方式类似于Qt用MOC做预处理,虽然只增设几条规则(用Q_OBJECT宏等),语言能力大大加强了,以致衍生出基于信号与槽GUI技术体系。

Super语言没有private、public概念,这不妨碍它提供类似功能。当C++设计private、protected、public关键时,附带还得区分public继承还是protected继承,尽管后者几乎没人在用。严格的封装用起来不便,于是用friend破坏封装性来解决,所有看上去都合理,又感觉很垃圾,friend指示也不是万能的,它要求当前类设计时要事先预见哪些定义可以成为自己的friend。

Super语言抛弃这些啰里啰嗦的东西,当你开发前模块时,所有都是透明的,没有private成员的说法,这是很自然的思路,既然代码都是自己看得到的,什么东西都可以控制,想不想去控制,完全取决于自己的意愿(其实C++封装也只是一层薄纸,类型强制转化一下,你仍然什么都能控制)。好了,封装性决取自己的意愿,我们进一步规范一下,让它成为编码规范,大家自觉遵守就是了,Super语言把封装性降格为编码规范来看待,命名后缀用“_”的是私有变量,翻译或即时编译后,自动隐藏,别人无法存取或调用,这样是不是很简单。

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值