数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 2393|回复: 0

Bjarne在西安讲演 (以前的不过蛮有参考价值)

[复制链接]
发表于 2004-5-7 18:49:13 | 显示全部楼层 |阅读模式
<FONT size=3>  Bjarne在西安演讲的内容为:Speaking C++ as a Native(multi-paraigm program

ming in Standard C++)

首先:Bjarne介绍了为什么要采用c++:他认为C++是简洁的,高效的C++能够Elegant ,

  direct expressions of ideas。在其中他用

C++和Fortran 做了比较。他说Fortran 在过去很长时间内是一个很高效的语言。以至于

几乎没有任何语言能超越Fortran.但是,C++做到了。他列举了一个图表,在这个图表中

C++的性能全面超越了Fortran.在测试中D.R Bjarne使用了多种C++的编译器。如Gnu-kc

c , MTL-C++-SOLARIS。看得出来Bjrane比较喜欢用MTL-C++编译器。

接下来他提到了C++的Great Weakness:

他认为主要是人们仍然用C语言的方式来书写C++(void*  , macro...) ,照成了大家对

C++的指责。

3.他通过数个例子,说明了如何Speaking C++ like a Native:

  a.

   int f(const char* file)

   {

       FILE *fp = fopen(file , "r");

                //use of file

                fclose(fp);

}

他指出这个程序显然是不安全的。然后他提出了一个解决方法(我记不太清楚了,大概写

一下):

int f(const char* file)

{

        FILE *fp = fopen(file , "r");

        Try{

        ……

}

//use of file

fclose(fp);

catch(FILE_ERROR()){

        …

}

}

他认为这个方案比前一个有所改进,但是仍然不够好。于是他提出了一个在使用构造函

数和析构函数来解决的例子。

4. 接下来他通过一个vector的例子来给大家讲解了template , 进而展示了Generic Pr

ogramming 的魅力。

5.举了个典型的例子,说明如何构造一个良好的类

a.

class Shape {

        public:         // interface to users of Shapes

                virtual void draw() const;

                virtual void rotate(int degrees);

                // ...

        protected:      // common data (for implementers of Shapes)

                Point center;

                Color col;

                // ...

        };

        class Circle : public Shape {

        public:

                void draw() const;

                void rotate(int) { }

                // ...

        protected:

                int radius;

                // ...

        };

        class Triangle : public Shape {

        public:

                void draw() const;

                void rotate(int);

                // ...

        protected:

                Point a, b, c;

                // ...

        };

他指出Shape这个类设计得是不够好的。因为为了设计这个类,需要考虑很多信息。而这

些信息对于继承者来说又不见的全都需要。所以他用纯虚函数改造了这个类。

b.

class Shape {

        public:         // interface to users of Shapes

                virtual void draw() const = 0;

                virtual void rotate(int degrees) = 0;

                virtual Point center() const = 0;

                // ...

                // no data

        };

        struct Common {

                Color col;

                // ...

        };

  

        class Circle : public Shape, protected Common {

        public:

                void draw() const;

                void rotate(int) { }

                Point center() const { return center; }

                // ...

        protected:

                Point cent;

                int radius;

        };

        class Triangle : public Shape, protected Common {

        public:

                void draw() const;

                void rotate(int);

                Point center() const;

                // ...

        protected:

                Point a, b, c;

        };

在改造了这个类后,他引入了Comm这个类。从而获得了更好的设计和抽象。因为 Commo

n的类可以在需要的时候被继承。在这里我们可以看到Refactoring知识。

6.此次讲演主要是展示multi-paradigm,通过Generic Programming来展示C++的魅力。

Bjarne举了个排序的例子,用iterator的sort和c lib的qsort做了比较。结果C++的效率

远远高于C的。他指出两者使用的算法都是一样的,但是C++的效率显然要高。这是因为

:1.Clear algorithm 2.inline .而且他认为在大多数情况下,C++的效率都要高(Use S

tandard library)。而不是像许多人认为的:C++的效率不如C.

7.在最后Bjarne说明了他此次讲演的目的:

1.尽可能使用C++ 的标准库,因为这样更安全,更高效(列了很多条,但中心意思就是要

使用Standard C++)

8.Bjarne给大家推荐了一些书和论文:

Bjarne : The C++ Programming Language

BJarne: Design and Evolution of C++.

In more Depth-series:

Koening &amp; Moo : Accelerated C++

Sutter: Exceptional C++

"       An Overview of the C++ Programming language. Handbook of Object Technolo

. CRC Press. 1998. ISBN 0-8493-3135-8.

"       Learning Standard C++ as a New Language. C/C++ Users Journal. pp 43-54.

y 1999. Turkish translation, February 2002.

"       Why C++ isn't just an Object-Oriented Programming Language. Addendum to

PSLA'95 Proceedings. OOPS Messenger. October 1995.

其中上述论文可以到Bjarne的WebSite去看: </FONT><a href="http://www.research.att.com/~bs/paper" target="_blank" ><FONT color=#000000 size=3>http://www.research.att.com/~bs/paper</FONT></A><FONT size=3>

s.html

9.剩下来的时间是提问 :



有人问到如何看待Java, Bjarne认为Java  和 C++都有各自的领域。但是Java现在比较

低效。

有人问到GC(garbage collector) , Bjarne认为不要用GC,要自己做。因为GC太慢,太

臃肿。 </FONT>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 10:39 , Processed in 0.056129 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表