weitom1982

向各位技术前辈学习,学习再学习.
posts - 299, comments - 79, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

 

Posted on 2006-03-13 11:03 小明 阅读(317) 评论(7)  编辑 收藏收藏至365Key 所属分类: C/C++

   作为C++编译器,从vc6到vc8最大的调整就是对C++标准的支持更好了。
   我发现的几点不同。

a. For 循环的声明

      Vc6: for(int i<0;i<100;++i){}; j = i;   (ok)

Vc8: for(int i<0;i<100;++i){}; j = i;   (illegal)

      int i; for(i<0;i<100;++i){}; j = i;   (ok)

Vc8中的for循环中变量的有效期仅仅在for 循环的开始与结束期间有效。

b.string实现
   

Vc6: string s; char *p = s.begin(); (ok)

Vc8: string s; char *p = s.begin(); (illegal)

     string s; char *p = const_cast<char *>(s.c_str()); (ok)

在vc6中,string::iterator被定义为char *,但是vc8中不是

c.更严格的typename声明的需要

Vc6:

template<class T>

class Test

{

public:

typedef map<T,T> mymap;

      mymap::iterator mymap_iter;

}; (ok)

Vc8:

template<class T>

class Test

{

public:

      typedef map<T,T> mymap;

      mymap::iterator mymap_iter;

};     (illegal)

typename mymap::iterator mymap_iter;(ok)

vc8更加严格的要求程序员在类型前面加上typename以避免歧义

d.不允许默认的int类型

Vc6: fun() { return 0;} (ok)

Vc8: fun() { return 0;} (illegal)

int fun() { return 0;} (ok)

vc8不支持默认返回int类型

e.typedef必须是public才能被外界访问到

Vc6:

Class Test

{

      typedef int iterator;

};

Test::iterator i; (ok)

Vc8:

Class Test

{

      typedef int iterator;

};

Test::iterator i; (illegal)

 

Class Test

{

public:

      typedef int iterator;

};

Test::iterator i; (ok)

附录:一些资源(From msdn)

Overviews:

Moving from 6.0 to 7.1:

Moving from 7.1 to 8.0:

Feedback

#  re: 再谈从vc6迁移到vs2005  回复  

2006-03-13 14:06 by cf
about b
这个应该是库实现的不同,而非编译器的吧,呵呵

c++标准规定template class basic_string的iterator是
typedef implementation defined iterator;
这样的,即使vc6附带的pj库有
typedef char* iterator;
这样的定义,也不能认为二者有必要联系吧,换句话说,即便在vc6(with那个pj库)中
char *p = s.begin();
能被编译通过,这么些也是不妥当的,呵呵

#  re: cf   回复  

2006-03-13 15:12 by 小明
about b 这个确实跟编译器没有关系

但是由于stl的重要性,所以我也把这点列了上去。vc6的stl实现跟vc8差异还是很大的。因为我在看见的工程里面发现了很多char *p = s.begin(); 这样的写法,所以我不得不去改他们。

#  re: 再谈从vc6迁移到vs2005  回复  

2006-03-13 17:11 by 沐枫网志
const_cast<char *>(s.c_str())
这样的用法,也很不妥当哟。--估计这就是当初工程师之所以使用begin()的原因。

建议,如果是为了遍历字串,使用string::iterator p = s.begin();
或者 s[n],等方式来使用字符串。

这样,照样可以 *p++,也照样可以 *p = 'A',可以s[10]='A',可以char a = s[10]。
但是s.c_str()就比较玄了……

#  re: 沐枫网志  回复  

2006-03-13 17:34 by 小明
他们这样用,并不是为了遍历,很少有人需要遍历字符串,毕竟string有很多成员函数可以帮助做到。

把string转为char *,就为了传入一些Windows API中去。
用c_str()没有问题,stl标准规定的,保持string和char *的可兼容。

经常是这样用的
string str;
str.resize(255);
::RegSetValueEx(hKey, REGVAL_CREDENTIAL_CIPHERKEY, NULL, REG_BINARY, const_cast<char *>(str.c_str()) , str.size());

#  re: 再谈从vc6迁移到vs2005  回复  

2006-03-13 22:01 by fiestay
不错.
不过现在还没有几乎将项目转到2005上,而且感觉2005很容易出问题.有时候编译运行时,会提示找不到MFC8.0.dll,真是faint~~

#  re: 再谈从vc6迁移到vs2005  回复  

2006-03-14 10:26 by 1234
VS 2005出得有点让人失望,Bug太多了,MS应该推迟VS2005的发布

顺便问一下楼主,您知道如何编程程序控制显卡的双输出么,就是说希望将一个界面输出到主显示器,另一个界面输出到从显示器. 谢谢

#  re: 再谈从vc6迁移到vs2005  回复  

2006-03-15 12:18 by stone
都常遇到哪些Bug?

posted @ 2006-03-22 10:35 高山流水 阅读(2435) | 评论 (0)编辑 收藏

  Posted on 2006-01-17 14:12 小明 阅读(328) 评论(0)  编辑 收藏收藏至365Key 所属分类: C/C++

所谓的compile-time Constraints就是在编译期使用C++的语法规则对设计进行约束检查,尽量在编译期把程序的问题暴露出来,节省成本。

常用的规则:
1.大小为0的数组在编译期会报错
template<typename T1,typename T2>
void check_size()
{
     
int dmp[sizeof(T1)==sizeof(T2)];
}

比如
check_size<int,long>();//ok
check_size<int,char>();//compile error:cannot allocate an array of constant size 0

2.不同类型的指针需要强制转换
以此可以用来判断两个对象是否有继承关系
template<typename T1,typename T2>
void is_derived(T1 *pd =0 ,T2 *pb=0)
{
    pb 
= pd;
}
比如:
is_derived<int,char>()  //compile failed

3.union的成员不能是非POD
union Test
{
    std::string s; //illegal
};
这一点可以用来测试一个类型是否是POD
template<typename T>
void check_pod()
{
    union {
        T data;
    };
};
比如:
check_pod<int>();//ok
check_pod<std::string>();//failed


常用的技巧:

1.利用模板特化
Loki里面的例子
namespace Loki
{
    template
<int> struct CompileTimeError;
    template
<> struct CompileTimeError<true> {};
}

#define LOKI_STATIC_CHECK(expr, msg) \
    { Loki::CompileTimeError
<((expr) != 0)> ERROR_##msg; (void)ERROR_##msg; } 
利用特化来定制错误信息

2.利用空函数来实现0开销
编译器可能将空函数优化掉

3.利用enum无开销的取得编译期的所得到的整数值
Loki里面的例子:
template <class TList> struct Length;
        template 
<> struct Length<NullType>
        {
            
enum { value = 0 };
        };
        
        template 
<class T, class U>
        
struct Length< Typelist<T, U> >
        {
            
enum { value = 1 + Length<U>::value };
        };

posted @ 2006-03-22 10:34 高山流水 阅读(242) | 评论 (0)编辑 收藏

对于多线程编程,很多人概念不清,写代码的时候要么是处处加锁,影响性能不说,还容易莫名其妙的死锁,还有人对多线程敬而远之。

所以学习多线程编程最重要的不是学习API,而是理解什么才是多线程安全的代码

从例子说起

#include <windows.h>
#include 
<process.h>

long global1 = 0;
volatile long global2 = 0;

class MyClass
{
public:
    MyClass() : m(
0)
    {
        
++m;
    }

    
int fun(int v)
    {
        
return m+v; //-----------9
    }

    
void set(int v)
    {
        m 
= v;   //-------------10
    }
    
int m;
};

MyClass global_object; 
//-------------8

unsigned 
int __stdcall thread_fun1(void *param)
{
    
static int static2 = 0;
    
static MyClass static_object; //--------6
    int local1 = 0;
    
    
++local1;     //-------1
    ++static2;    //-------2
    ++global1;    //-------3
    ++global2;    //-------4
    InterlockedIncrement(&global1); //--------5

    local1 
= global_object.fun(local1); //----------7

    global_object.
set(local1); //---------------11

    
return 0;
}


unsigned 
int __stdcall thread_fun2(void *param)
{
    
++global1;    //-------3
    ++global2;    //-------4
    InterlockedIncrement(&global1); //--------5

    global_object.
set(1); //-----------11
    return 0;
}


int main()
{
    HANDLE thread1 
= (HANDLE)_beginthreadex(0,0,&thread_fun1,0,0,0); //thread 1
    HANDLE thread2 = (HANDLE)_beginthreadex(0,0,&thread_fun1,0,0,0); //thread 2
    HANDLE thread3 = (HANDLE)_beginthreadex(0,0,&thread_fun2,0,0,0); //thread 3
    
    WaitForSingleObject(thread1,INFINITE);
    WaitForSingleObject(thread2,INFINITE);
    WaitForSingleObject(thread3,INFINITE);
    
    
return 0;
}



1.局部变量局部使用是安全的
为什么?因为每个thread 都有自己的运行堆栈,而局部变量是生存在堆栈中,大家不干扰。
所以代码1
int local1;
++local1;
是安全的

2.全局原生变量多线程读写是不安全的
全局变量是在堆(heap)中
long global1 = 0;
++global2;
++这个操作其实分为两部,一个是读,另外一个是写
 mov         ecx,global
 add         ecx,1
 mov         global,ecx
所以代码3处是不安全的

3.函数静态变量多线程读写也是不安全的
道理同2
所以代码2处也是不安全的

4.volatile能保证全局整形变量是多线程安全的么
不能。
volatile仅仅是告诫compiler不要对这个变量作优化,每次都要从memory取数值,而不是从register
所以代码4也不是安全

5.InterlockedIncrement保证整型变量自增的原子性
所以代码5是安全的

6.function static object的初始化是多线程安全的么
不是。
著名的Meyer Singleton其实不是线程安全的
Object & getInstance()

     static Object o;
     return o;
}
可能会造成多次初始化对象
所以代码6处是不安全的

7.在32机器上,4字节整形一次assign是原子的
比如
i =10; //thread1
i=4; //thread2
不会导致i的值处于未知状态,要么是10要么是4

其它的大家自己去体会。

写好多线程安全的法宝就是封装,使数据有保护的被访问到
安全性:
局部变量>成员变量>全局变量

Feedback

# re: 什么才是多线程安全的  回复  

2006-01-18 08:06 by nanami
关于栈和堆的问题,并不一定在堆上的都是不安全的。
type struct _abc
{
int a;
int b;
int c;
}abc, *pabc;

abc myabc;
pabc pmyabc = new myabc;

两个变量myabc和pmyabc的对象所在就完全不同,使用new会在堆栈上分配,而直接声明变量会在堆上分配。堆比较小,而栈大,对于一些比较庞大的类对象,一般都要在堆栈上分配,但是堆栈的性能逊于堆的性能,小对象例如int阿什么的都是直接在堆上生成。每个线程有自己的独立的堆和栈。全局变量在公共堆上生成,所以不安全。而对线程独立的堆和栈,都是线程安全,互不相干的。

操作线程尽量使用EnterCriticalSection和LeaveCriticalSection,性能要比Mutex强,尤其是大量锁定和解锁尤为明显。

# to:nanami  回复  

2006-01-18 10:09 by 小明
先澄清一下名词
堆:heap
栈(堆栈):stack

我没说在heap上面都是不安全的阿

其实不管在stack还是heap,说到底也不果是一个普通的内存地址,没特殊的地方,只要是多个thread不加锁的读写都会引起性能问题。

# re: 什么才是多线程安全的  回复  

2006-01-18 14:43 by vender
to nanami:

一些问题,与你商榷,从你的发言看,对于堆和栈你恰恰搞反了,你提到

“使用new会在堆栈上分配”
——确切的说是堆(heap)上(当然重载new的行为者不一定)

“而直接声明变量会在堆上分配”
——全局域(如任何函数、类外定义的变量)和静态变量(如有static指示符的)分配(确切的说是映射)在静态存储区(大致可以认为和可执行代码运行时内存区域相当),动态分配发生在堆(heap)上(前提是没有重载new等分配操作符),局部变量在栈(stack)上分配

“堆比较小,而栈大”
——这么说有点没谱,大小不是堆和栈的区别,一般而言栈大小确定,栈一旦建立大小就固定了,因此会发生溢出,而堆则可以随时向操作系统申请更多,

“对于一些比较庞大的类对象,一般都要在堆栈上分配”
——由上一点可知,应该是“对于一些比较庞大的类对象,一般都要在堆而不是在栈上分配”

“堆栈的性能逊于堆的性能,小对象例如int阿什么的都是直接在堆上生成”
——本质上没什么性能差异,最多也就是由于堆上的内存总是只能通过指针和引用来访问,需要多做一次内存寻址而已

“每个线程有自己的独立的堆和栈。全局变量在公共堆上生成,所以不安全。而对线程独立的堆和栈,都是线程安全,互不相干的。”
——安全不安全全看该对象是否是“临界资源”(参看操作系统书籍),而不论是在哪里分配的,小明兄的一句话至为妥当:“其实不管在stack还是heap,说到底也不果是一个普通的内存地址,没特殊的地方,只要是多个thread不加锁的读写都会引起性能问题。”,当然小明兄所指“性能问题”肯定是笔误,我想他指的是“安全问题”

# re: 什么才是多线程安全的  回复  

2006-01-21 15:05 by tony
同意楼上说的!

# re: 什么才是多线程安全的  回复  

2006-02-27 11:27 by 恋花蝶
nanami

你什么都说反了,我真是汗你的基础啊.....

# re: 什么才是多线程安全的  回复  

2006-03-02 23:19 by 路人乙
2006-01-18 14:43 by vender
说的基本完全正确(这句话语意有问题哈~)

# re: 什么才是多线程安全的  回复  

2006-03-04 20:18 by hsen
2.全局原生变量多线程读写也不一定是不安全的,只要把代码改成这个样子就安全了
假设 struct T
T* global_t;

线程代码这样
T* nt = new T;
T* temp = & global_t;
do{
memcpy(nt, global_t, sizeof(T));
//修改
}while(!CAS(&global_t, temp, nt));

CAS 可以用 xchgcmp 指令来实现

posted @ 2006-03-22 10:33 高山流水 阅读(716) | 评论 (0)编辑 收藏

最近在看naruto,不想eva那样灰暗,
》几个场景
1,白的死                        有时死比生幸福。
2,鹿丸流泪                   总会有什么会感动你。
3,修炼螺旋丸               集中精力全力以赴以及永不放弃


》几段对白
1,说到做到(naruto)
2,爱就是保护对你来说重要的人,不让关心你的人失望。
3,我是天才,所以我不能输(日向宁次)  青春与责任。
4,燃烧的青春 (凯) 呵呵,我不行了。。。。
5,鹿丸的父亲的一段话 逃避不是办法,正对生活,不要对自己失望,你可以作的事情很多。
6,我又在人生的道路上迷路了。(卡卡西)
7,对我最重要的人都已经不在了。(卡卡西) 谁是对你重要的人。
8,为什么要为别人牺牲(三忍的葬礼)   每个人都有自己的理想,却为别人而牺牲

》几个人物
1,naruto   很幸运,没在人生的路上迷路,走正确的路总是那么难,改正错误也并非易事
2,三代      青春不在时一切都是过去了。


》几种想法
1,寻找自己的存在和别人的认同,寻找的过程中变得麻木。
2,美好的事物总是短暂的
3,一个人真正能走到前台的机会很少,所以一定要把握住,哪怕是很不光彩。
4,生命是什么。
5,相信自己,相信朋友。

posted @ 2006-03-21 23:10 高山流水 阅读(246) | 评论 (0)编辑 收藏

这些是我已经读过了的或者是正在读的.net图书,同时也是我在综合了网上及论坛中各方面意见之后,认为在目前的.net框架领域内最值得系统研习的6本核心书籍,而且其编号是根据由易到难、从入门到上手有序排列的,特把它们罗列出来,希望在过年前后能够集中完成其阅读(尤其是后三本书,工作量还是非常大的)。

1.  Applied Microsoft .NET Framework Programming, Jeffrey Richter, Microsoft Press, Jan. 2002
2.  Essential .NET, Volume I: The Common Language Runtime, Don Box, Addison-Wesley Professional, Nov. 2002
3.  Inside Microsoft .NET IL Assembler, Serge Lidin, Microsoft Press, Feb. 2002
4.  The Common Language Infrastructure Annotated Standard, Jim Miller, Addison-Wesley Professional, Oct. 2003
5.  Shared Source CLI Essentials, David Stutz, O'Reilly, Mar. 2003
6.  Distributed Virtual Machines - Inside the Rotor CLI, Gary Nutt, Addison Wesley, Sep. 2004

在整理上述书目的同时,也隐隐产生了一种不是很好的感受,觉得似乎国内软件开发领域出现了明显的断层,关注底层C++对象模型和高层架构、应用模式及软件工厂的多,真正主动地了解中间组件模型、并深知其技术渊源的却很少,形成了一种两头大中间小的技术格局;这可能与中文图书“一窝蜂”的出版方式有关系,或许也同国内流于表面的浮躁风气有关。反观国外,就我比较关注的微软开发技术领域而言,真正熟悉组件模型的牛人们绝大多数均已参与到当前主流产品开发的第一线,如Don Box、Jim S. Miller等,尽管组件模型至今仍不甚完美,但确已成为我们目前不予或缺的实实在在的工作基础,而进一步完善其缺陷则恰恰成为了当前系统软件研发领域最大的发展动力,.net就是一个极好的产品实例。写到这里,有些感受不吐不快,技术宣传有时确实能够蒙蔽多数人的眼睛,这里仅仅只提提微软的几个经典杰作:Web Service的兴起让微软看到了以微软自己的方式来解释“跨平台”、从而打压Java最大优势的潜力和契机;而Common Language则看似能够团结一切可以团结的力量,为最偏执的语言爱好者找到使用.net的理由;Asp.net则提供了一种开发效率更高的组件-对象模型来帮助.net争取服务器端技术方面的主动,我有一种感受,上述种种均只是.net的面,而都不是.net的本质,它们都只是.net作为系统级组件平台发挥其核心竞争力的外在环境而已。

微软的想法确实与Java阵营不同,很多朋友抨击.net缺乏创新及大局观,抨击当前.net的技术发展在目前Java社区中一浪高过一浪的架构-模式研究热潮面前显得是多么的渺小,我倒觉得这恰恰是微软布局的不同:通过扎实修炼内力,依靠.net不断完善的组件模型,以待迎接将来基于框架应用的新一轮组合爆炸阶段,从而因小及大;而事实的另一方面,则是Java碰到了自身不可逾越的障碍,而不得不以引入架构、模式的宏观方式来弥补自身组件模型所存在的种种无法克服的缺陷。以往技术发展的历史仿佛又告诉我们,应用框架的兴起和存在,从某种角度上来看,可以说是一种核心技术得以深化发展的顶点,也可以被视为是其疲态渐显的征兆和另一场核心技术革命的开始,因为从本质上来说框架并不能算是纯粹构件化的,其本身是紧耦合的,从Win32 API、MFC/OWL到可视化,再到分布式应用,这似乎都是很好的历史佐证,作为应用框架的先驱和力行者,微软在这上面是尝过苦头的,不然也不会有COM / DCOM / MTS / COM+等一系列早期面向组件的产品技术的诞生。在硬件性能充裕的前提下,未来软件生产率的极限唯有依靠独立、直观、简洁的组合方式来实现,这是我从.net身上体会到的微软的技术哲学。

当然,上述种种,这只是我的一点略显激进的个人感受罢了,未必成熟,只是因为在网上从未见到过相似观点的讨论,才把它们写了出来,也许时间会改变我的观点,一切的一切,均有待时间的验证。

posted @ 2006-03-21 17:28 高山流水 阅读(236) | 评论 (0)编辑 收藏

  作者:  
  日期: Wednesday, December 29, 2004

   作为一个学者,我不是来卖弄嘴皮子的。借助这个讲坛,我认为各行各业对知识的接受是潜移默化,循序渐近的过程。下面从自然科学的角度来谈谈我的一些观点,我提出几个重大问题:
 

   第一,我国搞了几十年的科学研究与攻关,在几十个工业门类中,到底有哪几个是属于中国的民族工业或者可以称为自己的工业的?到底有哪几项科研在国际上是数一数二的?中国现在到底需要什么?我经常出国,每出一次国,灵魂就受到一次洗礼,就巴不得在回来的第二天就去中小学讲。为什么?就是感到紧迫的压力和羞愧,特别是去了日本和韩国,这两个同属于东方国家去了之后,感触更多。
 

   下面这四个方面,是近5年吹得最厉害的。先说超导,这也是从美国人开始的。
 

   我是一个教授,在浙大当老师,浙大的"求是"是个无价之宝。现在中国的知识分子有个弱点,就是不喜欢人家说自己的缺陷,更不愿意自己说自己的缺陷。我今天就愿意来揭揭自己的短,面对产业家,我更应该说实话。中国今天的科技很多都是"跟踪",这也难为中国的教授,因为日子过得较苦,没有钱,加上很多领导同志本身也没有知识,为了蒙领导,让他们拨一点钱,总得把一些文章、报告、口号写得越高越好。比如,现在教育界号称"建世界第一流大学" ,教育部跨世纪发展计划中定的10所大学,现在已选定了9所,第10所还未选出。在中国这个发展中国家,你能建10所世界一流大学,那美国有多少所?日本有多少所?现在的实际状况是:世界上前200所大学,中国一所都排不进!在亚洲能排出几所?我到国外去看了以后,感到要将浙大建成世界一流大学就像共产主义理想,我们永远要努力!但是,我们不应该去追求这样虚幻的目标,去呼这样的口号,我们的差距还很大。
 

   现在的几个行业也是前几年套着中国科技产业目标走得几个方向。像纳米,它只不过是一个尺度概念。各种尺度的材料都有各自的用处,比如,为什么要把泥土拿来做成砖,砖的尺度比沙泥要大得多,因为小的沙粒没有强度。我们怎么能把丰富多彩的物质世界只说成是一个纳米呢?所以,谁都没有注意是谁提出的这个口号的,其实我们又中了美国人的圈套!这与军备竞赛是一样的。超导中国科学院在搞;基因上海在搞;纳米全国在搞,连工厂技术员也在搞。刚才何祚庥先生讲的悬浮列车,不要以为上海的高楼大厦与东京、大阪一样,中国就现代化了。修一个房子、修一座桥非常容易,但你要看看国民素质到了一个什么样的阶段。
 

   日本大楼里走出来的人都是受过高等教育的;而我们上海的大厦里走出来的人却都是些腰缠万贯的文盲!怎么能说国家已经现代化了?浙江杭州搞的世贸会挺漂亮,但你可以去西溪河看看,如果西溪河能出现小鸟、天鹅,杭州就现代化了,这不是一个穿一件衣服的问题。我们最需要的是什么?我们不要用这些东西来摆样子!我们应该关注我国的哪几个方面?这是我的一些建议,提出的一些口号,以前说"无知无畏",现在却是"无知才无畏",许多企业把浙江省技术监督局、科委的人请来吃一顿饭,喝一点酒,他就给你签个字,再把我们这些教授胁迫到那里去,给你盖个章,然后就是"填补国内外空白"、"国际先进水平",写论文则是"国际领先水平的研究成果"、"首次科学发现"等等,这都是目前非常严重的问题!作为一个大学教授,我深深地为此担忧!这不是我们的责任,是我们的领导无知,是他们倡导了这个主流。我知道在座的处长或老总日子很难过,因为你们不写这样的报表,就拿不到钱,项目就得不到批准。教授也同样如此,天天写报告,而不是在实验室静下心来好好搞研究,这是很严重的!
 

   科学家说,纳米无所不能,这一说,大家就都去搞纳米了;老板说:纳米商机无限,再不上就没有机会了,因此,宁波想干,诸暨想干,天台也想干,大家都来搞纳米。科学家知道纳米不稳定,它做成材料就聚集在一起,但产业家并不知道这一点。有人说,纳米这么好,我们都变成纳米人多好,但高的篮球谁打?篮框得降低了。纳米人的作用可否用在脑血栓治疗上,不用吃药,脑袋上挖个小孔,让纳米人钻进去清理一下就行了。这些东西可能只有我在说不好。纳米在最近的一二个月里在浙江炒得很厉害,什么"纳米冰箱能防霉",我就不明白:一个是生物学与卫生学的概念、一个是材料尺寸的纳米怎么会防霉?所以,要千万注意,无知的人骗起人来不得了,因为他胆子大,什么都敢说,所以说:"无知才无畏",我们懂一点的就不敢随便讲,这是误导!

现在,让科学界的人感到很困惑:许多与纳米研究无关,不具备纳米科研的单位都在上纳米项目,开设了许多新的战场。作为商界的人士,这个投入是风险投入,所得到的绝对回报是非常危险的。越是高科技的东西,越不要指望它的市场回报,这个概念是我今天提出的。
 

   新闻界的人在干什么?新闻界的同志喜欢写一些新东西。我知道,没有新东西写起来不精彩。误导与新闻界有关,新闻界听到一点就是一个片,如此描述宣传以致于浙江的报纸整版整版地写纳米。我特别地告诫大家,这是把整个一个学科的概念搞得非常庸俗!
 

   下面我谈谈科技问题。我们整个国家民族工业的基础极其脆弱,这几年我在日本商店购物,日本的袜子、手巾、低档毛衣、低档服装全都是中国产的,这是否感到光荣?其实我们所谓的外资合营企业,所引进的东西,真正有科技的含量极少,这就是我们的天真,就是我们领导的天真!比如,东京这么大的城市,全部的电视频道就只有6个,杭州有多少个?这是很清楚的。拿什么钱吃什么饭,我们现在是在吃国家的饭,所以,开了这么多频道不怕赔也不怕赚,而日本就不能这样。我在日本10天,没有看到一 条有关中国的消息,这也是中国人的天真。广岛亚运会在日本召开时,有哪一个中国人得金牌的镜头能日本的电视上看得到?日本人喜欢下围棋,但他不知道聂卫平是谁。我国现在是需要国际化,但国际化了以后连自己的祖宗是谁都不知道了,连自己的民族文化是什么都不知道了,所以我要说,改革开放20年,我们到底在经济上,科技上得到了什么?好的是有的,但作为一个科学家,我要深思:我们在高科技上得到了什么?日本、韩国、美国基本都是把国内不能生产的、低价的东西转移到第叁世界国家来生产。你并没有得到高科技,你以为他会给你高科技吗?不会的!比如汽车,我们联营了这么多家,但日本的汽车技术,比如丰田,都是第二代、第叁代之前的,他不会给你先进的!为什么现在柯尼卡、柯达、富士在中国"大跳水"?就是要挤跨乐凯,这个中国现在剩下的唯一一个国产胶卷!等哪一天乐凯垮掉了,国外的胶卷就会全部涨价!现在在中国卖的进口胶卷比日本、美国的都便宜,这就是倾销!这一点中国人并不知道。为什么我们的大学排不进前200名?因为规要有800篇FCA的论文才能进入前200名。为什么浙大好不容易搞了10年的科研却没有钱?教授的论文写得少了,平均一个教授没有一篇,像我这样一年能写5、6篇的很少。为什么?中国的教授一个月的工资平均只有1500元,相当于170美元;美国的教授拿多少工资?他的一篇文章值多少钱?可见中国教授便宜了!美国教授成本高!为什么会是这样?所以,我非常担心这样下去,再过5年、10年,你到底还有些什么东西?这样恶性循环后,我们基本上没有自己的工业了!我不赞成"造船不如买船,买船不如租船",过若干年再看看,将会是什么样子?
 

   下面谈谈我个人的观点:


   第一,我们国家的现实和发展就是这样:凡是依赖不成的,我们自己都能搞得像模像样,比如二弹一星;凡是能够引进的,就都搞不成。为什么?企业的科技人员辛辛苦苦地搞一个技术革新,只要区里的计委领导、省里的计经委领导哪一天带着人到美国去考察一下,买来几个电器产品,跟他们签个协议,然后再到美国去培训10天,引进一条线,马上就可以把你这个国营企业打跨,这就是现实!现在很多合资企业就这样,卖点东西,而没有去考虑这些深层次的东西。殊不知,这就是社会的恶性循环!
   

   关于电信的事,我只跟电信部门这样说:这点电话费我付得起!但是,你们想过没有,你们从自己的这个角度赚了消费者的钱,但消费者里面有大夫,你电信的人就不生病吗?你若进医院,他给你卖高价药行吗?我开玩笑:"你别看我是个穷教授,赚不了钱。我今天回去就去查名单,看我这个学院、我这个系的学生有多少是你们电信部门的子女,到了下个学期全部不及格!若要及格,每分交5000元钱。"但我决不会这么做!若这样做,这个世界就乱了。作为社会成员,一定要有这样的思想:大家是互相依存的,我们这个国家也同样。但是很多人只考虑自己,只要自己赚钱而不管别人怎样,若那样的话,明天就可能得到报应。这是我的一个观点。
 

   下面这几个问题是最重要的问题:
 

   中国需要什么样的教育?中国需要什么样的人才?中国需要什么样的科技?中国需要什么样的产业?教育、学习是为了什么?最近,幼儿园、小学、中学、大学以及饭店、各个厂矿企业等单位都邀请我去演讲,这是我应该为社会做的,是我的本份,加上我身兼数职:院长、系主任,所长等,他们开口就要找博士。

   其实,这需要共同语言受教育的层次、人格的素质,这才是最重要的!现在很多人对学生的教育没有注重这个方面。中小学在搞素质教育,什么叫素质?英语、计算机、钢琴都会一点儿能算是素质吗?我住的那层楼的孩子都在弹钢琴,我就听到二楼的一个男孩子在弹《致爱丽丝》时,边弹边哭、边骂他妈妈。爸爸妈妈都是音盲,却一定要把孩子培养成音乐家。这么好的太阳,让孩子坐在屋里,他能受得了吗?这是何必呢?幼儿园3岁开始学英语,我这个观点不知你们是否赞同,我在学校讲课时,学生们听了觉得我所说的正符合了他们的心意。我认为:语言、计算机就是工具。中国的外语教授讲英语还不如美国卖菜的农民!怎么看待这个问题?日本博士、德国教授说不出英语的多得是!我们怎么能说一个人不会说英语就是文盲呢?语言就是一个工具!你没有那个环境,他怎么能讲这个语言呢?比如,我35岁开始学日语,我现在的日语是顶呱呱的。

   但是,我在国内进修一年,派日本教授来教我,可我就是学不好,非常紧张。因为年龄较大了,学得我白天的语法都错了,晚上做梦全讲日语,且这时讲的语法都是对的!到了日本后,我是在实验室工作,而打工的人2个月学的日语就比我学得溜,这主要就是因为没有环境。所以说,如果我是教育部长,我要改革二件事:第一,取消六级考试,你一个研究生连中文一级都不及格,你英文考六级干什么呢?看看研究生写得论文,自己的民族文化都没有学好,天天考英语──打勾:托福打勾,GRE打勾,英文考出很高的分,可哪个写的英文论文在我面前过得了关呢?过不了关!这样培养出来的人能干什么?自己搞的专业一点都没学好!我跟在座的老板们提醒一句,等下我要讲一下人才使用问题,你们现在的招聘动不动就要英语好,干什么呢?在厕所里讲英语?需要吗?要计算机好?说不会计算机就是文盲,这又是一个误区!我现在是教授,我顾不上搞计算机,可是,浙大搞计算机的就特别敬佩我\巴我:"郑强,你材料搞得这么好,我给你点计算机,你去用用玩玩,今后搞材料我们合作合作,我们也可沾点光。"物质世界不是算出来的,算能把肚子算饱吗?现在我国搞了点软件,很多精英 ──年轻人都跑到计算机行业去打工,自己成不了材,可惜啊!不像我一直在做材料的教授,光荣得很!

   我们浙大就一个计算机院士潘云鹤,浙大的计算机在全国排在第几呢?浙大最好的学生都去学计算机了,我经常呼吁:这是在害人!我的同学现在在美国都在卖菜、卖中药,成不了材,他们现在倒是非常羡慕我在国内搞得这么好。他们的钱是稍微比我多一点,但是我现在在中国过的日子比他们在美国过得好!

   由此可见,这不是钱就能解决的问题。我到日本留学时受了许多苦,这次我到英国大学见到了十几个中国留学生,他们都向我诉苦:每天只睡4个小时!浙大有很多老教授,夫妻两个连走路都走不动了,孩子却在美国。我认为中国人的民族心理这几年扭曲到什么程度了!外国人不理解,认为中国人有病:为什么夫妻不在一起,而是一方在国外、一方和孩子在国内,中国人这是何苦呢?!父母老了,是否需要人服侍?在国外的,是否想念父母呢?回答是肯定的,但不知是为了撑什么面子?!中国穷得这副样子,我可以公开告诉大家,我这次是跟浙大的最高人物一起去日本的──因为我在日本留了这么长时间的学,在日本,我只能请他吃一碗面:一天晚上,请了8个教授一个人一碗酱油面,就花了我1000元人民币!所以,我在日本就呆不住,像我这样的人,我现在就不愿出国,去10天可以, 去1个月我就受不了!

   言归正传,现在的孩子学英语,但父母都不会讲英语,我的一个朋友的女儿在美国学了英语,回来就忘记了,这就是语言的特点。语言没有环境,就学不好。所以,第一,要取消六级,让孩子们放松;第二,大学一年级开始的叁个月像军训那样突击一下英语,马上过关,然后就任其自然。你看我从高中开始学英语,大学学,硕士学,博士学,花了我多少精力!你说中国人怎么做得出高科技的研究成果?我这几天就教训我手下的几位女学生,问她们在干什么,看不到人影,一天到晚考这样、考那样的,到美国去干什么?在国内要干的事多着呢!你整天考英语,美国人连报个名都要收你们的钱,日本人也是如此,中国学生到日本去要交续费,到日本留学是为日本人打工,好不容易挣点钱交了学费,读完博士在日本的公司就职,当劳动力,挣了一笔钱后要回国了就买了家电,把钱全给了日本人。你们都没有注意这件事,这里面都是经济问题。这就是素质教育到底是什么。

   现在有这样一个现象:大学叁年级时有42名学生,毕业时只剩15人了,其他人全部不能毕业。这是为什么?就是因为他们在大学里玩。这就是中小学教育的失败!中小学的教育就是听话,老师管干部,干部管同学,孩子们都学会了成年化的处世方式,这是害人啊!这样强迫性地做了一些好事后,没有把做好事与做人准则结合起来去培养,而只学会了拍马屁、讨老师喜欢、说成人话。上次电视上就曾经播出,一个小孩得了个奖,主诗人问他最愿意说什么,他说:"我最愿意跟江爷爷说:我向你报告!""江爷爷"是谁?还不是老师教的!孩子们在中小学活得很累,到了大学就没人管了,所以就要玩、就要谈恋爱。我们系有个男生,跟四川一个女孩谈恋爱,前几天班主任向我汇报,上个月跑回去 20天看他女朋友,这还得了!这是为什么?这就是从小教育的结果!我的儿子在班上就有6个女同学有"记录" 的特权,记录哪个男同学动了。有了6次记录后,男同学就得写检查,家长也要跟着写检查。我第一次写时很难受,怎么能做这种事呢?后来就习惯了。到了星期五就问儿子:"这个星期要不要写?"反正脸皮也厚了,写就写吧。问题是实际上他只违反了一次纪律就同时被6个女孩子看见了,这也算6次!但是,我并不为我儿子担心,我为:他受这点挫折也好、压抑也好,对他一生的成长有好处;而我恰恰担心的是那6个女同学,以后怎么能够经历得起打击和挫折!这样的教育是很令人深思的。所以,我作为一个博士生导师,我从来是看人不看学历的,学历不等于能力。你们现在的招聘动不动就要高学历,我就是要批判这样做。
 

   我提出一个命名,叫"消费学历"──就是滥用学历。现在提拔干部也同样,不看他的身体,到了60岁,有些身体特别棒且有能力的人也要让他退休;而有的人叁、四十岁得了肝炎,还得让他干,这就是"一刀切"。招聘时也总是看学历。学历是指一个人读书还可以,并不能代表他能够当你的经营人员、开发人员。我们有很多同学成绩好,却什么都做不了。在我们大学像我这种程度的人,招博士生是从来不看成绩的,成绩算什么!现在我从事的这个领域在中国有叁个杰出的人才,当初在读研究生时都补考过,而成绩考得好的几个人却都跑到美国去卖中药了,这说明了什么问题?作老板的可不能这样啊!现在浙大有规定,有博士点的,留校就必须全部留博士生而不准留硕士生,这样,仪器就没有人去操作。

   人才的梯队一定要合理,而不要认为教授就是万能的、博士就是万能的。中国的教育体系就是让每一个老百姓都充满希望和理想,教育孩子们要树立远大的理想。实际上,人的能力是不一样的,扫地能扫好,也应该受到尊重;打扫厕所能打扫干净,也应该受到尊重,不能动不动就要高学历。我要提醒的是:在国外可不是这样,反之,美国、日本的博士就很难找到工作,为什么?因为老板心疼钱,招了博士要给他高工资,而他能做什么用呢?这是个具体问题。我不知道现在的组织部长、人事处长在干什么,真的是在"选女婿"吗?找这么高学历的人干什么呢?现在,中国的大学提出要培养高层次的人才,我说这话错了,中国现在教育特点应该是让全民得到教育,而不是去培养少数的专门人才。
 

   上次全国的化学奥林匹克竞赛在杭州举行,是浙大主办的,学校说来了这么多高校的人挖人才,浙大也要派人去挖,于是派我去了。我去讲了话,我毫不客气地说:进这扇门,我的心情是又高兴又沉重。你们把孩子们搞坏了!为什么?我国搞奥林匹克竞赛──中小学叫奥赛班是举国体制,就是为了得到世界上的一个荣誉!而在美国、日本、西欧国家就只有一个学校,叫"Play- again"就是搞着玩的。难道有一个学生得了奥林匹克的冠军,就说明中国的教育好吗?不是,它不能代表我国的真实情况。在那些非重点学校里,有多少孩子在外面赌博、打游戏机!这就是我国教育的一种误区。我指出:如果作为一个教授来做这样的事,在座的人都感到心痛!作为父母,我们绝不能这样宠爱自己的孩子,把这些孩子当宝贝一样。化学的奥林匹克竞赛,清华、北大的教授来了一大堆,我们今天是在做一件害孩子的事!我的话讲完后,主诗人要下面哪个大学的教授接着讲,他们都不敢上台讲了。请扪心自问:我们这样做对吗?奥林匹克竞赛的结果在浙大的一个现象是:在中学学得好的、保送的,到了大学叁年级成绩都降下去了,孩子这么小,怎么能分等级呢?其实,他们根本就是在同一个起跑线上的,成长的路程还长得很,后天的努力才是最重要的。

   所以,我始终对孩子、对学生都是鼓励的。我们系里有一个女同学,我看到她一天到晚没有笑脸,就是为了得到那个高分数、为了得到高额的奖学金,我感到很痛心!我说:你这是在用青春买荣誉、买光环,你今后的心灵是要受到创伤的!我希望她不要看重明年从第1名掉到第2名,后年从第2名掉到第3名。
 

   我这个老师当得怪吧,我不是要求她往上走,而是往下走,我这是在救她!昨天,我的孩子参加环湖跑,我对他说:"你不要去争第1名,慢慢跑。"不是说我不要孩子上进,而是这些老师在干什么?让5-6岁、7-8岁的孩子跑4000米,为了争得那个第一,把孩子的身体都跑坏了。我之所以长的矮,就是因为我在5岁时早晨起床跑步,骨质过早钙化了。现在懂科学了,就知道了,小孩子不能随便大运动量地运动。可是求是小学每天早上第一节课就是把全校的孩子弄到街上去跑步,刚刚吃了早饭,能量还没有发挥,能量是要用到脑子上的,要上一天的课。可早上的跑步就让能量消耗了,这不科学!还有,沿着马路跑步,汽车尾汽对孩子的健康是很有损害的。这样的教育到底是为了什么?我敢讲一点:我们浙大有很多教授就被小学老师教育得像儿子一样,小学老师每次开会的第一句话就是:亲爱的家长同志们:孩子是你们的,也是我们的,但是归根结底还是你们的!"每次都讲这些话,然后就说:"你们不懂科学、不懂教育。"我心里就在想:孩子都是你们教育了送到我们手上来的,我就非常担心,孩子的心灵从小让你们这么一整就麻烦了。

   我觉得我现在最对不起的就是我小学、中学、大学的同学们。我从小干部当惯了,一直在管人,到现在我心里觉得最对不起的就是那时被我管过的这些同学,不管他们现在是在开出租车还是在干啥,都非常有成就。所以,怎样把孩子培养好,从小让他有一个健康的心理,这比成绩还重要。何况各位家长,你们由于自己的学历低些,总是希望孩子出头,我也知道有些家长在双休日的上午、下午、晚上都要安排孩子参加各种各样的学习,把孩子完全拖垮了,其结果孩子是要厌恶的。过早弹钢琴的人,除非他真正是个音乐家,十有八、九到了中途都会厌恶,这就是逆反心理学。所以,你们不能这么干,这么干是摧残人才,这是我今天讲的,为人才的培养谈一些自己的看法。
 

   科技到底该干什么?高科技到底该干什么?如果我是科技部长,该玩的就玩,就像陈景润,他就是玩。陈景润如果是处在今天的中国,他绝对是要去讨饭的,因为他不会去搞产业化,他的英语也不好,他说话都不流利,中文都讲不好,按现在"标准",他是个文盲,还谈什么教授!日本人就是喜欢美国人,我跟日本人说:你们这个民族爱谁,谁就要向你们扔原子弹。日本人就是喜欢黑人也不喜欢中国人。现在在日本奖学金最高的是美国人、欧美人;第二是韩国人、台湾人;第叁是巴基斯坦人、马来西亚人;第四是印度人、非洲国家的人;第五才轮到中国人。我就特别对我们的女教授、女同学说:在日本人面前一句日文都不要讲,会也不要讲;日本人一听说你讲英文,特别是看到中国女孩讲英文,腿都要发软,这是真的!日本人不知道龙井茶,而只知道乌龙茶,就因为旭日升乌龙茶的广告宣传。日本人在开始做乌龙茶广告时找了6个最漂亮的中国女孩,日本人就从这个广告得出一个结论:中国女性的漂亮是因为喝了乌龙茶。所以,日本人特别崇尚乌龙茶,而不知道龙井茶。日本就是崇尚欧美,谁能讲英语,谁就是老大。日本首相森嘉郎不会英语,但为了表现自己会英语,就叫秘书安排了一套程序,准备在冲绳开政府间合作会议时,见到克林顿用英语问候一下。但是日本人讲英语很糟糕,森喜郎见到克林顿,将"How are you!"说成了"Who are you?",克林顿以为这是森喜郎在跟他幽默:我明明是美国总统,他还不知道吗?他为什么还这么问我?我今天也跟他来个幽默:"I am husband of Hilary."("我是希拉里的丈夫"),森喜郎不管克林顿怎么说 ,就忙按照程序回答:"Too me."、" Me too.",克林顿想你这个玩笑开得太大了,我老婆怎么变成你老婆了?这在日本就成了个大笑话!最近,我们在办高新科技园区,就国家的投资而言,我们的领导的意见往往是去追世界潮流:想去建世界一流的国家,达到一流的水平。我非常惭愧地向大家谴责一下自己:我们中国的教授很多拿了国家的钱就像小孩搞家家一样,把钱用完了,就写点文章,塞在抽屉里,一点用都没有,就向领导报告:我做完了。这很对不起国家的钱!说实话,应该弄清楚哪些是搞着玩的,哪些是对企业有帮助的,这一点我们没有做好。

   日本 、韩国的科技进步就是在于针对性非常强。现在有一个现象:所有的企业家到了浙大就问我:"郑教授,现在有什么能赚钱的项目?给我们吧!"其实,你们太不了解了,教授是完全是远离市场的,根本不知道市场是什么!他只是在搞游戏,玩家家,想一些新玩意,不要以为教授什么都有!当然,这不能怪你们,因为今天中国的生产力的发展,还没有到让我们的老板们具备很高的意识。刚才何先生就讲得很好,在目前的阶段,中国还有假货的话,就不能指望做假的人有什么超前的科技需求,他赚一把是一把。但是,当中国的经济秩序真正完善以后,造假绝对活不下去!现在在日本就没有人敢造假,只要稍微有一点点造假,马上就完蛋。中国总有一天要进入到有序的阶段,一有序,造假的人肯定活不下去。企业能不能生存,说到底就是看你有没有绝招。这个绝招,第一是产品的特色;第二是科技的含量。上次我毫不客气地对张德江书记说:浙江要建经济大省,文化强省,但是"大"不等于"强","民富"不等于"国强"。

   科威特有的是钱,伊拉克要打垮它就打垮了,这是很简单的事。我说 :经济强省应该有下列标志。我问张书记:第一,浙江省现在的经济总量中有多少具有科技的含量?第二,浙江省目前的经济有几个是关系到中国国民经济命脉的、民生的、大的工业?第叁,浙江的经济真的有一天在亚洲金融风暴来临时能抗得住吗?这些浙江省都有问题。浙江的市场发育得很完全,但如果我是外省人,如果哪一天我自己那里方便了,我为什么还要跑到你这儿买?现在之所以有市场,是因为浙江市场里卖假货的很多,要么走私、要么卖假,这几年就是这样发起来的。如果不是这样,再过几年,辽宁的人要货在北京买就行,何必再跑到你浙江来买,如果不到你这儿买你怎么办?现在浙 江称为塑料大省,全国叁分之一的塑料制品产在浙江,上次在余姚,就召开过塑料科技大会。浙江的西服很多,像杉杉西服等,还有娃哈哈。但是,请各位注意:西服、果奶不是民生大计!千岛湖的农夫山泉是好,但水什么地方没有?这就是问题。另外,温州经验好不好?好!但如果我是国家主席,我可不会在全国搞温州经验。温州经验说到底是民族经济全部被国外吃掉。你的资本算什么,温州老板的那点钱与日本老板相比就不算钱,马上会被吃掉,而且技术含量极低。我去了温州好几次,看到的都是家庭工厂,与现代企业能比吗?此外,把西部的博士挖过来,用高薪养起来,这些都不能算是集约经营和规模经营,这些都是危机!但是我们却尽唱高调。

 

   那天,我最后是带着感情与张德江谈的:我是爱浙江的,作为一个教师,我教育学生习惯了,我认为对待学生最好的方式就是从教育的角度讲他,而不是去夸他"长得好"、"今后要当科学家",这都是害人的话。所以我愿意对张书记提点意见。
  

再进一步,老板会提问:"郑教授,我现在做的这些,你看看结合你的知识能否给我改进一下?"我认为这样的提问是最好的。上次我们青年教授到天台去,天台是个穷地方,前面1 1个教授都讲IT产业,讲得那些企业家第二天都要来搞通讯行业了。我最后发言:前面的人讲的话又把你们害苦了。你们这么穷的地方怎么搞得过宁波、杭州?你们应该把本地的东西通过我们的先进思想和技术改造好,做得更好一点。所以我希望我们的企业家在下次见到教授时提出这类问题,你们就进步了。真正的科技产业进步的源泉在你们,而不在教授。当你们有钱了、有产业规模了该怎么办,就应该学学日本。

   我国现在到底需要什么?软件搞得这么红火,但我们并不需要软件。其实,我们现在的软件搞不过印度。美国硅谷一大半的人才是从印度去的。但印度的国防部长常常惊骇这叁、四年来与中国的差距──他是从奥运会得了一块金牌谈起的,国民总产值才是中国的叁分之一,人口与中国差不多,而粮食产量却连中国的一半都不到。中国现在最需要的是材料,是制造与控制。不要以为我们什么都有,我这次到韩国看了真是痛心,在韩国的街上见不到一辆外国的进口车,绝对没有!我又听说现代企业的生产量比我国的桑塔纳、长春、武汉、富康的总和还多,且他们所有制造汽车的精密仪器全部都是国产的。而我们的这些部分却全部是进口的,没有一样是自己的。人家想做什么,什么都能做好,我们却是想做什么,什么都做不成。归根结底,不是靠我们的软件,搞计算机的人什么都会玩,上次到天台演示房子设计的动态,把房地产公司的人看傻眼了。其实,这都是哄人的,房子要造起来还是要靠材料,靠造房子的人。现在我国在这两方面是最薄弱的。高等学校投了几十个亿买研究设备,但这些设备90%都是进口的,没有一样是国产的。买来的时候觉得很了不得,可以哄领导,但是若有哪个学生把仪器弄坏了,就死了,我们国内的企业没有一家敢修仪器的,即使一个很简单的实验仪器国内也没有一家工厂能够生产,这就是我国现在整个民族工业的一个缩影!我们不愿意踏实地来做这些工作,而只是做了很多表面文章,既生产不出材料,也没有先进的制造工艺。

   我的这个观点得到了大多数教授的拥护。但是,要求省里的科委主任把钱投到材料和制造工艺这两方面,他就不干,他要做世界第一流的"纳米"。说到底,这都是些表面现象,我们现在最需要的是人们的一种坚韧不拔的精神,我们民族已经没有这个精神了。我们现在想的只是"卖得越多越好"。这次校长、书记在日本,见到东京名古屋大学的校长,他提了个问题:我们都属于东方文化,现在就要召集大家来讨论怎样保护东方文化,保护东方文化的特色。
 

   大家知道,生物是多样化的,世界上若只有美国人就没有味道。日本人说:"我们培养的很多人也到美国去了,当是他们很惊讶,你们的7位中国校长一致认为这种现象没有关系,这是国际化。"日本人这番话引起了我的深思:我们中国没有一点本钱来谈我们的人才储备敢与日本比,但是,我们所表现出了一种莫明奇妙的胸怀。比如,日本的许多大学为什么能得到许多捐款,就是因为捐款的人对母校有感情,对社会有报答。哪一个日本大学为日本的财团或企业输送的高级人才越多,所得到的奖学金就越多。现在,教育界有一种反思,清华大学自建校以来从来没有像今天这样完全实现了她当初的办学宗旨:"成为美利坚合众国的预备学校"。如果我是中国的纳税人,我怎么能想得通,我国国民花那么多钱投入到这个学校,可它培养的人却都跑到美国去了,为他们服务了。

   可是你有没有看 到美国政府为我国哪个大学捐过点钱?你们体现出这么一种胸怀是什么意思呢?你们到韩国、日本、新加坡去看看,你们就知道中国人在精神上垮到了什么地步!我恨日本人,我到日本是作为日本大使馆面试的中国最杰出的博士生去的,当时在四川只选了我一个人,我到日本拿的奖学金都被告知不要告诉日本人,怕日本人嫉妒,他们就是要培养汉奸。但是我到日本是越培养越恨,神□大地震时我正在日本,我是中国留学生的领导,那时死了许多中国人,其中杭州人最多,就因为日本人先救日本人,根本顾不上救中国人!在日本空港,日本国民的进港通道有8个,而仅给外国人留一个,你得排队,等日本人全部走完了,他再转换牌子,让外国人再进来。中国人为什么这些年都往外跑,最重要的是要让国民自己爱自己国家。

   在广西,美国人的骨头埋了几十年,还叫中国农民去找,把美国人的骨头找到了,放在棺材里,送回到白宫,举行隆重的仪式、行军礼,这怎么能让美国人不自豪?反之,当找美国人骨头的中国农民在寻找时摔了一跤,骨头摔坏了,给200元钱就打发回家了,连"劳动模范"都没给人家,你怎么能让你的国民爱这个国家,有自尊的呢?!如果我是杭州的市长,我绝对不是狭隘的民族自尊心──如果杭州有什么灾难,我就首先把杭州的老百姓安排在香格里拉,让外国人在外面排队!(掌声!)这样,你才会让你的国民爱自己的国家!一个日本的农民跑到峨嵋山去玩,骨头摔断了,你就用中国空军的直升飞机去救他,而在日本大学一名中国留学生在宿舍里死了7天才被发现;名古屋大学的一对中国博士夫妇和孩子误食有毒磨菇,孩子和母亲死了,父亲则是重肝炎,在名古屋大学医学院的门诊室等了12个小时,也没有一个日本教授来看望!而你们为什么还要这么友好,以为自己很大度,实际上是被人家耻笑,笑你的无知!你们这个民族贱!我们不能这样!我们的领导人跑到国外去访问,看到有几个人在欢迎他们,就感到挺有面子;而外国来了个什么人物,都是警车开道,这究竟是怎么回事?这让我们中国人感到是自豪还是悲哀?所有这些,对教育工作来讲,都是深层次的问题。所以我经常讲,我作为一位自然科学工作者,我教育我的学生,首先是学会做人,没有这些,你学了高分子,外语都是花架子,你不是一个完整的人。
 

   怎样建立一个科技体系?在国外,这个部分不是大学办的,我坚信,目前"教授+商人" 的这种状态,过20年后会改变。在国外,没有哪个教授是既当公司经理又当教授的,这种现象极少,只有中国有!这就算是国情吧。一个人的精力是有限的,既要办公司,又要当教授,能当好吗?我不否认有这类特殊人才,很少见。关键是把大学教授神化了,让他们全部面向产业界,缺少了中间地带,这是中国目前最大的一个缺陷。省里的研究院,部里的研究院一事无成,为什么?他们是官僚,是企业出钱养的官僚!我认为今后企业改革的方向应该是把他们直接作为企业法人结合在一起。日本叁菱公司的研究院,富士研究所在日本是具备最好条件的研究院,他们不发表文章,就是专门做能与产业结合的项目。这是一句口号:"吃着、端着、看着","吃着的"--企业正在干的;"端着的"--产业开发做的;"看着的"--前瞻性的东西、超前的学术研究让大学去做,这就是一个良性循环。但是,要做好这件事,我认为财团和经营界的介入也是非常重要的。同时也要建立一种体系,让这些信息能够互通与共享。
 

   浙江的企业家现在在做什么?上次省委领导谈话时,我提了个口号:现在是"千载难逢" 。我们浙江有一个优势──有钱,如果浙江的老板们有一点前瞻性的话,你们应该考虑到科技的投资和投入,就是为你们的子孙后代也要做这个事。表面上看你把好不容易赚的钱投了一点,但也许在5年、10年后你就会看到实效,这就是怎样确立一种"高瞻远瞩"的观念。 一个观念或是一个问题:是不是技术越新越好?今天谈的就都是提醒大家的。大家注意:大学教授可以玩这个,但企业家就不能玩这个。技术并不是越新越好,技术要有储备。日本的企业现在卖的东西大都是10年或15年前的技术,好东西他不拿出来,他要等到现有的技术把成本收回并获得尽可能高额的利润以后才会拿出来。其次,我的对手什么时候推出新东西时,我才会出手。不要以为你今天好不容易搞了生产线,明天又有新的了,你的钱还没赚到就换新的,有什么用?我这次到日本刚好谈到悬浮列车──即使何先生在我也要说,这是中国人又在玩高新科技。悬浮列车目前在理论上都还不成熟。日本现在最完善,最经济的就是新干线。从经济和市场的概念来讲,越先进的东西,风险越大,有可能得到的回报就越少。日本的住宅还没有声控电灯,而我们已经有了──我们已经走得够快了,大宇汽车公司的倒闭给我们中国留下最重要的警示是:大宇丢掉了特色。我们的老板不要包里有了钱就想膨胀,这是极其危险的!这实际上是投机心理在头脑里作怪。你们就不自信:害怕哪一天吃不上饭,先找个尾巴、抓根救命稻草。这个心理要解决,为什么不自信?你现在的东西是否在全国属于数得上的特色?这是非常重要的,现在的模仿秀很多,但全是没有生命的。如同唱歌能闭得上眼睛听出这是谁的歌声,这就是特色了。这一点我提醒在座的各位企业家,一定不能丢了自己的特色去学别人,如化工的上水管道PPR,浙江省待批的就有33项!嘉兴的老板找我说:给20万,你帮我上马。我想这还得了,排队的就已经有这么多了。这些都不对,一定要有"特色 "这样一个深刻观念。
 

   我讲这些是给大家一些建议。我刚才讲的是机遇,就是我们浙江省在有了一定的经济储备后,能不能在教育、科技上掀起一个投资。我只告诉大家:人活在世上,钱固然重要,但钱不是最重要的。高分子学科在全国的13个院士中有7 个是从我们浙江大学高分子学毕业的。这次我通过省委宣传部同意,准备在浙江大学建立第一座高分子的科技大楼。校长批给我800万,让我去捐300万,我立刻就从海外的华侨、华人那儿到了。

  这次我不是钱,而是想在世纪来临之际立个丰碑,这也是通过省委宣传部同意的。这一次他们说我把浙大的牌子给卖了,且卖得太便宜了:一个人捐1000元钱就可以刻上名字,刻个墓碑都不值这点钱,北京大学100年校庆时,在一把椅子后面刻个名字还收5000元钱。这次新大楼修好后要刻个碑或在墙上刻名牌,个人收1000元,单位收5000元。对此,潘校长就很赞成,这体现了社会各界对浙江大学,对全国教育的一种支持。这件事现在搞得很热烈,杭州有好几个企业都是20 万、20万的。我们不需要这么多钱,我们只需要体现浙江的企业家对浙江人才培养的一种真正的观念上的变化。现在出现这种情况:有的人把自己的儿子、孙子的名字刻上了,他这么做自有理:"你的名字已经留在浙江大学了,你要努力学习。"我也赞成这样做。今天,我就借此机会把这件事向各位通报一下。

我今天讲的,一个是高分子的介绍,另外是把我对科技、教育、社会等方面的一些思考奉献给大家。

   主要是跟大学一起交流,有不对的地方,希望在座的各位老同志、各位企业家、各位领导对我批评指正。希望大家加强联系,谢谢大家!

posted @ 2006-03-21 16:27 高山流水 阅读(175) | 评论 (0)编辑 收藏

     摘要: 串行通信接口标准经过使用和发展 , 目前已经有几种。但都是在 ...  阅读全文

posted @ 2006-03-21 16:23 高山流水 阅读(774) | 评论 (4)编辑 收藏

 面向对象的语言诸如JAVA提供了Interface来实现接口,但C++却没有这样一个东西,尽管C++通过纯虚基类实现接口,譬如COM的C++实现就是通过纯虚基类实现的(当然MFC的COM实现用了嵌套类),但我们更愿意看到一个诸如Interface的东西。下面就介绍一种解决办法。

首先我们需要一些宏:
//
// Interfaces.h
//

#define Interface class

#define DeclareInterface(name) Interface name { \
          
public: \
          
virtual ~name() {}

#define DeclareBasedInterface(name, base) class name :
        
public base { \
           
public: \
           
virtual ~name() {}

#define EndInterface };

#define implements public


 有了这些宏,我们就可以这样定义我们的接口了:
//
// IBar.h
//

DeclareInterface(IBar)
   
virtual int GetBarData() const = 0;
   
virtual void SetBarData(int nData) = 0;
EndInterface
是不是很像MFC消息映射那些宏啊,熟悉MFC的朋友一定不陌生。

现在我们可以像下面这样来实现我们的接口了:
//
// Foo.h
//

#include 
"BasicFoo.h"
#include 
"IBar.h"

class Foo : public BasicFoo, implements IBar
{
// Construction & Destruction
public:
   Foo(
int x) : BasicFoo(x)
   {
   }

   
~Foo();

// IBar implementation
public:
   
virtual int GetBarData() const
   {
      
// add your code here
   }

   
virtual void SetBarData(int nData)
   {
      
// add your code here
   }
};

怎么样,很简单吧,并不需要做很多的努力我们就可以在C++中使用接口了。然而,由于这并不是语言本身所直接支持的特性,所以我们需要遵循一些规则:
         a)   声明一个类的时候,如果你的类除了要从接口类继承外还要从另一个类继承(结构上的继承,即is a关系),则把这个类作为第一个基类,就像我们平时做的一样,譬如CFrameWnd从CWnd继承,CBitmapButton从CButton继承,CMyDialog从CDialong继承。当你要从MFC类派生的时候,这尤其重要,把他们声明为第一个基类以避免破坏MFC的RuntimeClass机制。
         b)   其他的基类紧跟其后,有多少就跟多少,如果你需要的话。譬如:class Foo : public BasicFoo, implements IBar, implements IOther, implements IWhatever, ...
         c)   接口类里面不要声明任何成员变量。接口类仅用于描述行为而不是数据。当你要作多重继承时,这样做可以避免数据成员被从同一个接口类多次继承。
         d)   接口类的所有成员函数定义为纯虚函数。这可以确保你的实现类来实现这些函数的全部,当然你也可以在抽象类实现部分函数,只要在你的派生类里实现剩下的函数。
         e)   不要从除了接口类的其他任何类派生你的接口类。DeclareBasedInterface()可以做到这个.普通类可以选择实现基接口还是派生的接口,后面一种意味着两者都要实现。
   f) 将一个指向实现接口的类的指针赋值给一个指向该接口类的指针是不需要强制类型转换的,但反过来将一个接口类的指针赋值给一个实现该接口的类的指针就需要一个显式的强制类型转换。事实上我们可能会使用多重继承,这样这些转换我们就不能使用老式的转换。不过使用运行时类型信息(使用/GR选项)和动态类型转换可以很好的工作当然也更安全。
   g) 此外dynamic_cast为你提供了一种查询一个对象或接口是否实现了一个指定的接口的途径。
   h) 你还要非常小心的避免不同接口函数的命名冲突。

如果你仔细观察DeclareInterface 和 DeclareBasedInterfaca宏你会发现有一个操作是必须的:每个接口类都有一个虚析构函数。你可能认为这不重要,但是如果没有这个就可能会导致一些问题,看看下面的例子:

DeclareInterface(IBar)
   
virtual  LPCTSTR GetName()  const   =   0 ;
   
virtual   void  SetName(LPCTSTR name)  =   0 ;
EndInterface

class  Foo : implements IBar
{
//  Internal data
private :
   
char *  m_pName;

//  Construction & Destruction
public :
   Foo()
   {
      m_pName 
=  NULL;
   }

   
~ Foo()
   {
      ReleaseName();
   }

//  Helpers
protected :
   
void  ReleaseName()
   {

      
if  (m_pName  !=  NULL)
         free(m_pName);
   }

//  IBar implementation
public :
   
virtual   const   char *  GetName()  const
   {
      
return  m_pName
   }

   
virtual   void  SetName( const   char *  name)
   {
      ReleaseName();
      m_pName 
=  _strdup(name);
   }
};

class  BarFactory
{
public :
   
enum  BarType {Faa, Fee, Fii, Foo, Fuu};

   
static  IBar CreateNewBar(BarType barType)
   {
      
switch  (barType)
      {
         
default :
         
case  Faa:
            
return   new  Faa;
         
case  Fee:
            
return   new  Fee;
         
case  Fii:
            
return   new  Fii;
         
case  Foo:
            
return   new  Foo;
         
case  Fuu:
            
return   new  Fuu;
      }
   }
};

就像你看到的一样,这里有一个类工厂,它根据BarType来创建一个IBar的实现,当你使用完以后你当然希望要delete该对象,你会像下面这样做:
int  main()
{
   IBar
*  pBar  =  BarFactory::CreateBar(Foo);

   pBar
-> SetName( " MyFooBar " );
   
//  Use pBar as much as you want,
   
//  

   
//  and then just delete it when it's no longer needed
   delete pBar;     //  Oops!
}

delete pBar 做了什么取决于该对象是否有一个虚析构函数。如果Foo没有一个虚析构函数,则只有IBar 的隐式的空析构函数被调用,Foo的析构函数不会被调用,这样就发生了内存泄露。接口类里虚析构函数的声明避免了这用状况,它确保每个实现接口的类都有一个虚析构函数。

当你使用DeclareInterfac的时候,记得使用EndInterface和它匹配。Interface 宏和 implements宏仅仅是代替了class和public,这看起来是多余的,但我认为它们更明确的表达了代码的意图。如果我这么写:class Foo : public IBar,你可能认为这只是一个简单的继承;但如果我这么写:class Foo: implements IBar,你就会看到它实际的价值和意图---这是对一个接口的实现,而不是简单的一次继承。

posted on 2005-09-24 19:36 christanxw 阅读(504) 评论(2)  编辑 收藏收藏至365Key 所属分类: C++/STL

评论

# re: 在C++中使用接口  回复  

部分有用,但是好像和JAVA的接口类型还是有差异吧,我对Java不熟,最近看jhotdraw发现好像java的interface关键字表明为接口,但是implement接口不一定真要实现接口里的每个方法。例如:
public interface Locator extends Storable, Serializable, Cloneable {
public Point locate(Figure owner);
}
public abstract class AbstractLocator
implements Locator, Storable, Cloneable {

protected AbstractLocator() {
}

public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new InternalError();
}
}

public void write(StorableOutput dw) {
}

public void read(StorableInput dr) throws IOException {
}
}
注意,接口里的locate在继承类里并没有实现;
因此,我觉得要用c++实现类似java的interface,interface里的函数应该是有默认实现体的虚函数,而将析构函数做为纯虚函数,如:
class Locator
{
public:
virtual ~Locator()=0;
virtual wxPoint locate(Figure* owner) {};
};
2005-11-30 22:08 | 快乐浪子

# re: 在C++中使用接口  回复  

采用这种方法在C++中使用接口很有新意。楼上所说的在java中“implement接口不一定真要实现接口里的每个方法”,是不完全正确的。在Java中Abstract class可以不用实现接口里的所有方法,但除此之外的java class,如果要implement 接口,必须实现接口中定义的每个方法,除非它的父类中已经实现了这些方法。

posted @ 2006-03-21 16:18 高山流水 阅读(650) | 评论 (0)编辑 收藏

     摘要: 作者: 寒潭惊鹤影   提交日期: 2005-6-11 07:59:00 ...  阅读全文

posted @ 2006-03-21 16:16 高山流水 阅读(1228) | 评论 (1)编辑 收藏

 

上周,我花了很多心思使用模板写了一个UTF-8与UNICODE相互转换的功能(见文件 code.rar ),刚开始感觉还可以,但这几天慢慢的觉得,为什么不直接提供两个函数呢,这样不是简单方便吗?我这样的设计又能带来额外的什么好处呢?刚开始我是想提供比较方便好用以及容易扩展与维护的代码,但现在感觉到与直接提供C式的函数并没有多少额外的好处.或许这样的简单功能根本就用不着这样复杂的代码吧.正如Eric Raymond对C++的评价一样,它"使程序员倾向于写复杂的代码".
我想大家看看我的代码,给我一点意见和建议.

posted on 2005-09-29 20:34 可冰 阅读(541) 评论(8)  编辑 收藏收藏至365Key 所属分类: C++UTF-8

Feedback

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-29 21:27 cpunion

下载不了。

前几天看你写了个模板方式的,感觉是不必要,模板一般用在批量产生代码、加强类型检查、提高效率、普通代码不好解决问题的时候。  回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-29 23:05 可冰

谢谢提醒.我已经将文件转放在博客园上,现在可以下载了.  回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-29 23:18 cpunion

直接使用2个函数,unicodeToUtf8, utf8ToUnicode更简单。

从你的模板参数可以得知,2个int值的模板参数将推导出2个类型,最终还是被映射到2个不同的算法上了,不如简单地做:

string convert (const wstring& src);

wstring convert (const string& src);  回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-29 23:30 可冰

嗯,确实是.
你说的是对的,模板不能滥用,"模板一般用在批量产生代码、加强类型检查、提高效率、普通代码不好解决问题的时候".以后我会记住的.
其实,我确实可能是有一点追求复杂代码的倾向,写代码时考虑代码最多,而不是具体的运用.在这一点上我是走错路了.
以后一定要改!  回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-30 09:02 ilovevc

恕我直言, 你这个程序写得并不好, 一看就是看设计模式走火入魔的一种.
1. singleton根本就不需要, 而且在没有GC的C++中还带来了释放的问题. 你就提供几个static 成员函数就可以了.
2. 过多的类层次,什么ConcreteConvert, 虚函数根本没有必要, 实际上最后就是两个类, 每个类有一个static member function进行转换就可以了.
3. 使用模板可以, 但是你这个模板没有太多意思. 可以考虑使用iterator的concept, 例如 convert(In src_first, In src_last, Out out_first), 这样可以很灵活, 例如使用一个string的back_inserter作为Out参数就可以自动分配内存.
4. 界面不直观. 看你的cpp文件就知道. 我认为的界面可能有一下形式:
uncode_convert<utf-8, unicode>(......);
unicode_convert<unicode, utf-8>(....);

总之, 本质原因我认为并不是你过于**追究**复杂代码, 而是你解决问题的时候使用了复杂的方式.   回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-30 13:13 可冰

谢谢你的批评.我也正是认识到这个问题后来向大家寻求帮助的.
另外你给我建议很不错的,可以考虑那样的实现.  回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2006-02-15 03:33 Edward

请教:
I build a function:

wstring mbstowcs(const string &str) {
size_t len=mbstowcs(NULL, str.c_str(), str.length());
wchar_t *pwc = (wchar_t *)malloc( len* sizeof( wchar_t ));
len=mbstowcs(pwc, str.c_str(), str.length());
return wstring(pwc,len);
}

"str" is a chinese string. but after convertion, "pwc" is a string that I couldn't read. 乱码。Why? 我的计算机是英文windwos,但可以输入和显示汉字。

posted @ 2006-03-21 16:09 高山流水 阅读(662) | 评论 (0)编辑 收藏

仅列出标题
共30页: First 16 17 18 19 20 21 22 23 24 Last