基础知识:
c++和c是一种完全不同的语言。c以小取胜,c++以多范性编程而著称。
c++的范型可以包括:
c一样的面向过程编程;
宏语言;
c with class;
oo;
template;
GP。
这中间,我认为宏是一种可以称作范型的东西,因为这方面的高手完全可以用它来创造出属于自己的子语言来。
应该把简单目的的template编程(泛型?此泛型非彼范型)和GP分开,他们的编程目标是截然不同的。
最早受MFC影响很深。感觉自己最初的进步始于MFC源码的阅读(VC4.0了)。所以当时写程序的风格也是类MFC的,我的定义就是OO + 宏。其实也很好,很强大。
中间做了两年java,这期间学习了GP,两种完全不同风格的编程模式冲击下,渐渐放弃了MFC的手法。
但是OO + GP的开发偶觉得很痛苦,所以虽然不断地尝试,但并没有持续很久。原因一个字:累!
OO最大的缺点我认为是侵入式的。用c写程序,lib也好,dll也好,一般只要一个简单不过的头文件就好了。而C++和Java呢,拔出萝卜带着泥,哩哩罗罗一堆类,通常缺了谁也不行。
OO的原始目的/优点是什么呢?封装呗!可这样还不如c的模块封装性,实在是难以令人苟同。
带来的恶果是很明显的。OO的工程,尤其是C++,我们精心维护的工程,很容易被一两个水平不够的孩子改的面目全非。编译不过了,这儿加个头文件;程序运行遇到了框架的束缚,改就一个字!java的情况也好不到哪儿去。所以broken window的理论被发明了,说白就是:谨慎谨慎再谨慎!珍惜珍惜再珍惜!
解决这种状况的方法大概只有一种,就是给OO的模块加上一个面向过程的壳子。我们可以美其名曰:Facade。MS发明的COM+接口在这里也能凑活用上。不过这样的壳子对于程序本身,总像是身外之物。因为他们和真正的Facade和COM+的初衷是不一致的。孟岩老大给这种状况起了一个好听的名字,叫做:用C做接口,用C++编程!
GP是一种很奇特的技术。我不是科班出身,所有的技术大多从编码中得来。虽然好读书,但是有点儿不求甚解,经常会搞错个名词什么的,思想上也很难达到深刻。不过当我第一次看到《深入C++模型》、《设计模式》、《重构》、《敏捷开发》时,里面的东西都有似曾相识的感觉:原来如此!这不就是我一直研究的XXX问题么?
然而GP的概念最初我是从书本中得来的。两本书给了我很大的启发作用:《C++设计新思维》和《产生式编程——方法、工具和应用》。它给我的感觉是震撼性的,焕然一新的:原来C++还可以这样想,这样用!然后基于它作了很多实践。但是真实的感受却是:理想和实际相差得很远。
GP的技术难度我就不说了。多数人认为是GP的技术门槛太高,限制了它的使用。我不这样认为。如果一个技术真的能够带来很高的劳动生产率,那么即使它的难度很大,也不会真正阻止它的流行。而对于有创造力和求知欲的程序员来说,“技术难度”一词很难说是褒义还是贬义,也许更可能因此成为大家追捧的对象。
所以,GP之所以未流行起来,应该只能是基于以下两种可能:
1. 目前的市场没有符合这种技术的强有力的需求(不妨碍这种技术今后在某一时刻会忽然流行起来);
2. (由于某种限制,或者自身缺陷)这种技术并未带来真正的、实际的、比其它技术更高的劳动生产率水平。
说到这儿我要暂停一下。我所说GP技术未流行起来,并不是否定或者无视诸如STL,boost之类的模板库的广泛应用。我所指的,是深入C++项目的GP思想的应用,至少目前是不存在的。
那么,原因何在呢?
<未完待续>
分享到:
相关推荐
对于想要提升易语言编程技能或者对桌面应用开发感兴趣的用户来说,这是一个很好的实践项目。 通过学习和分析这个项目的源代码,你可以掌握如何用易语言实现桌面游戏的基本流程,了解如何使用Windows API来控制窗口...
Contiki实现了名为protothread的轻量级线程模型,该模型能够提供类似于线程的编程风格,而多个protothread共享同一个任务栈,有效减少了RAM的占用。这种线程模型类似于Linux和Windows中的线程概念,但更加适用于资源...
这些BIP文件可以被游戏引擎导入,通过编程控制角色按照预设的动作序列执行,为游戏增加真实感和趣味性。在实际开发中,开发者可以根据需要选择适合的动画,或者对这些动作进行修改和组合,创造出更多独特的游戏行为...
它支持全速USB通信(480Mb/s)和高速USB通信(12Mb/s),通过USB协议在芯片内部得到处理,无需专门的USB固件编程。这一特点使得FT232H非常适用于需要高速数据传输和简单硬件开发的场合。 FT232H的高级特性包括: - ...
7. **视觉融合**:确保布娃娃的外观与游戏的视觉风格保持一致,例如皮肤纹理、光照效果等。 为了实现布娃娃效果,开发者需要精心设计和调整每个元素,以平衡性能和真实感。优化也是关键,因为实时物理计算可能会对...