已经差不多有三个多星期没有写博客了。这段时间主要是在休假。休假的时候写代码,跟朋友玩,去了趟广州办点事情,然后就要结束了。
Vczh Library++3.0还是一直在开发。第一层语言的语义分析基本上已经做完了,不过还需要加一点功能进去,这在代码生成部分做了之后再做。
这次的思路比之前清晰了很多。我一直在思考如何将Javascript编译成C#再编译成C语言的问题。当然这说的三种语言只是“类似”,无论换成python也好lua也好都是一样的。作为一个通用的脚本语言开发平台,我的目标是让一门新语言可以被很快的组装起来,并在我开发的平台上运行,与平台上的其他语言互通并共享函数库。前者是重点,后者是支撑。也就是说无论怎么定位,最终都是要做成一个可以让各种语言同时运行,并让新语言可以被快速开发的一个平台。于是每一层语言需要支持的特性都得经过深思熟虑才能确定下来。
因此,我的策略是为各种不同类型的语言开发一个元语言,然后通过描述一门新语言与相应的元语言的不同之处来完成该新语言的开发工作。因此最近的工作主要都是针对最基础的那一层——也就是面向过程非托管语言。在这里大概可以称之为Native X语言吧。之所以叫Native X,是因为这玩意儿跟C语言还是有一些比较大的区别的。跟之前的CMinus不一样,CMinus致力于将C(做了一点修改)编译成x86的代码,而Native X则致力于提供大多数面向过程的非托管语言所需要的组件,并且为面向对象的托管语言提供必要的基础设施。
在不断地思考中,我的目标已经渐渐清楚了。Native X语言与C语言的差别主要有以下部分:
1、没有宏
2、提供struct的构造函数和析构函数
3、提供泛型
4、提供dll级别的反射和泛型支持。
5、源代码组织方法不体现在代码里(没有#include,或者#import之类的预编译指令)
6、提供new和delete的变形
也就是说,今后用Native X语言写的模板函数和模板类型,就算编译进dll也无所谓,照样可以被其他程序拿去使用。这样的话可以做很多事情,譬如说实现pascal和basic的数组和字符串,实现C#的类引用等等。但是Native X语言同时具有操作指针和内存的能力,虽然比较危险,但是可以通过上层语言的编译器来确保产生的代码是受保护的。这样做的好处是在Vczh Library++3.0开发完以后,一个游戏的脚本可以大部分用Lua来写,而且其中需要后门的一小部分代码可以用C来写,然后编译在一起成为一个独立的脚本程序,最后让游戏去执行它。
上面描述的功能是在抽象了很多语言的语法之后确定下来的。这个目标在当前进度下实现了一般,也就是说这些多出来的部分还没做,但是C语言有的那一部分的语义分析已经做完了,顺带搞定了一个通用的符号表雏形,还有大大简化语法树以及相关算法开发的各种基础设施。目前的计划是先实现C语言有的那一部分的代码生成,让脚本可以运行起来,然后将上面列出来的“区别”一个一个添加进去,同时做好unit test的工作。
最新的代码可以在
http://vlpp.codeplex.com下载。
posted on 2010-02-23 08:59
陈梓瀚(vczh) 阅读(2712)
评论(9) 编辑 收藏 引用 所属分类:
VL++3.0开发纪事