align=center></P>6 a! ^2 [3 o# p" G
><B>2 </B><B>C++</B><B>的设计和演化</B>(The Design and Evolution of C++)<B></B></P>
><B> </B></P>
> C++程序设计语言是由来自AT&T Bell Laboratories的Bjarne Stroustrup(即本文作者)设计和实现的,它兼具Simula语言在组织与设计方面的特性以及适用于系统程序设计的C语言设施。C++最初的版本被称作“带类的C(C with classes)”[Stroustrup,1980],在1980年被第一次投入使用;当时它只支持系统程序设计(§3)和数据抽象技术(§4.1)。支持面向对象程序设计的语言设施在1983年被加入C++;之后,面向对象设计方法和面向对象程序设计技术就逐渐进入了C++领域。在1985年,C++第一次投入商业市场[Stroustrup,1986][ Stroustrup,1986b]。在1987至1989年间,支持范型程序设计的语言设施也被加进了C++[Ellis,1990][Stroustrup,1991]。</P>
> 随着若干独立开发的C++实现产品的出现和广泛应用,正式的C++标准化工作在1990年启动。标准化工作由ANSI(American National Standard Institute)以及后来加入的ISO(International Standards Organization)负责。1998年正式发布了C++语言的国际标准[C++,1998]。在标准化工作进展期间,标准委员会充当了一个重要的角色,其发布的C++标准之草案在正式标准发布之前,一直被作为过渡标准而存在。而作为标准委员会中的积极分子,我是C++进一步发展工作中的主要参与者。与以前的C++语言版本相比,标准C++更接近我理想中的那个C++语言了。关于C++的设计和演化,在[Stroustrup,1994]、[Stroustrup,1996]和[Stroustrup,1997b]中有详细的叙述。至于标准化工作末期产生的C++语言定义,在[Stroustrup,1997]有详细叙述。</P>% X4 c5 u. a3 ?2 o/ l# Z
> </P>. H" c1 V1 F6 N% S" [
><B>2</B><B>.</B><B>1 C++</B><B>的设计目标</B>(C++ Design Aims)<B></B></P>
> C++的设计目标,就是要让C++既具有适合于系统程序设计的C语言所具有的可适应性和高效性,又能在其程序组织结构方面具有像Simula那样的语言设施(Simula所支持的这种程序组织结构通常被称为面向对象程序设计风格)。在设计的时候,还做了很大的努力,使得引借自Simula的高层次的程序设计技术能够应用于系统程序设计之中。这即是说,C++所提供的抽象机制能够被应用于那些对效率和可适应性具有极高要求的程序设计任务之中。</P>. A W& l0 B5 j. p
><FONT color=#0000ff>上述的</FONT><FONT color=#0000ff>C++之设计目标可以小结如下:</FONT></P>
align=left><B>[设计目标]</B></P>; _/ }/ k5 [" a0 \1 ~% }" F+ v
>l l 对于要解决实际问题的程序员而言,C++使程序设计变得更有乐趣;</P>, u( K+ [' K. t8 _
>l l C++是一门通用目的的程序设计语言,它:</P>* c. K I; p. Z5 M7 J
> ——是一个更好的C;</P>% e% j$ J6 a. ~+ T: U6 O d
> ——支持数据抽象;</P>
> ——支持面向对象程序设计;</P>2 l2 a& V3 B0 ~2 l9 v( m
> ——支持范型程序设计。</P>
>对范型程序设计的支持在C++设计的后期才被作为一个明确、独立的目标来实现。而在C++演化过程的大部分时间里,我一直把范型程序设计以及支持它的语言特性划归在“数据抽象”的大标题之下。</P>% i6 L1 O1 V5 B. C( }# L
> </P>& Y3 Y" }& C2 G5 ]
><B>2</B><B>.</B><B>2 C++</B><B>的设计原则</B>(Design Principles)<B></B></P>; G: v, a e d, [3 V3 z
>在[Stroustrup,1994]中,C++的设计规则被分为基本规则、基于设计的规则、语言的技术性规则以及基于低层次程序设计的规则四个方面,分列在下文中。</P>. D8 S3 B8 \ e" g
align=center><B>[基本规则(</B>General rules<B>)]</B></P>7 v/ a3 F. b+ }: n; j
>l l C++的每一步演化和发展必须是由于实际问题所引起的;</P>/ ^0 T& ?& F' P. v
>l l C++是一门语言,而不是一个完整的系统;</P>. m/ o/ D. ]1 X# q- |
>l l 不能无休止的一味追求完美;</P>/ e! v* E! A6 P
>l l C++在其存在的“当时”那个时期必须是有用处的;</P>
>l l 每一种语言特性必须有一个有根据的、明确的实现方案;</P>: Z4 M; I! o& \' ]9 [( a
>l l 总能提供一种变通的方法;</P> i1 U1 c+ v# f" t
>l l 能为意欲支持的每一种程序设计风格提供易于理解的支持方法;</P># ?+ V6 `* G( [) B
>l l 不强制于人。</P>
> 可以注意到,基本规则的最后三条暗示了两点:对适用于真实世界中各种应用的便捷工具的强调;对程序员的技术和取向(偏好)的充分考虑。从一开始,C++面向的就是那些要做实际项目的程序员。所谓的“完美”被认为是不可能达到的,这是由于C++用户在需求、背景和待解决问题上存在着太大的不同。况且,在一门通用目的的程序设计语言的整个生存期之内,连对“完美”一词的诠释都可能会有极大的改变。由此可知,在语言的演化过程中,来自用户的反馈和语言实现者们积累的经验才是最为重要的。<p>" I) x9 N _" X' Y) `| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |