|
|
发表于 2010-7-22 14:29:00
|
显示全部楼层
Re:伤心啊,讨论计算机理论的没了
我看了楼主发的东西,呵呵,怎么说呢,两个人的角度不一样.
楼主要搞的物理管理,其实就是底层抽象,这个当然是为了管理和封装底层.
但是,"底层"这个概念改如何划分?
软件开发有两种思路,选择应用平台/库/语言 ,这个往往是根据需求来定的,
1.如果软件的需求本来就是不跨平台和API,那么就选用一种合适的即可,比如我现在就想做一个win32下dx9的游戏,那么我大可以放心的直接用dx,如果做完了,要求我换成OGL,我想那个是需求的巨大变更,之前的设计对于之前的需求,完全没有问题,是正确的.这个就像小山说的,因为需要的东西是特定的,就是dx的资源,所以我就直接交给dx委托了.好比我这个中学就只收会数学的小学生一样,特定的.
2.如果软件需求是:可以换OS和特定API(比如DX9,DX10,GDI,OGL等等,甚至PS3等等),需要的物理资源不是特定的,那么就需要你所谓的物理管理,其实就是对API的中间封装.这个像你说的,需要上层应用对具体的API解藕,所以需要你的物理管理,也就是平台抽象.这才好比你的中学,什么样的小学生都要,所以需要你不同的教学设施..
这个跟小山说的一样,某类学生,学校可以要也可以不要对吧,这个就是学校的需求了.所以个人感觉软件设计和分析,是不能跟需求脱节的.否则,开发总会来来会会折腾.
回到上一个问题,底层这个概念是不好划分的.你的物理管理,必然是在某硬件限制和语言限制下做的,抽象是相对的.如果我要换一个语言,而跟你用的语言不同,那么你的物理管理已经不适用了.
当然你设计一个通用的变成语言,呵呵,但是语言没有所谓绝对通用,万一我就是不想用你写的语言呢?这个就是上层的需求了.除非你写的语言真的是十分之完美,所以可以满足世间所有需求,显然这个是不可能的.软件都有其针对的应用领域,编程语言也一样,没有好坏,只是看需求.再比如java,跨平台的,但是java的某写特性我要是不需要,如果用了反而影响效率,比如它的gc.我的实时性要求很高,java不适用,那么我就选别的语言了.这个是我的需求决定的.
底层支持会对上层开发提供便利,但必然对上层有限制,有了限制,就必然不能通用.
比如OS,他给你了很多便利,有设备驱动,管理设备资源,但是特权指令,*应用*程序不能使用.而且你得用这个OS特定的API标准而不是其他的.好了,如果你想摆脱这个限制,那么就脱离OS用纯汇编吧,特权指令随便用,但是呢,设备管理要自己做了,OS提供的便利也没有了.如果你确定你不需要OS也可以,那你大可以用纯汇编来做.这个还是要看需求.有些实时性强的,特定用途的相对简单的设备,确实可以直接用汇编来做的.除非OS像编程语言一样有规范,比如POSIX,能保证上层的通用性,但是这样的规范同样带有限制.
同样你说的物理抽象,也只是针对上层的某类特定的应用来做的对吧,同样也有限制.举个例子,Ogre目前可以管理DX9,OGL;Gamebryo可以管理DX,PS2的渲染,他们都有自己的物理抽象,但是针对的上层应用是特定的,也就是说,他们在开发的时候,需求是特定的,有区别的.
假如我想管理所有的东西,即:把引擎作为物理资源,Ogre和Gambryo等同于刚才的DX和GDI,
我写了一个游戏框架可以支持各种引擎,任何一个游戏,如果想换引擎,都不用改游戏的任何代码,而是通过我的这一层封装来完成,那么引擎对于渲染API的物理抽象那一级,我已经不太关心了,我现在关心的是游戏跟引擎这一层的所谓"物理".所以说,你说的层次,是纵向的,纵向本来就有N多层,所以你的3层是相对的.而且是跟具体需求有关系的.小山说的应该偏重于横向的,也是跟具体需求有关系的.
虽然Ogre有物理这一层,但是我想用他来开发平台游戏,比如做PSP,那么...呵呵..当然Ogre很灵活,我相信写出PSP的渲染插件绝对可行,上层代码都不用动.凭我个人经验,给Gamebryo加上OGL的支持,相对于Ogre添加PSP,是更难的,但是Ogre的这个灵活性,应该也包含了小山说的那种横向设计了.同样的层次,同样有物理抽象,如果忽略了横向扩展,也不太好.当然不是说gamebryo不好,而是他们设计时的目标不同,也就是需求不一样.
呵呵.如果一个软件有类似的问题,当然你可以说是因为他的层次概念不够清晰才导致的,但是,不可否认的是,纵向跟横向的分析和设计是需要结合的.也许就是因为他对横向的分析不够,才导致纵向的层次不清晰.
呵呵.但是我感觉,纵向和横向有应该要考虑.同时,最重要的是不能脱离实际需求,否则真的很难说清楚. |
|