Tenshi脚本语言的设计
Tenshi中关于类型系统的设计

Tenshi中关于数据结构部分的设计

太阳神上 posted @ 2008年4月11日 15:06 in Tenshi with tags Tenshi , 1629 阅读

  在一个脚本语言中,什么动态数组啦,哈希表啦等结构可以说是必须的,而标准C中又没有提供相应的库,导致这个问题总是困扰着我。
  最初的时候,我使用的是C++来开发,所以有STL可用,在C里,就没有了这个便利。于是有两条路来选择,一是使用第三方库,第二便是自己来写。我在选择的途中有不少反复。
  首先我在SourceForge上找到了一个叫CTL的东西,名字很吓人,叫C Template Library,其实就是用宏来实现C++中的模板,但是里面只有一些最简单的结构,没有映射这类的东西,那怎么办呢?我后来专门搜了一番,有一个younglib,是国人写的,里面的库比较丰富,里面还有字符串结构。能用的地方都比较好用,但是也有一些严重的问题。那个哈希表至今是如何插入键值对我也不大清楚,它的例程里也没有相应的说明,此外一个类型的初始化函数参数太多,而它的成员往往还带有一些m_的前辍,这一点我也很不喜欢,不过其源代码是开源的,因此可以用来做参考。
  要想找一个较为通用的库,我想了想,还是找到了著名的glib,这个库更新很快,版本已到2.15,但是主版本号一直还是2,这个库的风格我很喜欢,命名很有规律,源代码也很好,它的构造很精妙,上次我在看它的GArray的实现里就发现了其用C语言来实现数据隐藏的方法,很好。我从中尝到了很多东西,这个东西在Linux里应用很广泛,它同时也是GTK的基础,GNU的主打工程之一。
  我用这个库把Tenshi完成得差不多了,可是这个程序在Windows上运行时,需要好几个动态库,这个一是很麻烦的地方,我想保持我的程序尽量小巧,Lua是最好的榜样,如果一两个动态库还好说,四五个动态库就太臃肿了。而且那个glib的哈希表不能使用栈空间的数据作为键值,一定得是静态空间或是堆空间。这样一来也不是很好用。
  于是我想还是除掉glib,自己手写数据结构。这个过程很容易产生问题,不过我花了一些时间和精力终于弄好了。但除去glib的代码很多事情都不能做了。而不久后我开始没时间了,于是Tenshi至今连个半成品都不是。
  这样,从STL->CTL->YoungLib->Glib->自己手动写,转了好几次,我还是决定自己造轮子,这样一则更熟悉数据结构,少了一些黑箱,二则解释器的技术含量也就更高了。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter