- 浏览: 2020419 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (795)
- java (263)
- 聚类搜索引擎 (9)
- 经验之谈 (67)
- DSP (3)
- C++ (140)
- Linux (37)
- SNMP (6)
- Python (6)
- 数据库 (61)
- 网络 (20)
- 算法 (15)
- 设计模式 (4)
- 笔试题 (38)
- 散文 (35)
- 数据结构 (9)
- 银行知识 (0)
- 榜样 (9)
- Lucene (15)
- Heritrix (6)
- MetaSeeker (0)
- netbeans (12)
- php (3)
- 英语 (8)
- DB2 (0)
- java基础 (5)
- mongodb & hadoop (4)
- Javascript (7)
- Spring (4)
- ibatis & myibatis (1)
- velocity (1)
- 微服务 (0)
- paddle (1)
- 第三方 (0)
- 知识沉淀 (1)
- 建模 (0)
最新评论
-
0372:
标示对java很陌生!
中文乱码解决的4种方式 -
梦留心痕:
Java中\是转意字符, 可是你的这句话我没看懂,只要把得到的 ...
java中如何忽略字符串中的转义字符--转载 -
yanjianpengit:
[b][/b]
java为什么非静态内部类里面不能有静态成员 -
springdata-jpa:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
eclipse 如何把java项目转成web项目 -
qq1130127172:
,非常好。
(转)SpringMVC 基于注解的Controller @RequestMapping @RequestParam..
一、C++之父一夕谈
在1998年的元旦,Bjarne Stroustrup(C++之父)接受了IEEE《计算机》杂志记者的专访。编辑很自然的认为他会对于过去七年来使用他创建的语言进行面对对象设计做一个历史性的回顾。而在这个专访中,记者获得了更有价值的新闻,但是最后编辑决定为了整个IT产业,这个稿子不能发表,但是就像其它被砍掉的新闻,往往还是弄得路人皆知的。
这一篇适当时专访的完全拷贝,没有被编辑、删改或者做过什么润色处理,也没有发布过,可能看起来不像常见的杂志文章,但这是实情。
你会发现真正引人入胜的地方... ...
记者:您在几年前你改变了软件设计世界的面貌,现在再回首往事您有什么感想?
Stroustrup:事实上我在你到来之前的这些天里一直在考虑这件事,你还记得几乎所有的人都在写C程序那会儿吗?麻烦的是这些人写得太好了,而且那些个大学也都在努力的传授C编程技术。的确他们是十分的成功——我要特别的指出“成功”这个词——因为这种显著的C程序员的培养效率,这就是产生问题的原因。
记者:这难道是个问题吗?
Stroustrup:当然,你记得大家都在用Cobol语言写程序的时候吗?
记者:哦,当然,当时我也一样。
Stroustrup:在一开始的时候,这些人简直象半个上帝似的拿着高工资,享受着贵族一样的待遇。
记者:唉,那些日子多么的让人怀念,是吧?
Stroustrup:当然了。但是接着发生了什么?IBM觉得这样不舒服,就投资了数百万来培养程序员,直到程序员多得一毛钱就可以雇一打。
记者:这就是为什么当时我撤出来了,工资在一年里就降到人们在说做个记者都比程序员强的地步。
Stroustrup:对啦!那时侯相同的事情发生在了C程序员身上了。
记者:这个我明白了,可是您要说的是……
Stroustrup:有一天,我坐在办公室里就在想如何能把这件事挽回一些。我想知道如果有一种特别复杂而且难以学会的语言,是否就没有人可以又把程序员们搞到市场的泥潭里去呢?我用了从X10里了解到的东西,,噢,就是X-Windows,真是一个该死的图形系统,只能运行在那些个SUN 3/60的机器里,哈!它具有所有我想要的特征:可笑而复杂的语法,含混的功能描述,还有伪装的OO结构,就算是在现在,还是没有人愿意用那些东西,如果你不想发疯的话,Motif才是唯一解决方案。
记者:你是在开玩笑吗?
Stroustrup:没有,事实上还有另外的一个问题,UNIX是用C写的,就是说任何一个C程序员都可以很容易的成为系统程序的开发者。还记得一个大型的主机系统应用的开发者通常能挣多少钱吗?
记者:你肯定是知道我当时就是干这个的。
Stroustrup:好吧,因此这个新的语言一定要通过隐藏所有的系统调用来和UNIX分离开来,这样可以使那些个就只是知道DOS的人也可以活得很体面。
记者:我不大相信您说的这个……
Stroustrup:而且到现在时间也够长的了,我相信有很多的人已经指出了C++是对时间的浪费,我要说的是,这个过程比我想象的要长的多了。
记者:那么您又是如何做到的呢?
Stroustrup:那只是一个玩笑,我真的没有想到人们会对那本书那么认真。任何人只要长了半个大脑也应该明白面对对象编程是荒谬而不合逻辑的,而且效率低下。
记者:什么?
Stroustrup:再说代码重用,你什么时候听说过有公司重用他的代码?
记者:事实上从来没有,但是……
Stroustrup:那么我提醒你一下,在早期有很多的例子。哦,有一家叫Menter Graphics的俄勒冈州公司,我认为他们应该是感冒了,竟然在90年或者是91年把所有的代码用C++重写了一遍,对不起,我实在是想不起确切的时间了,我看大家应该从这个事件中吸取教训。
记者:没有人真正的吸取了教训吗?
Stroustrup:
没有,而且还有很多公司犯同样的错误,还向他们的股东解释说那3亿美圆的损失是正常的,他们就是做了这样的事情。
记者:真的?可是这也只能证明OO方法是能够工作的,不是吗?
Stroustrup:也许吧,执行文件是那么大,在一台有128M内存的HP工作站上只是装载到内存中就要用5分钟时间,然后将象毛毛虫爬树一样的运行。事实上我在第一个礼拜就发现了这个缺点,奇怪的是好象没人在乎这个,Sun和HP好象只在乎买出那些功能强大的各种玩意儿,而不在乎在上面跑什么程序。在AT&.T的时候我编了一个“Hello World”程序,简直是难以置信,执行文件有2.1M。
记者:那么大?是啊,就是从那时候开始的编译程序产生大个的文件的。
Stroustrup:就是这个样子,如果你不信的话,可以用最新版的g++试一下,你得到的东西不会小于0.5M,而且就在最近也有一些在各个国家的例子,比如在British Telecom公司发生的灾难,但是幸运的是他们把原来的计划废弃了,又重新开始,他们就比Australian Telecom公司幸运,现在我又听说Siemens公司又在造“恐龙”了,他们目前是越来越担心要用来加速执行软件所要使用的昂贵的高速硬件,难道你真的认为那些个多态继承是一种乐趣吗?
记者:噢,但是C++的确是一种可靠的语言啊!
Stroustrup:你是真的相信的,对吧?你有没有真的坐下来用C++开发过项目?我来告诉你会发生什么:首先,我会加入足够的缺陷来让那些微不足道的模块先执行,让工作超载,在工程扫尾的阶段,你回发现几乎所有的模块都会有这种缺陷,这是因为人们以为就是应该这样做,因为在C++的教程中就是这样写的。在相同的模块中执行不同对象的相似操作意味着:有一些东西在各个模块中是完全不相同的。当你有了互不相同的上百个这样的模块,就可以把他们集成在一起了。其次,我再说说所谓的数据隐藏,上帝啊,当我听说了有的小组实现了什么对象协同通信,我真的是憋不住想笑!我看,OO方法中的“协同”这个词可以把项目经理的肋条累断。
记者:我不得不说着太可怕了!你还说这是用来提高程序员的工资,这太龌龊了!
Stroustrup:龌龊?不是这样的,任何人都有选择的权利。我是并不想让事情发展成这个样儿的。不管怎么说,我基本上还是成功的。C++现在已经不行了不是?而且程序员现在还是能挣到高工资的——特别是那些还要维护这些该死的“++”东西的那些程序员。你应该明白如果你去维护一个不是由你开发的C++模块是不可能的。
记者:怎么会这样的?
Stroustrup:你糊涂了?还记得typedef吗?
记者:噢,当然。
Stroustrup:知道要在头文件里发现象RoofRaised这样的变量是一个双精度数要用多长的时间吗?想象一下要在一个工程里所有的类定义里寻找那些typedefs ... ... ... ...
记者:那么你为什么认定你已经成功了呢?
Stroustrup:还记得一般一个C程序项目要多长时间吗?一般是6个月。这对于一个要养活妻子孩子的程序员是不够的。如果是一样的项目,但是用C++来开发,会怎么样呢?我告诉你:要一两年才能做完!这不好吗?就是一个小小的编程语言选择的决定,语言程序员就不会轻易的下岗了不是?而且那些个大学已经很久没有传授C了,现在是对C程序员的短缺。特别是对UNIX编程熟悉的程序员。在使用了这么多年的“new”以后,而且一直以来一直都不用担心返回值的问题。还有多少程序员知道使用“malloc”?事实上,大多数的C++程序员舍弃了返回值,无论什么样的结果,甚至于返回了“-1”,其实用不着什么throw、catch、try之类的东西,至少你应该知道产生了错误。
记者:但是继承的确不是可以节省很多时间的吗?
Stroustrup:是吗?你注意过C项目计划和C++的项目计划之间的不同吗?在进行了三次系统功能分解后,要确定所有的东西都可被继承到,如果没有那么说明还是有错,但是有谁在C编程里听说过存储渗漏这个说法?现在你可以在业界的大厂商的产品中发现了!有很多的公司不得不放弃了,并且把工程转包出去,他们知道最后可能象筛沙子似的把内存站用完,他们才不想遭那份罪呢!
记者:也有一些工具来……
Stroustrup:大多数的防渗漏的工具不还是用C++写的。
记者:果把这些东西发表了,我们可能在这个行业里无法立足了,你知道吗?Stroustrup:我不相信,就象我所说的,现在C++已经是在垂死挣扎了。任何公司只要清醒,就会认识到用C++来做项目简直是一场灾难。如果还没认识到这些,那就是活该!有一段时间我使劲的劝Dennis Ritchie用C++重写UNIX。
记者:啊?天哪!他是怎么说的?
Stroustrup:我不得不承认他的洞察力,我想他和Brian在很早的时候就清楚的明白了我的意图,但是从来没有说出来,他说如果我愿意的话,他可以帮我用C++写个DOS。
记者:那么你写了吗?
Stroustrup:事实上,我写了,我完成后可以给你一个DEMO,我在机房里的一台4个CPU的Sparc 20上做的,运行得特别的快,而且只占了70M的硬盘空间。
记者:有For PC的版本吗?
Stroustrup:现在你在开玩笑了,难道你没见过Windows 95吗?我认为它是我成功标志之一,
记者:我也总是在想关于Unix++,还是有人在试着搞这么个东西的。
Stroustrup:那是因为他们还没有看到这个采访手迹。
记者:对不起,不过依我看,我们恐怕不会刊发这些东西的。
Stroustrup:但是这是个世纪故事,我只是想让我的程序员伙伴们记住我为他们做了什么,你知道这些个日子里C++程序员可以挣多少钱吗?
记者:我所听说的是一个顶尖的C++程序员一小时可以挣到70~80美圆。Stroustrup:知道了吧!而且我打赌他肯定可以挣那么多!!单步跟踪我放在C++里面的那些gotcha,并不是容易的事了。在在项目中使用C++的所有特性即使是有经验的程序员也会感到困惑.事实上有时侯我也是觉得挺难受的,虽然这个特性是为我的初衷而做的,我几乎喜欢上了这个语言。记者:你的意思是说你以前是不喜欢的?
Stroustrup:我是狠它的!难道你不同意它是挺笨重的吗?但是当那本书的版税源源不断的……我想你能够明白这些。
记者:等一下,关于参数的定义,请您一定要回答,您是否真的改良了C的指针。Stroustrup:呵,我也是总是想知道这个。一开始我认为我做了,但是有一天我和一个刚开始学习C++的程序员讨论了这个问题。他说:“他从来就不知道他的变量是否被引用了,所以我还是在使用指针,那个星号总是在提醒我。”记者: OK,一般在这个时候我一般是说:“Thank you very much.”,但是现在用在这里好象还是不够。
Stroustrup:答应我一定要发表。
记者:好的,我会通知您的,但是我已经知道了我的编辑会说什么了。
Stroustrup:谁会相信呢?你能把这盘录音带给我拷一个吗?
记者:可以。
二、UNIX、C的创建者的忏悔
在前不久举行的一次关于计算机产业的发布会上,Ken Thompson,Dennis Ritchie和Brian Kernighan承认了由他们创建的UNIX操作系统和C语言是来源于20年前的一个精心炮制的愚人节游戏!Thompson是在不久以前在UNIXWorld软件开发论坛上说的这番话:
在1969年,AT&T刚刚完成一个和GE还有Honeywell公司合作的项目——Multics,那时候我和Brian也刚刚接触一个由瑞士ETH实验室的Nicklaus教授创建的PASCAL语言的一个早期版本,我们当时就对它的简洁朴素和强大留下了深刻的印象。Denis正好读完了《Bored of the Rings》这本书,它实际上是《Lord of the Rings》三部曲的一个拙劣的模仿,只不过是为了玩,我们决定对Multics和PASCAL也进行一番模仿。我和Dennis负责操作环境,模仿Multics来重新设计一个新系统,设计的宗旨是尽可能的使系统显得神秘而复杂,让使用者不断地感到受挫,又重新起了一个名,叫作UNIX。然后Dennis和Brian对一个叫作‘A语言’的东西开展了一番工作,它实际上是对PASCAL语言的一个扭曲。当我们发现竟然有人尝试用A语言开发真正的程序,我们马上在A语言中又增加了一些更加含义模糊的东西,并把它升级为B语言,之后是BCPL,直到最后的C语言。在我们得到了以下的语法表达之后我们停止了:
for(;P("n"),R=;P("|"))for(e=C;e=;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
现代的程序员们竟然会试着使用允许这样的声明的语言,这简直超乎我们的想象。我们当时真的是想把这些东西卖给苏联,好让他们的计算机科学水平倒退20年。你想像一下在AT&T和其它的美国公司开始试着使用UNIX和C时我们的惊异。这使他们用了20年,只不过用在了使用建立在60年代的一个拙劣的技术模仿的基础上的专门技术和一些应用。但是我们对UNIX和C程序员坚韧不拔的精神也留下了深刻的印象,我和Brian还有Dennis则在这么多年里一直在Apple机上使用PASCAL语言,我们对这种混乱的结果感到了深深的负罪感,混乱和那些滥程序就是起源于在当时我们愚蠢的恶作剧!
一些主要的UNIX和C的厂商和用户,包括AT&T、Microsoft、Hewlett-Packard、GTE、NCR和DEC等等这一次拒绝对此发表见解,有一家PACAL和C语言开发工具的业界领先厂商(产品包括流行的Turbo Pascal,Turbo C和Turbo C++等)声明说他们实际上已经在多年以前就有一些察觉,今后并将继续增强他们的PASCAL产品,并立刻暂停他们在C产品上的远期投入;一个IBM公司的发言人则对这件事大笑不止,以至于不得不推迟了一个关乎RS-6000的命运的新闻发布会;而ETH学院的教授,PASCAL,Modula 2和Oberon结构语言的创建者Wirth教授只是说P. T. Barnum是正确的。
和这个事件相关的大抵可信的资料来源说明,不久将有一个相似的招供可能来自于William Gates,是关于MS-DOS和Windows操作环境,还有就是IBM的发言人开始否认虚拟机(VM)也是一个恶作剧式的拙劣的玩意儿。
在1998年的元旦,Bjarne Stroustrup(C++之父)接受了IEEE《计算机》杂志记者的专访。编辑很自然的认为他会对于过去七年来使用他创建的语言进行面对对象设计做一个历史性的回顾。而在这个专访中,记者获得了更有价值的新闻,但是最后编辑决定为了整个IT产业,这个稿子不能发表,但是就像其它被砍掉的新闻,往往还是弄得路人皆知的。
这一篇适当时专访的完全拷贝,没有被编辑、删改或者做过什么润色处理,也没有发布过,可能看起来不像常见的杂志文章,但这是实情。
你会发现真正引人入胜的地方... ...
记者:您在几年前你改变了软件设计世界的面貌,现在再回首往事您有什么感想?
Stroustrup:事实上我在你到来之前的这些天里一直在考虑这件事,你还记得几乎所有的人都在写C程序那会儿吗?麻烦的是这些人写得太好了,而且那些个大学也都在努力的传授C编程技术。的确他们是十分的成功——我要特别的指出“成功”这个词——因为这种显著的C程序员的培养效率,这就是产生问题的原因。
记者:这难道是个问题吗?
Stroustrup:当然,你记得大家都在用Cobol语言写程序的时候吗?
记者:哦,当然,当时我也一样。
Stroustrup:在一开始的时候,这些人简直象半个上帝似的拿着高工资,享受着贵族一样的待遇。
记者:唉,那些日子多么的让人怀念,是吧?
Stroustrup:当然了。但是接着发生了什么?IBM觉得这样不舒服,就投资了数百万来培养程序员,直到程序员多得一毛钱就可以雇一打。
记者:这就是为什么当时我撤出来了,工资在一年里就降到人们在说做个记者都比程序员强的地步。
Stroustrup:对啦!那时侯相同的事情发生在了C程序员身上了。
记者:这个我明白了,可是您要说的是……
Stroustrup:有一天,我坐在办公室里就在想如何能把这件事挽回一些。我想知道如果有一种特别复杂而且难以学会的语言,是否就没有人可以又把程序员们搞到市场的泥潭里去呢?我用了从X10里了解到的东西,,噢,就是X-Windows,真是一个该死的图形系统,只能运行在那些个SUN 3/60的机器里,哈!它具有所有我想要的特征:可笑而复杂的语法,含混的功能描述,还有伪装的OO结构,就算是在现在,还是没有人愿意用那些东西,如果你不想发疯的话,Motif才是唯一解决方案。
记者:你是在开玩笑吗?
Stroustrup:没有,事实上还有另外的一个问题,UNIX是用C写的,就是说任何一个C程序员都可以很容易的成为系统程序的开发者。还记得一个大型的主机系统应用的开发者通常能挣多少钱吗?
记者:你肯定是知道我当时就是干这个的。
Stroustrup:好吧,因此这个新的语言一定要通过隐藏所有的系统调用来和UNIX分离开来,这样可以使那些个就只是知道DOS的人也可以活得很体面。
记者:我不大相信您说的这个……
Stroustrup:而且到现在时间也够长的了,我相信有很多的人已经指出了C++是对时间的浪费,我要说的是,这个过程比我想象的要长的多了。
记者:那么您又是如何做到的呢?
Stroustrup:那只是一个玩笑,我真的没有想到人们会对那本书那么认真。任何人只要长了半个大脑也应该明白面对对象编程是荒谬而不合逻辑的,而且效率低下。
记者:什么?
Stroustrup:再说代码重用,你什么时候听说过有公司重用他的代码?
记者:事实上从来没有,但是……
Stroustrup:那么我提醒你一下,在早期有很多的例子。哦,有一家叫Menter Graphics的俄勒冈州公司,我认为他们应该是感冒了,竟然在90年或者是91年把所有的代码用C++重写了一遍,对不起,我实在是想不起确切的时间了,我看大家应该从这个事件中吸取教训。
记者:没有人真正的吸取了教训吗?
Stroustrup:
没有,而且还有很多公司犯同样的错误,还向他们的股东解释说那3亿美圆的损失是正常的,他们就是做了这样的事情。
记者:真的?可是这也只能证明OO方法是能够工作的,不是吗?
Stroustrup:也许吧,执行文件是那么大,在一台有128M内存的HP工作站上只是装载到内存中就要用5分钟时间,然后将象毛毛虫爬树一样的运行。事实上我在第一个礼拜就发现了这个缺点,奇怪的是好象没人在乎这个,Sun和HP好象只在乎买出那些功能强大的各种玩意儿,而不在乎在上面跑什么程序。在AT&.T的时候我编了一个“Hello World”程序,简直是难以置信,执行文件有2.1M。
记者:那么大?是啊,就是从那时候开始的编译程序产生大个的文件的。
Stroustrup:就是这个样子,如果你不信的话,可以用最新版的g++试一下,你得到的东西不会小于0.5M,而且就在最近也有一些在各个国家的例子,比如在British Telecom公司发生的灾难,但是幸运的是他们把原来的计划废弃了,又重新开始,他们就比Australian Telecom公司幸运,现在我又听说Siemens公司又在造“恐龙”了,他们目前是越来越担心要用来加速执行软件所要使用的昂贵的高速硬件,难道你真的认为那些个多态继承是一种乐趣吗?
记者:噢,但是C++的确是一种可靠的语言啊!
Stroustrup:你是真的相信的,对吧?你有没有真的坐下来用C++开发过项目?我来告诉你会发生什么:首先,我会加入足够的缺陷来让那些微不足道的模块先执行,让工作超载,在工程扫尾的阶段,你回发现几乎所有的模块都会有这种缺陷,这是因为人们以为就是应该这样做,因为在C++的教程中就是这样写的。在相同的模块中执行不同对象的相似操作意味着:有一些东西在各个模块中是完全不相同的。当你有了互不相同的上百个这样的模块,就可以把他们集成在一起了。其次,我再说说所谓的数据隐藏,上帝啊,当我听说了有的小组实现了什么对象协同通信,我真的是憋不住想笑!我看,OO方法中的“协同”这个词可以把项目经理的肋条累断。
记者:我不得不说着太可怕了!你还说这是用来提高程序员的工资,这太龌龊了!
Stroustrup:龌龊?不是这样的,任何人都有选择的权利。我是并不想让事情发展成这个样儿的。不管怎么说,我基本上还是成功的。C++现在已经不行了不是?而且程序员现在还是能挣到高工资的——特别是那些还要维护这些该死的“++”东西的那些程序员。你应该明白如果你去维护一个不是由你开发的C++模块是不可能的。
记者:怎么会这样的?
Stroustrup:你糊涂了?还记得typedef吗?
记者:噢,当然。
Stroustrup:知道要在头文件里发现象RoofRaised这样的变量是一个双精度数要用多长的时间吗?想象一下要在一个工程里所有的类定义里寻找那些typedefs ... ... ... ...
记者:那么你为什么认定你已经成功了呢?
Stroustrup:还记得一般一个C程序项目要多长时间吗?一般是6个月。这对于一个要养活妻子孩子的程序员是不够的。如果是一样的项目,但是用C++来开发,会怎么样呢?我告诉你:要一两年才能做完!这不好吗?就是一个小小的编程语言选择的决定,语言程序员就不会轻易的下岗了不是?而且那些个大学已经很久没有传授C了,现在是对C程序员的短缺。特别是对UNIX编程熟悉的程序员。在使用了这么多年的“new”以后,而且一直以来一直都不用担心返回值的问题。还有多少程序员知道使用“malloc”?事实上,大多数的C++程序员舍弃了返回值,无论什么样的结果,甚至于返回了“-1”,其实用不着什么throw、catch、try之类的东西,至少你应该知道产生了错误。
记者:但是继承的确不是可以节省很多时间的吗?
Stroustrup:是吗?你注意过C项目计划和C++的项目计划之间的不同吗?在进行了三次系统功能分解后,要确定所有的东西都可被继承到,如果没有那么说明还是有错,但是有谁在C编程里听说过存储渗漏这个说法?现在你可以在业界的大厂商的产品中发现了!有很多的公司不得不放弃了,并且把工程转包出去,他们知道最后可能象筛沙子似的把内存站用完,他们才不想遭那份罪呢!
记者:也有一些工具来……
Stroustrup:大多数的防渗漏的工具不还是用C++写的。
记者:果把这些东西发表了,我们可能在这个行业里无法立足了,你知道吗?Stroustrup:我不相信,就象我所说的,现在C++已经是在垂死挣扎了。任何公司只要清醒,就会认识到用C++来做项目简直是一场灾难。如果还没认识到这些,那就是活该!有一段时间我使劲的劝Dennis Ritchie用C++重写UNIX。
记者:啊?天哪!他是怎么说的?
Stroustrup:我不得不承认他的洞察力,我想他和Brian在很早的时候就清楚的明白了我的意图,但是从来没有说出来,他说如果我愿意的话,他可以帮我用C++写个DOS。
记者:那么你写了吗?
Stroustrup:事实上,我写了,我完成后可以给你一个DEMO,我在机房里的一台4个CPU的Sparc 20上做的,运行得特别的快,而且只占了70M的硬盘空间。
记者:有For PC的版本吗?
Stroustrup:现在你在开玩笑了,难道你没见过Windows 95吗?我认为它是我成功标志之一,
记者:我也总是在想关于Unix++,还是有人在试着搞这么个东西的。
Stroustrup:那是因为他们还没有看到这个采访手迹。
记者:对不起,不过依我看,我们恐怕不会刊发这些东西的。
Stroustrup:但是这是个世纪故事,我只是想让我的程序员伙伴们记住我为他们做了什么,你知道这些个日子里C++程序员可以挣多少钱吗?
记者:我所听说的是一个顶尖的C++程序员一小时可以挣到70~80美圆。Stroustrup:知道了吧!而且我打赌他肯定可以挣那么多!!单步跟踪我放在C++里面的那些gotcha,并不是容易的事了。在在项目中使用C++的所有特性即使是有经验的程序员也会感到困惑.事实上有时侯我也是觉得挺难受的,虽然这个特性是为我的初衷而做的,我几乎喜欢上了这个语言。记者:你的意思是说你以前是不喜欢的?
Stroustrup:我是狠它的!难道你不同意它是挺笨重的吗?但是当那本书的版税源源不断的……我想你能够明白这些。
记者:等一下,关于参数的定义,请您一定要回答,您是否真的改良了C的指针。Stroustrup:呵,我也是总是想知道这个。一开始我认为我做了,但是有一天我和一个刚开始学习C++的程序员讨论了这个问题。他说:“他从来就不知道他的变量是否被引用了,所以我还是在使用指针,那个星号总是在提醒我。”记者: OK,一般在这个时候我一般是说:“Thank you very much.”,但是现在用在这里好象还是不够。
Stroustrup:答应我一定要发表。
记者:好的,我会通知您的,但是我已经知道了我的编辑会说什么了。
Stroustrup:谁会相信呢?你能把这盘录音带给我拷一个吗?
记者:可以。
二、UNIX、C的创建者的忏悔
在前不久举行的一次关于计算机产业的发布会上,Ken Thompson,Dennis Ritchie和Brian Kernighan承认了由他们创建的UNIX操作系统和C语言是来源于20年前的一个精心炮制的愚人节游戏!Thompson是在不久以前在UNIXWorld软件开发论坛上说的这番话:
在1969年,AT&T刚刚完成一个和GE还有Honeywell公司合作的项目——Multics,那时候我和Brian也刚刚接触一个由瑞士ETH实验室的Nicklaus教授创建的PASCAL语言的一个早期版本,我们当时就对它的简洁朴素和强大留下了深刻的印象。Denis正好读完了《Bored of the Rings》这本书,它实际上是《Lord of the Rings》三部曲的一个拙劣的模仿,只不过是为了玩,我们决定对Multics和PASCAL也进行一番模仿。我和Dennis负责操作环境,模仿Multics来重新设计一个新系统,设计的宗旨是尽可能的使系统显得神秘而复杂,让使用者不断地感到受挫,又重新起了一个名,叫作UNIX。然后Dennis和Brian对一个叫作‘A语言’的东西开展了一番工作,它实际上是对PASCAL语言的一个扭曲。当我们发现竟然有人尝试用A语言开发真正的程序,我们马上在A语言中又增加了一些更加含义模糊的东西,并把它升级为B语言,之后是BCPL,直到最后的C语言。在我们得到了以下的语法表达之后我们停止了:
for(;P("n"),R=;P("|"))for(e=C;e=;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
现代的程序员们竟然会试着使用允许这样的声明的语言,这简直超乎我们的想象。我们当时真的是想把这些东西卖给苏联,好让他们的计算机科学水平倒退20年。你想像一下在AT&T和其它的美国公司开始试着使用UNIX和C时我们的惊异。这使他们用了20年,只不过用在了使用建立在60年代的一个拙劣的技术模仿的基础上的专门技术和一些应用。但是我们对UNIX和C程序员坚韧不拔的精神也留下了深刻的印象,我和Brian还有Dennis则在这么多年里一直在Apple机上使用PASCAL语言,我们对这种混乱的结果感到了深深的负罪感,混乱和那些滥程序就是起源于在当时我们愚蠢的恶作剧!
一些主要的UNIX和C的厂商和用户,包括AT&T、Microsoft、Hewlett-Packard、GTE、NCR和DEC等等这一次拒绝对此发表见解,有一家PACAL和C语言开发工具的业界领先厂商(产品包括流行的Turbo Pascal,Turbo C和Turbo C++等)声明说他们实际上已经在多年以前就有一些察觉,今后并将继续增强他们的PASCAL产品,并立刻暂停他们在C产品上的远期投入;一个IBM公司的发言人则对这件事大笑不止,以至于不得不推迟了一个关乎RS-6000的命运的新闻发布会;而ETH学院的教授,PASCAL,Modula 2和Oberon结构语言的创建者Wirth教授只是说P. T. Barnum是正确的。
和这个事件相关的大抵可信的资料来源说明,不久将有一个相似的招供可能来自于William Gates,是关于MS-DOS和Windows操作环境,还有就是IBM的发言人开始否认虚拟机(VM)也是一个恶作剧式的拙劣的玩意儿。
发表评论
-
DLL中导出函数的声明有两种方式:
2012-11-12 16:42 1819DLL中导出函数的声明有两种方式: 一种方式是:在函数声明中 ... -
k-means算法的C++实现
2011-04-05 11:38 2308k-means算法的C++实现: http://www.ku ... -
main()中的参数
2010-10-31 10:41 1508所有的应用程序都是从以main函数作为入口, 而mai ... -
static作用
2010-10-26 19:15 2353转自(from http://www.cnb ... -
mmap函数
2010-10-25 22:41 1891mmap函数的使用方法 UNIX ... -
C语言中三种内存分配方式
2010-10-25 20:23 01.malloc 原型:extern void *ma ... -
位拷贝和值拷贝
2010-10-23 15:37 1571为了便于说明我们以String类为例: 首先定义String ... -
(转帖)把类的析构函数写成虚函数的用意
2010-10-23 15:10 1671#include <iostream.h> cl ... -
动态规划/贪心算法----0/1背包问题AND普通背包问题
2010-10-23 14:03 6801两个背包问题都是比较典型的问题,对这两种算法的理解有很好的帮助 ... -
netstat, nslookup, finger, ping命令
2010-10-22 17:13 1496Netstat用于显示与IP、TCP ... -
C++返回值
2010-10-22 16:53 1526C++函数返回值: (1)正常情况下,函数的参数要复制一份在 ... -
switch语句后的表达式的值
2010-10-22 16:23 1818一般格式: switch (表达式) { case 常量 ... -
C++四种强制类型转换
2010-10-19 11:45 1541显式类型转换又被称之 ... -
C++四种强制类型转化的区别
2010-10-19 11:43 1330先介绍const_cast和reinterpret_cast: ... -
Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量
2010-10-18 14:24 1806使线程同步 在程序中使用多线程时,一般很少有多个线程能在其 ... -
(转)临界区,互斥量,信号量,事件的区别
2010-10-18 14:22 1746四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行 ... -
(转)在C++中实现同步锁,类似synchronize(object){....}
2010-10-18 13:49 1860在做C++的项目中发现, ... -
C++线程同步
2010-10-18 13:46 1588线程同步是多 ... -
C++多线程编程
2010-10-18 10:56 1729今天我给大家讲一讲C++ ... -
关于C++对函数传参与函数返回值进行引用传递的详解
2010-10-16 22:51 4030关于C++对函数传参与函数返回值进行引用传递的详解 ...
相关推荐
C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++
c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏...
C++ 获取文件夹下的所有文件名 C++ 获取文件夹下的所有文件名 C++ 获取文件夹下的所有文件名 C++ 获取文件夹下的所有文件名
c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器c++ 计算器
C++遍历指定文件夹中的所有文件 遍历方法
《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和...
这是我们老师做的,各种小游戏,我感觉还不错,所以传上来玩玩。是c++做的,有的可以用来交作业和课程设计都行的,而且对于c++游戏初学者的话很有帮助的。
《Accelerated C++》真的蛮经典的,被许多人称为小《C++ Primer》,也是公认的C++最佳。 个人认为,只要想学C++的朋友肯花几个月时间认真去掰以下这组书,我相信你的C++就算入门了: 《Accelerated C++》+《The C++ ...
C++学习是Android客户端目前最... 无论您是在校大学生,还是职业学员,或者其他开发人员,本书都志在全面提高您的C++编程思想和开发实力,使您能够系统的学习C++,写出高质量的C++代码,相信读完本书后能使您获益匪浅。
C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏C++象棋游戏
• C/C++ 编码标准规则指南: 描述包含在 C++test 中的所有编码标准规则。要通过 Eclipse 帮助系 统访问本指南,请选择帮助 (Help)> 帮助内容(Help Contents),然后打开C++test 静态分析 规则(Coding Standard Rules)...
Nurbs 曲线 C++Nurbs 曲线 C++
用C/C++ 列出指定目录的所有文件夹和文件用
C++获取所有局域网可用IP,使用PING的方式简单易懂,但缺点就是时间消耗比较多,给新手看的,大神请无视 vs2010编译
黑马程序员c++配套课件 《轻松搞定c++语言》 黑马程序员c++配套课件 《轻松搞定c++语言》
使用C++遍历文件夹下的所有文件,FindFirstFile和FindNextFile的使用方法。
包括C/C++类库, MFC类库, Windows API ,C++经典对话, 网络编程类库,c++编程思想 等 9个CHM文件
C++ API chm C++ API chm C++ API chm C++ API chm C++ API chm C++ API chm
想要彻底理解C++11和C++14,不可止步于熟悉它们引入的语言特性(例如,auto型别推导、移动语义、lambda表达式以及并发支持)。挑战在于高效地运用这些特性——从而使你的软件具备正确性、高效率、可维护性和可移植性...
C++读取INI文件中指定Section下的所有key和keyvalue存放到map中