随笔-341  评论-2670  文章-0  trackbacks-0
    开源了之后反而就不是很想写开发纪事了,因为每一次check-in到服务器上都会写几句描述,就有了一种已经公布了进度的错觉。Codeplex加上Visual Studio Team Foundation System真是方便,不像其他的源码管理系统一样要配置到半死,还要到命令行里面搞来搞去,好不容易找到一个UI插不进Visual Studio,好不容易找到一个能插的老是要挂。

    但是开源了之后就不好意思不写文档了。把自己的代码放上网的另一个好处就是总是觉得会有很多人来看,所以还是要写点文档介绍介绍。Codeplex是英文的,文档还不能只有中文。而且自己认识的很多程序员是说中文的,文档也不能只有英文。结果干脆就维护起了双语文档。不过双语文档真是麻烦啊。现在没看到什么文档生成工具可以产生多种语言(指自然语言)的文档的,而且格式还不好看(想象一下Doxygen的东西,全都是参差不齐的表格,不知道从哪里下手看啊),因为文档除了介绍每一个函数的作用以外,还要有编程指南。其实有些函数用指南来写反而比单独的介绍函数的返回值参数什么的要好得多。特别是C++。

    现在Vczh Library++3.0的Core Library应该算成型了,于是在做脚本引擎的部分。我打算把脚本引擎分为若干个模块。首先是基础语言的中间指令集,其实就像是专门为C语言设计出来的指令集。其次是基础语言的语法树,这次的语法树的类型规则要足够简单,因为主要是用来给高级语言的编译器产生输出的。第三是一门类似C#(当然这只是个比喻)的语言,然后把这个语言的语法树转换为C语言的语法树。想来想去之前 CMinus的失败其实并不是说高级语言语法树不能转换为C语言的语法树,而是设计出来的语法树太强大了反而不好拿来生成。最后就是动态语言了。

    这次做出来的应该是一个框架,我提供一大堆工具辅助开发语法分析器,然后底下有一层把虚拟机的事情全都给做了。于是就可以在上面用非常小的代价来实现各种各样的语言了。

    现在基础语言的中间指令集算是搞定了,当然只剩下一点点,不过这个在后面的东西完成之前没法继续写。C语言的编译器正在搞,我提供了一大堆的工具让人们可以在C++里面漂亮的拼出语法树,然后可以执行。当然以后还可能会有专门的语法分析器和代码生成器来在一些语言和这个语法树之间进行转换,不过这也仅仅是为了调试用的,因为要实现的语言其实是一门类似C#的高动态和静态结合的语言的语法树。

    但是开发一个语法树是相当麻烦的,因为语法树基本上就是几套大规模继承类的组合,然后要给他们写各种各样的虚函数,每一次要修改虚函数的参数表的时候都是大动干戈。于是今天早上开发出了一堆宏,用来方便地写语法树的visitor(这几乎是处理语法树的唯一办法),万一遇到需求变更,改起来更加方便。代码在Library\Scripting\Common\AlgorithmDeclaration.h,还附带有一个TestCase,在UnitTest\UnitTest\TestScripting_BasicLanguage.cpp里面。

    接下来就可以开发C语言语法树到中间指令集的转换了,然后一层一层做下去。最后要是有空,把最低下的中间指令集拿来一x86,整个瞬间就变成JIT了。
posted on 2010-01-09 23:37 陈梓瀚(vczh) 阅读(2400) 评论(1)  编辑 收藏 引用 所属分类: VL++3.0开发纪事

评论:
# re: Vczh Library++3.0之目前进度 2010-01-12 04:14 | 千暮(zblc)
- -b 既然已经搞的很大了 建议增加互动环节.

比如提供整个框架的主要接口细节,并且列出自己希望大家测试的代码或者希望用你的东西实现何种demo以及必备的简单说明。
把这个做成附带开源包内的一个文档包版本(这个版本提供各种你的库简略的LI和调用原则和形式,你高兴的时候可以更新它).

这样,有兴趣的人一旦需要用你的库做什么东西,下载后看到日益丰富的文档包,即能够吸收你的代码的设计思想,有洞见的人也可以提供意见。

库弄大了,健壮性和其健壮性的设计级效率就要靠使用的人去锤炼吧我想  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理