qiezi的学习园地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首页 :: 新随笔 ::  ::  :: 管理 ::
“为C++实现一个IDL”这个主题,我已经考虑得差不多了,最后几个问题也解决了,打算建立一个项目来实现它。

项目命名为ancients,字面意思是“远古的,旧的”,实际上这个主题也算是旧的了。原本打算命名为C++ Remoting,不过想了一下,还是换个名字,免得让人一看就想拿去跟java, c#的remoting比较。

取这个名字主要是因为喜欢看《星际之门》剧集,里面最喜欢的一个种族就是ancients。

asgard是另一个种族,在ancients这个名字被人占用了的情况下,只好选它了。它的字面意思是“仙宫”,也是不错的名字,呵呵。asgard这个种族的科技非常发达,有先进的亚空间旅行技术,先进的光传送技术,身体也比较符合一些报道中外星人的样子。

暂时还没找到合适的空间来放这个项目,就以压缩包的形式在这个blog上做吧。

打算先实现动态部分,我给它命名为reflection,模仿java的,当然也不会做它那么完整。这部分必须先做,这样方便用来测试静态结构。

然后是静态结构部分,前面已经写了2篇乱七八糟的描述,剩余问题(函数原形推导问题)基本已经解决了。

整个框架在Service以下都是环境无关的,这里的环境指的是协议、通讯等环境。也就是说,定义一个Service,并不在一开始就指定它所使用的通讯协议。定义完成以后,把它指定给一个协议,就可以实现协议绑定,甚至在运行时刻动态切换到另一个协议。当然这可能是不合理的,不过我认为如果支持这种做法,本身就是灵活性的一种体现。



前面还有些地方,和实际情况有些差别的,需要补充完善。简要描述如下:

使用宏来定义Service,前面只定义了方法的原型、名称、服务端绑定的函数,其实还差一个重要的东西,就是参数的名字。
如果使用自己的协议,或者是顺序存储的协议,比如BENCODE,来作为远程调用协议,那么参数的名字是不重要的,只要按顺序把参数序列化、反序列化就可以了。
但在使用SOAP作为远程调用协议时,就得考虑为参数加上名字了,SOAP是从XML元素中,按参数名称来提取参数值的,虽然我们可以为参数生成一个名字,但这个名字不能描述参数所表达的意思。
所以需要考虑为参数取上名字。

暂时就补充这一点,其它方面有等进一步研究。
posted on 2005-09-20 10:30 qiezi 阅读(266) 评论(16)  编辑 收藏 引用 所属分类: 自家破烂C++

评论

# re: 正式建立ancients项目 2005-09-20 18:54 可冰
如果我有能力参与的话,我一定会参加的.
我对分布式以及Web Service也是很感兴趣,只是没有相关的知识和经验.
虽然如此,但至少我也会大力支持的!  回复  更多评论
  

# re: 正式建立ancients项目 2005-09-20 19:37 cpunion
呵呵,我对这个项目很有信心,而且经过实验,它也没我原来想像的那么复杂,所以我甚至感觉有些奇怪为何以前没人做类似的东西,哪怕是个实验品。

实际上这个东西是我考虑已久的,差不多快半年了,一直觉得难以实现,就没想去做它。这次抽了点时间写了些代码,才知道它不是那么复杂,看来空想是想不出东西的,呵呵。

打算用一星期时间来把基本的静态结构和动态部分实现出来,也就是生成一个全局类型信息表(把它看成XTI也行),生成具有自省能力的类结构。

剩下的部分就是函数原型映射、基本类型映射、自定义类型映射等,这些是用模板来产生的,想着复杂,往往写起代码来反而很容易写。  回复  更多评论
  

# re: 正式建立ancients项目 2005-09-20 19:49 问题男
支持,如果没有闭源的打算,就在sf上建立吧  回复  更多评论
  

# re: 正式建立ancients项目 2005-09-20 20:00 cpunion
当然要开源的啊,这样才能吸引一些高手来帮助完成,或者提一些中肯的意见。例如你上次给我的委托类的指点就非常好,后来又受到 jfwan 的启发,对于我自己来说,也得到了学习提高的机会。

写英文文档对我来说还是有些难度,阅读还差不多,总不能写好让人翻译?呵呵,所以sf上就先缓一缓,先在这里以压缩包的形式来发布。

另外前面写的2篇确实乱,而且没写清楚重要的细节,打算边实现边写点简单的说明文档。

BTW:在SF上搜了一下,居然已经有了一个ancients项目,不过好像是个死项目了,几年没更新。。。  回复  更多评论
  

# re: 正式建立ancients项目 2005-09-20 20:10 问题男
其实英文什么的都没关系,文档什么的等版本稳定再补不迟

cvs方式有助于令项目管理更正规,项目组管理能方便的管理开发人员,sf还为项目提供了发布系统,另外,还有100m php空间,等项目有需要时可以放置主页,比如用wiki搭一个站什么的

除此之外tracker、bug report系统、news系统、doc系统什么的暂时用不到也无所谓

我是这么想的,呵呵  回复  更多评论
  

# re: 正式建立ancients项目 2005-09-20 20:16 cpunion
呵呵,也是啊,我去申请一个,ancients被使用了,就叫asgard好了,反正也就是个代号。  回复  更多评论
  

# re: 正式建立ancients项目 2005-09-20 20:22 问题男
sf可以申请重新利用废弃的项目的名字,不过我看了一下,那个项目,有cvs,估计ancients这个名字申请不下来了

不过好在您又为它起了个新名字,没有重复的申请就很方便了,呵呵  回复  更多评论
  

# re: 正式建立ancients项目 2005-09-20 20:30 cpunion
呵呵,我打开那个页面,非常非常慢,注册个用户就用了近10分钟了,真怕以后上传文件时也这样。

注册项目那个页面告诉我要“set your true identity details.”,不过打开那个链接一片空白,不能继续了。

干脆先开始写代码,等到有个简单的框架了再往上放也不迟。  回复  更多评论
  

# re: 正式建立ancients项目 2005-09-20 20:33 问题男
web是比较慢啊,我深有体会,有机会在申请不迟,反正两头工作可以并发的,呵呵

不过cvs和ftp都很快,呵呵,上传下载没有问题
  回复  更多评论
  

# re: 正式建立ancients项目 2005-09-20 20:37 cpunion
多谢支持,我好好准备2天就开始。现在写了一堆测试代码,各个关键的问题算是解决了,要理一下思路,晚上先把函数原形推导的代码发一点上来。  回复  更多评论
  

# re: 正式建立ancients项目 2005-09-20 22:28 天下无双
能开源,我就支持.  回复  更多评论
  

# re: 正式建立ancients项目 2005-09-20 22:33 cpunion
我找不到理由不开源,毕竟学来的东西很大一部分是从网上得来的,而且开源能帮助我完善它。

刚写了另一篇,写的过程中怕死机,拷贝了N次到记事本中,竟然停电了,没有保存,非常郁闷。  回复  更多评论
  

# re: 正式建立asgard项目 (因ancients已经被人使用了) 2005-12-20 17:24 uframer
兄弟,山头立到这里了,呵呵。我也很喜欢看Stargate的,看来我们共同点真多啊。你的这个项目怎么样了,给我的gmail发一份如何:
uframer@gmail.com  回复  更多评论
  

# re: 正式建立asgard项目 (因ancients已经被人使用了) 2005-12-20 17:37 芋头
呵呵,大驾光临,有失远迎。

自从上次忙项目后,好久没进度了,还远远不到可以使用的程度,要不早发出来了。这种实现语法不太好看,就跟boost::spirit一样,所以这个大概会废弃,或者采用另一种实现方式,比如我在考虑改造aspect c++的编译器来做,可行性还不可知。

D语言文档快更新完了吧?  回复  更多评论
  

# re: 正式建立asgard项目 (因ancients已经被人使用了) 2005-12-20 17:42 uframer
汗!更新怕是要被期末考试耽误了......
不过Xen的内容可能会很快加上去,正在胡编乱造课程报告,一头雾水  回复  更多评论
  

# re: 正式建立asgard项目 (因ancients已经被人使用了) 2005-12-20 17:49 芋头
我以为你早就上班了。。现在学生都好厉害呀,有压力了。。。

Xen前段时间安装测试了一下,没搞明白,希望你的文章能引导一下。

另祝:圣诞快乐

也祝所有善良的朋友们。  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航: