|
<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 & 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>
|
|