Crack程序设计语言

好久没来写东西了。。。

最近工作需要,在读Crack语言的源码。比较生僻的语言吧,估计没什么人在看。主要是因为它是架在llvm上实现的,我也恰要在其上做一些工作,所以希望借鉴Crack的实现,但确有难度,慢慢读吧~~

Crack的文档资料比较少,也就一个网页版的language guide:http://www.mindhog.net/~mmuller/projects/crack/Manual-0.5.html,因为是google的几个人设计和实现的,所以应该侧重应用,而非其学术价值,故无论文等大量书面材料予以介绍、分析和评判。其源于C++、Java和Python,综合了通用程序设计语言的长处,最大的特点是既可以作为实现脚本语言直接解释运行,也可以作为编译语言来编译执行。Crack提供了丰富的内置类型及容器;表达式方面,Crack中有若干种常用的表达式,与C++基本类似;语句方面,顺序语句、选择语句、循环语句(while和for)一应俱全;子程序方面,与大多数通用语言类似,没有区分过程和函数的概念,仅提供了函数,但特点在于Crack中的函数可以作为值进行传递,而无需像C++的函数指针一样来传递函数;另外,我觉得Crack的另一特点是模块概念的确立,它将消失于现代流行OO语言中许久的模块概念显式提升出来,作为一种语言设施直观地提供给用户,而非像Java一样进行了包概念的包装,个人感觉Crack这样做可以使得模块化程序开发的层次更加明晰,同时让类的概念变得更加单一和独立,即削弱了类的功能(换言之,使类恢复其本源的设计理念:ADT+方法),更加复杂和内涵更丰富的封装体交由模块予以体现。

说到类,个人认为Crack类的设计有些问题,一来繁复,二则有缺陷。其繁复之处体现于继承方式:Crack几乎全盘继承了C++中类的概念,同时融入Java类的概念,既有多继承又有接口,不免交叠了二者部分的功能,我揣测设计者的想法可能是既希望让类具备多继承的继承能力,又希望通过接口达到功能抽象和清晰的继承层次,但我觉得如此设计弊大于利。说到Crack的类设计之缺陷,不免要提到OO的多态性特征,而子程序的动态绑定是多态性的重要标志,但Crack似乎没有实现动态绑定,这是我觉得比较不解的一点,不知道是我阅读它材料不仔细,还是Crack确没提供。Crack仅提供支持函数重载却不支持重写,此点略奇怪,还需要这个礼拜读了源码再洞察其原因吧。。。当然Crack的类并不是一无是处的,它为每个类内置了一些特定方法init、release、call等等,init和release大致类似构造函数和析构函数,而通过call可以实现调用类的实例与调用普通函数使用相同的语法,Crack将这样的实例称作functor。

Crack提供类属单元,似C++的模板;垃圾回收使用简单的引用计数方式予以实现;异常处理采取与C++相同的随文处理方式;此外,library中提供了一系列丰富的库。

对Crack的了解仅限他给的一个guide,我所关注的重点则是它基于llvm的实现。上周才断断续续开始看这个语言,今天才把这个语言的编译器在ubuntu上安装好,所以以上观点难免出现差错和偏颇。下面说说怎么安装,其实那个guide的网页讲的差不多了,我也按照上面的步骤一步步做了,却一直装不起来,在make install步骤的时候报告找不到_pcre.so目标文件,上周五花了一个下午和晚上的时间来找原因,傻不拉几地把make步骤的输出看了一遍,发现压根没生成_pcre.so文件,我下了0.6的两个版本发现其中有这些文件,移到0.7.1里却用不起来。无奈在google的交流区里给他们几个开发着留了言,今天看到回复,说是少装了libpcre3-dev。装了此库,重新对crack进行configure, make, make install,成功!于是立即感觉自己弱爆了。。。他们说会在接下来的版本中说明安装前所需的这些会用到的库文件,也算是为开源软件的使用做一点小贡献吧。

先就到这里吧,这个礼拜要好好读源码。这是个熬人的活儿,坚持住!着实佩服实现这个东西的几个google工程师,不求名利,没有任何论文,单就兴趣而做,可能google内部的一些小项目有用这个语言的吧(此点我也不清楚),而且没有普及也无所谓,两年之间不断修修改改。若换作我来做,怕是沉不住气了吧。。。

你可能感兴趣的:(Crack程序设计语言)