为什么只有设计师才能发明流行的新语言
先回顾一下知名编程语言的作者和创造时间:
Fortran 语言,50年代,IBM 研究员;
Lisp 语言,50年代,MIT 的教授和学生;
C语言,70年代,贝尔实验室的两位研究员;
PHP,1994年,作者 Rasmus Lerdorf ,名字代表“Personal Home Page Tools”;
JavaScript,1995年,作者 Brendan Eich;
Python,1990年,作者 Guido van Rossum;
Ruby,1994年,作者 Yukihiro“Matz”Matsumoto。
从这些例子中,你可以发现早期的程序语言是学者和研究人员设计的,而近期的语言发明者多数是程序设计师 或资深程序员。
加州大学欧文分校的计算机科学家 Cristina Videira Lopes 提出疑问,为什么只有设计师才能发明流行的新语言? 她根据自己在学界的经验认为,生活在象牙塔中的研究人员不再创造用户真正能使用的新语言,因为他们将创造语言当作科研,在 90 年代之前,计算机性能有限,创造语言需要克服需要种种挑战,考虑各种硬件限制。如今计算机性能日新月异,创造语言不再是什么重要的事情。她指出,现在流行 的程序语言基本没有什么创新,全都类似既有编程概念的混搭。
C语言之父尼斯·里奇位列“2011年辞世的10位科技先驱”榜眼
除了苹果联合创始人史蒂夫·乔布斯和C语言之父丹尼斯·里奇(Dennis Ritchie)之外,2011年还有许多科技行业的梦想家和技术先驱先后辞世。计算机行业从1950年代开始发展,期间曾有众多卓越的人才为现代化计算、智能电子和互联网的发展奠定了基础。2011年辞世的很多先驱都曾是科技公司的创始人和CEO,并带领他们所在的企业充分利用了新兴技术的优势。
还有一些人则一直在从事光学、数学和密码学等领域的基础研究。他们很多人都彼此相识,并且曾经是家酿计算机俱乐部(Homebrew Computer Club)的成员。
本文的目的就是纪念这些创新者,以及他们为社会变革带来的贡献,包括数字化电脑、手机和互联网。虽然他们的知名度有高有低,但这份榜单上列出的所有名字都做出过无与伦比的贡献,并且激励了数以千计的人继续前进。
苹果创始人乔布斯
在与胰腺癌抗争了8年后,苹果创始人乔布斯于10月5日辞世。这位梦想家带领曾经处于破产边缘的苹果实现了复兴,他改变了普通人对科技的看法。他凭借iMac、iPod、iPhone和iPad改变了计算机行业,并且改变了人们使用数据的方式。
C语言和Unix之父里奇
阿尔卡特朗讯贝尔实验室的前软件研究主管里奇在长期患病后于今年10月8日辞世。这位Unix联合发明人和C语言发明人的成就,为现代大型操作系统和软件编程奠定了基础。他还是教科书《C程序设计语言》(The C Programming Language)的联合作者,这本书被视为C语言领域的权威著作,至今仍然广受赞誉。在里奇去世后一个月,Fedora团队用Fedora 16开源Linux操作系统来纪念他。该团队写道:“丹尼斯是一个谦逊的人,在自己的领域之外并不为人熟知。但他将被我们这些践行者永远铭记。”
DEC联合创始人肯尼斯·奥尔森(Kenneth Olsen)
计算机行业先驱、DEC联合创始人奥尔森于今年2月6日辞世。彼时,他刚刚过完85岁生日。他于1957年与哈兰·安德森(Harlan Aderson)共同创办了DEC,并在1960至1980年代,在计算机从占满整个房间的大型机向迷你电脑时代过渡的时期,占据行业主导。在麻省理工学院任职时,奥森便领导开发了首台用晶体管制作的研究用电脑。在DEC时,奥尔森还推动了矩阵式工程项目管理的普及,这一技术目前被广泛应用于很多行业。
人工智能之父兼LISP语言发明人约翰·麦卡锡(John McCarthy)
人工智能领域的先驱麦卡锡今年10月24日因心脏病并发症辞世。麦克西的研究面很广,包括可以实现多人共用的大型机计算时间分享技术,以及清理电脑内存中垃圾数据的技术。他还发明了LISP语言,这目前已经成为人工智能研究和设计领域的标准工具。
密码学家罗伯特·莫里斯(Robert Morris)
曾经参与Unix操作系统开发的密码学家莫里斯于今年6月26日因痴呆并发症辞世。他为Unix贡献了安全功能,包括密码系统和加密功能。他曾于1986至1994年间担任美国家计算机安全中心和美国国家安全局首席科学家。莫里斯还在1991年的海湾战争爆发前数月,参与了对萨达姆政府的电子攻击,破坏了伊拉克的军事指挥系统。
分组交换技术先驱保罗·巴兰(Paul Baran)
巴兰在1960年代从事了分组数据的研究,并在互联网诞生过程中扮演了重要角色。他于今年3月26日因肺癌并发症辞世。在担任RAND公司工程师时,他发明了交换技术,可以在通过网络传输数据前,将其分解成较小的块。巴兰的工作为美国国防部高等研究计划署创建阿帕网(ARPANET)奠定了基础,而阿帕网则是现代互联网的前身。
全球最早的计算机程序员之一珍·詹宁斯·巴迪克(Jean Jennings Bartik)
Duqu使用OO C语言开发关键组件
本月初,卡巴斯基实验室研究员向编程社区求教:有Stuxnet之子称号的Duqu恶意程序框架使用了一种未知编程语言开发关键的Payload DLL。该组件被恶意程序用于与命令和指令服务器(C&C)通信,可以按指令下载另外的恶意模块。
不到两周后,卡巴斯基实验室表示谜题已经解开;恶意程序作者使用的是C语言的一个面向对象扩展,简称OO C,用微软的Visual Studio Compiler 2008编译,使用了代码大小和内联展开优化选项。
C语言之父Dennis Ritchie访谈:当年错失互联网大机遇
近日,“日本奖”基金会在美国举行了2011年度“日本奖”的颁奖仪式。Unix之父Dennis Ritchie荣获“信息与通讯奖“。IEEE Spectrum资深新闻编辑Samuel K. Moore为此专访了Dennis Ritchie,下面是对本次采访内容的编译。
Unix之父Dennis Ritchie
“日本奖”基金会于今年1月宣布了2011年度“日本奖”获奖名单,Dennis Ritchie和Ken Thompson因在Unix操作系统开发中所作出的贡献,而荣获“信息与通讯奖”;Tadamitsu Kishimoto和Toshio Hirano则因为发现白细胞介素6(interleukin-6)而获得“生物科学与医药科学奖”。
该颁奖仪式往年通常在日本举行,但由于今年日本发生地震和海啸,3月17日,该基金会宣布该颁奖仪式改在美国举行。5月19日,该颁奖仪式在位于新泽西州Murray Hill区的贝尔实验室总部举行。Ritchie和Thompson曾在这个实验室工作并开发了Unix操作系统,现在该实验室是法国通信公司Alcatel-Lucent的一部分。Thompson现任谷歌高级工程师,Ritchie仍在贝尔实验室工作,是“退休研究员中的显要成员”。除了开发了Unix,Ritchie还发明了C编程语言。
IEEE Spectrum资深新闻编辑Samuel K. Moore参加了本次颁奖仪式,并专访了Ritchie。
IEEE Spectrum:你同时发明了Unix和C,你更喜欢哪一个呢?
Dennis Ritchie:很显然,C语言带来了丰厚的利润,由我和Brian Kernighan合著的《The C Programming Language》一书仍在出版和销售。Unix正在不断壮大,同时C语言至今仍在使用。从某种意义上,C语言更多出自我手,它由Ken发明的B语言发展而来,但却经历了很大的进化。虽然我曾和很多人谈过此语言,但C语言所有的变化都归根于我。但对于Unix的进化,很多人都做出了贡献。
IEEE Spectrum:用你的话来说,“C语言既古怪又有缺陷,却取得了巨大成功”,如果你有机会重新设计的话,它将会有什么不同?
Dennis Ritchie:需要改很多小地方,但我不想逐一列出了。其中一些在标准化过程中已经改正。但是原设计中也有很多内在的一致性(注:指不太好改),比如,内部类型系统的运作方式。并不总是那么易用。例如,Null结尾数组也就是字符串,是一个以Null结尾的字符数组。人们常常抱怨这种设计容易使人犯各种各样的错误,要是改成字符串是个计数然后放字符之类的设计就好了。可事实上,语言的内部基本机制决定了字符串就是数组,没有地方放计数,即使很容易犯错。
IEEE Spectrum:Unix不仅延续了下来,还占领了计算机世界。对于Unix的现代化身Linux,你如何看待?
Dennis Ritchie:我认为它很成功。我不再评论它细微的变化。虽然它并没有通过相同的方法获得批准,也没有遵循相同的标准,但我认为从本质来说,Linux是Unix新的实现形式。所以从这个意见上说,它做得很好,并将做得更好,为此我很高兴。
IEEE Spectrum:你的网站上有一篇1976年写的很难懂的备忘录:“提议对Unix进行可移植性实验”。它代表了把Unix当作一个更普遍的计算机平台的新思考方式,或许甚至考虑把它当作操作系统,对你来说,它的意义很重要吧?
Dennis Ritchie:当时我们正在移值Unix,我不得不很艰辛地寻找其他任何系统在移值中的参考资料。我发现了一些,但他们却没起到任何作用。所以我和Steve Johnson在实现Unix的移植性上做出了特殊的贡献。Ken对内核做了大量的修改,从而使实现移植性成为可能,但他当时正打算离开,去澳大利亚公休,所以实际的移植性实现工作都是我和Steve做的。
IEEE Spectrum:到1970年代后期,AT&T已经拥有使互联网诞生的一切要素。Unix及其所有工具和服务,比如电子邮件,都已经有了,运行CP/M的个人电脑也比较常见。AT&T还有ISDN技术——我们本来可以跳过调制解调器/窄带网络时代的,应该在1985年而不是1985年就出现万维网(Web)了。你是否觉得错失了一个大机遇?贝尔实验室当时有人预见到世界的这一图景吗?
Dennis Ritchie:AT&T的思维定势基本上是以连接为中心的。长时间连接,就像电话那样。分组交换对他们没意义。AT&T在早期互联网时代有太多机会被视而不见了。
IEEE Spectrum:Unix的最初目的是想作为一个电话交换机的平台,是吗?
Dennis Ritchie:Ken最初的想法是计划写一个操作系统。他开始后,我也很早便加入了。除了做了一些新的、很酷的东西后,真正引导我们的是我们的“自私”——去开发一些可以使我们的生活变得更轻松的工具:“我喜欢用相应工具去做相应的事。对于一件很困难的事,我常思考我可以开发什么样的工具,让它实现起来更简单呢?”
IEEE Spectrum:后来你都开发了哪些诸如此类的工具呢?
Dennis Ritchie:有很多。比如Brian Kernighan开发的一种小语言。我们都喜欢排版和文档——这是一种突发奇想,你可以写一种语言去描述图片、线条,然后用它来绘制图表及有机分子图。Unix使这一切都很简单。
IEEE Spectrum:Unix实际应用里你最喜欢哪个?
Dennis Ritchie:Kindle基于Linux,真酷啊。智能手机之类的也是。真让人惊喜。
ISO发布C语言标准新版本
ISO(International Organization for Standardization)正式公布C语言新的国际标准草案。
之前被命名为C1X的新标准将被称为ISO/IEC 9899:2011。新的标准修订了C11版本,提高了对C++的兼容性,并将新的特性增加到C语言中。
新功能包括支持多线程, 基于ISO/IEC TR 19769:2004规范下支持Unicode,提供更多用于查询浮点数类型特性的宏定义和静态声明功能。根据草案规定,最新发布的标准草案修订了许多特性,支持当前的编译器。
今年10月份,ISOITTF(Information Technology Task Force)开始接手最终草案审查,对此未发表任何评论。 该草案的修改是基于2011年4月通过的N1570 draftPDF。
C语言死没死不值一驳
前几天一个叫许式伟的人,在CSDN BLOG发了一篇《 驳“C语言已经死了”》,其目标是针对Ed Burnette的这篇《 C语言已经死了,5个需要忘却它的理由》,之后引发了一堆的“驳”过来,“驳”过去,再“驳”过来。其实这种问题根本不值一驳!
正如令狐在发给我的MAIL中所说的那样:
其实任何语言都没有什么好跟不好,只有适用不适用 ── 高级语言的确方便,但总需要有人写汇编去实现它的编译器或解释器吧……。
而C语言,认真的用过任何其他"更高阶语言"的人都不会说它"已死"──目前几乎所有的高阶语言,在提供低阶接口的时候,都是采用C/C++作为接口。而一个真正的系统,100%架构在高阶语言之上而没有使用一行低阶代码,可以说是不可能的。
一个人可以只关心高阶语言而不去研究底层,但他绝对不应该排斥底层开发人员。否则,当有一天,真的如他所愿,所有的底层开发人员都消失不见的时候,他才会知道自己有多么痛苦。
至于那些看不得别人不同意见,动辙管别人叫“小白”的,其实自己不过是个“大白”。
用VM语言很了不起么?论性能,还是比不过C;论功能,又比不过动态语言。有什么可得瑟的呢?更何况他们用的VM不还是C写的嘛。
我讲一个故事来结尾吧:从前有一座山,有几个人在山顶上堆了个小土堆,有一只土鳖爬到这土堆上,登高望远,高瞻远瞩,不禁感慨大发,曰:我站得比山还高,那个号称“山”的东东可以死了。然后一帮小土鳖跟着说:是啊是啊……
网友热议12月编程榜 C语言经典地位深入人心
Tiobe今日发布了12月份的编程语言排行榜。有意思的是,尽管本次榜单重点突出的是C#语言的领先,然而从新闻评论来看,网友们对经典C语言的关注非常高,看来那句真正的程序员使用C语言的确深入人心。
网友对C语言的精彩评论如下:
推崇:
solarwindsj:C最符合人们最初对"程序"的印象和思维习惯。
iwad:C能达到机器和人脑之间的最佳平衡。增则嫌多,减则嫌少,刚刚好够用。
匿名网友:c语言,永远的王者,除非现代计算机体系脱离冯.若依曼,否则c将是编程工具中永远的王者。
匿名网友:计算的本质到底是什么?本质就是对数据的处理。体系结构再怎么变,这个本质是不会变的。当你能够控制一个字节、一个位的时候,还有什么做不到的呢?C语言就刚刚好提供这种控制能力。它的语法够简单,很容易转换成对应的汇编,接近效率的极致,但又不像汇编那样晦涩难懂,而是将数据的处理流程以人能够理解的方式呈现出来:if/else/for,搞定一切。
匿名网友:C的应用场景在于嵌入式和网络。想学习和实践的话,这两个方向都可以。
a1405:一直被模仿,重未被超越!
匿名网友:以我认识的C程序员来看,C程序员的性格普遍冷静,不易冲动,很少上网乱喷。
痛心疾首:
匿名网友:在国内,放眼望去,大片大片的Java,C#,VB,C++程序员。搞C的到底在那里呢?他们都躲在哪些领域?那些岗位?还是说C根本就是外国人搞的东西。难道是我们的程序员太贪图享受?
匿名网友:c在国内很难找到工作的,除非你牛的不行,国外主要是搞底层开发的,国内主要是做应用开发的,开发环境相差太大,没的比。
分析:
dwkkwd :C语言程序员需要懂更多的东西 OS内核 网络协议 算法当然入门也慢
smillyz :C语言一直位居第二,坐的真稳!由此可见最基础的也是最重要的!!
iwad:计算的本质到底是什么?本质就是对数据的处理。体系结构再怎么变,这个本质是不会变的。当你能够控制一个字节、一个位的时候,还有什么做不到的呢?C语言就刚刚好提供这种控制能力。它的语法够简单,很容易转换成对应的汇编,接近效率的极致,但又不像汇编那样晦涩难懂,而是将数据的处理流程以人能够理解的方式呈现出来:if/else/for,搞定一切。
匿名网友:C的应用场景在于嵌入式和网络。想学习和实践的话,这两个方向都可以。
匿名网友:现在很少有高级语言能做到C的效率的,这就是C长青的基本保障。JAVA运行需要JVM,PHP,ASP等需要脚本解释器,.NET需要中间语言转换(这个我不怎么清楚),C++ 需要更多的开销来实现复杂的对象关系,在很多的低配置的系统里面,只有1K的内存,16K的FLASH,这点资源,不说一个JVM,就连一个简单的解释器的很难放的下,在这样的环境下,你可以不选择C,但是你能选的就只有汇编了。因此,C虽然比较繁琐,功能不够强大(就是封装的不够高),没有很多现成的类库或对象支持,但是其用途却是具有不可替代性。
C语言已经死了,5个需要忘却它的理由
我用C语言编程已经超过20年了。我写过C语言的编译器、C语言的调试器、用C开发的其他语言、游戏、客户端程序和服务器程序,你说吧!还有什么是我没写过的。还有我的书架上充斥着折了角的K&R和Steele的书。我太了解C语言了,但是,我讨厌他。十分讨厌!
当我读到一篇博客,题目是“为什么每个程序员都应该学习C语言?”时,我真是鸡皮疙瘩满地。如果你真的是个专业的程序员的话,你肯定觉得这是个天大的笑话,尽管作者的本意也许不是这样的。这篇反驳的文章有点意思,但是还是没有抓住本质。所以我展开了说一下。有以下5个原因来说明,为什么那些会C语言,并且使用C语言的程序员,现在不但应该去用别的语言,而且应该忘记他们学习C语言过程中的那些烦人的东西。
1、内存分配
仅仅关于这一点我就能写整整一篇文章了,也许能写一本书,甚至还有可能写出能够塞满图书馆技术书籍那块,那么多的内容。内存分配和存储单元分配的存在确确实实是个大麻烦。你要不就是分配太少的内存不够用,要不就是分配了太多内存浪费掉。这里的问题就是:怎么把它初始化为零呢?还是干脆就不初始化它。但最挠头的步骤还是释放内存。所有已有的工具包都会帮助你确认,你是否已经释放了之前分配的每一位的内存,在释放完之后是否永远不使用它,并且会阻止你,永远不要释放它第两次。更严重的是,分配内存和释放内存在C语言中都是很慢的,非常慢。使用内存分配时,要考虑的各种特殊情况,我真是连想都不愿意去想,只要问题(对象)的大小合适,我更愿意使用栈空间或者事先分配的结构空间。如果这么做的话,我就有更值得烦恼的事了。话说回来,发明垃圾处理器那人真应该得诺贝尔奖。
2、多线程
我过去是喜欢C语言的,真的。直到我开始用C开发并维护多线程的服务器。在为连接相冲突的线程保护数据方面,C语言没有为程序员提供那怕一点点的帮助。你在使用单线程的日子里获得的每一个直觉、经验,用在多线程的时候都是错误的。至少JAVA有表示同步的关键字和备有证明文件(但是是个很奇怪的文件)的记忆体,但即使是这样,除非你使用新的javax.concurrent,否则也只能在那些巨大的平行摆放的机器们面前崩溃。回到C语言上:在模拟生产的环境下,坚持一个星期在数据中心调试一个死锁(这事真的发生过)。而JAVA却只需要Ctrl+Break!天哪!!!
3、指针
指针太难以控制了,太阴险了;我甚至没有委婉一点的方式去形容它。我生命中每年都有几个月被用来调试那些奇怪的指针问题。我过去常常努力获取所有的诀窍,比方说难以理解的构成符、联合体和偏移量,以及重用最后两位做标记,还有所有其他的诀窍。但我发现这么做根本不值得。其他语言的静态引用就可以解决了。
4、过早的优化
说到诀窍,你是否曾经浪费脑细胞去研究究竟*p++是不是比p[i]快?你是否曾经花时间去试着做点变化来代替乘法,或者去尝试使循环中的倒置运行更快的方法?还在为传递一个参数的速度和反对添加结构,并且传递它的速度一样而苦恼不已?停吧!算法是速度的关键,程序员的水平决定了他会使用那些算法。知道这一点能让你的程序更好,更快一点并且让你的脑袋少扭几个筋。好吧,有一些例子也许可以这样做的……不,你就别那么做就行了!
5、测试
你最喜欢的C的单元测试的工具是哪个?嗯…一个也想不到?单元测试一定是一点也不重要,是吧?或者是太麻烦了,很难跟上进度,浪费时间。你可以把这个时间用到更加有用的事情上,让它只占用工作时间的1%,那还比较合适。或者在数据中心,通过优化的没有标记的图形来调试这个仅仅由100个同时在线使用者引起的问题。
我本来应该继续再说一些原因的,但是5个现在就足够了;说完这些,现在感觉好点了。C以前是非常棒的…那是在1984年的时候。直到今天,那些用C写的新代码都让我感到惊喜…如果你让我比较的话,我觉得C++只是比C稍微好点。如果你想要学些老一点的语言,不妨尝试Forth,Lis,或者APL。这些老式的语言起码能教会你,用不同的而且优雅的方式去思考你的程序。
作者简介
Ed Burnette是一位有着丰富编程经验的程序员。他现在致力于使用JAVA和C来开发OLAP客户端和服务器。他业余时间喜欢研究Java、Eclipse和开源软件。他写了很多关于Eclipse的文章和书籍,另外他还是EclipseZone.com的主编。
驳“C语言已经死了”
现在,有很多C/C++程序员总是自命不凡,看不起其他开发人员。其实,或许别人更看不起他呢!
有偏见的永远只是个体,而不是群体。作者加了后面那句
英特尔:C语言软件与万亿级平台不冲突
2007年6月20日,2007年英特尔研究日(Research@IntelDay)在位于美国加州圣克拉拉的英特尔公司总部隆重召开。在历时两天的活动中,英特尔院士以及来自全球各地的研究人员和各领域的技术专家汇聚一堂,畅谈技术发展,共同探讨驱动技术和应用创新所面临的机遇与挑战。英特尔公司还在研究日中重点演示了50余组最新的研究成果,包括万亿级计算、高能效计算、移动计算、探索性研究等主题。这50余组代表最前沿技术的研究成果演示,由英特尔全球各个实验室选送,代表了英特尔在研究领域的最新的发展方向,同时也是业界前瞻性技术发展的一个风向标。
本次英特尔研究日首次邀请中国媒体参加,泡泡网有幸成为国内唯一一家受邀网络媒体将全程报道此次盛会。以下为研究日第一天精彩内容:
大部分旧程序不适用于多核架构,因此运行基于并行设计理念的新应用时性能大受限制。英特尔与UC Berkeley正在研究将现代的安全及并发特征嵌入C语言的方法,进而使软件开发商得以更容易地发展旧的C语言软件,以支持未来的万亿级平台。
Google不让C语言之父提交代码
大家都知道,C语言和Unix的发明者、图灵奖得主、最具传奇性的程序员Ken Thomson加盟Google之后,与一帮高手一起捣鼓出了又一惊天之作:并发时代的系统编程语言Go。Go一经面世就闯入了编程语言排行榜前20,创造了奇迹。
可是,Gawker网站今天爆料,他在Google居然没有提交代码的权力!原因呢,只不过是按公司规定,所有程序员必须通过编程语言考试,而他还没有参加过这种考试,至少在《Coders at Works》一书写作前:
Peter Seibel: 我知道Google有一个规定,每个新员工都要在接受编程语言测试之后,才允许提交代码。那就是说你也得考(你自己发明的)C罗?
Thompson: 是啊,我还没考呢。
Seibel: 你还没考? 难道你还不能提交代码吗?
Thompson: 是啊,我不能提交代码,不行……我只是还没有去考试,还没觉得有必要去考。
看来Google真是一家唯算法唯规则的公司。三年前,Google曾被曝光用算法和机器人程序来给申请者提交的简历打分。此外还有很多招聘和面试程序中的古怪事情不断见诸报端。
无独有偶,昨天成为CSDN头条的文章“从盖茨到扎克伯格:极客的力量”中,也爆出开发Mac操作系统核心程序员之一Hertzfeld现在在Google也不快乐:
使赫兹菲尔德发生变化的不只是时间,还有他的工作环境。谷歌将工程师看作最重要的资产,认为员工必须喜欢自己从事的工作,同时支持开源软件。但赫兹菲尔德承认,谷歌是一家大公司,在产品设计方面有严格的标准和程序,因此减少了他工作中的乐趣。他说:“我与工作的关系是艺术家与他的作品的关系,但在谷歌,我无法从自己的工作中获得快乐。”
尽管个人的控制力降低了,但赫兹菲尔德拥有了产生更大影响的可能性。有时,谷歌的几行代码可能会影响成千上万的人,这为他的工作带来了一种激情。他说:“这里的一切都是主流的。谷歌、iPhone,这些比上世纪60年代甲壳虫乐队更能影响文化,它们甚至会影响整个人类。”
对了,《Coders at Work》一书是对15位顶级程序员(包括图灵奖得主高德纳、Erlang和JavaScript 之父、Norvig、Guy Steele等等大师)的访谈集,在同类书中是最有趣、最有料而且最精彩的一本。中文版还在翻译中,将由人民邮电出版社图灵公司出版。微软研究院的邹欣做了不错的读书笔记1,2,3,4,大家可以去先睹为快。搞技术的,了解高手的思想有时候至关重要。
“人物小传”
Ken Thomson 计算机科学先驱,最具传奇性的程序员。C语言前身B语言和Go语言、Unix和Plan 9操作系统、UTF-8和正则表达式的发明者。1983年图灵奖得主,美国科学院和工程院院士。1949年2月4日生于新奥尔良。加州大学伯克利分校电子工程与计算机硕士。1966年加入贝尔实验室,2000年退休。
据文献记载,1969年,他在Multics操作系统项目失败后的无聊时间里,为了在一台PDP-7计算机上玩自己编写的“太空旅行”游戏,而用汇编开发了Unix的最早部分(文件系统)。是的,伟大的操作系统是玩出来的。
他还开发过一个名为Belle的象棋程序,打遍天下无敌手。
Andy Hertzfeld Apple的第一个软件魔术师,也是Mac操作系统的主要开发者之一。他还是著名苹果公司轶事网站Folklore.org的创始人,这个网站后来编成了《苹果往事》(电子工业出版社博文公司出版)一书。
第20届国际C语言混乱代码大赛获胜者宣布
第 20 届国际C语言混乱代码大赛(IOCCC)于 2 月 5 日结束,获胜者名单已正式公布,获奖作品的源代码尚未发布,主办方表示将在 2 月底或 3 月初释出。IOCCC 是一项国际编程赛事,目的是写出最有创意的最让人难以理解的C语言代码。今年的获胜者中包括了 1 名英国人,1名德国人,6名美国人(其中一人可能是华裔 Don Yang),1名芬兰人,1名以色列人,1名墨西哥人,3名日本人和 1 名中国人(Hou Qiming,作品是科学计算器)。
2012 QCon:Go是互联网时代的C语言
由InfoQ主办的全球顶级技术盛会QCon 2012 于4月18日到4月20日在北京隆重召开,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。本次大会上,上海七牛信息技术有限公司创始人许式伟发表了主题为“Go,互联网时代的C语言”的专题演讲。
语言的选择已经非常之多。偏系统级的语言大多为静态类型语言,例如C,C++,Java,C#,Delphi;也有偏快速业务开发的语言,大都为动态类型,例如PHP,Python,Perl,Ruby,JavaScript;还有面向特定领域的,例如R和Matlab。
▲
那么,为什么我们需要Go这样一门新语言呢?这门语言究竟肩负着怎样的使命而面世?最初,Go语言官方自称是一门系统级语言。之所以开发Go语言,是因为“近10年左右开发程序之难让我们有点沮丧”。Go语言这一定位暗示了希望取代C和Java地位,成为最流行的语言。在 2000年前的单机时代,C语言是编程之王。随着机器性能的提升,软件规模与复杂度的提高,Java逐步取代了C的位置。尽管看起来Java已经深获人心,但Java编程的体验并未尽如人意。历年来的编程语言排行榜显示,Java语言的市场份额在逐步下跌,并趋近于 C 语言的水平。这对于Java来说是非常尴尬的。作为一个现代化的语言,拥有众多C语言无法企及的特性,但似乎市场并不买账。也许挺Java的公司非常之多,有钱的如 IBM、Oracle(Sun)之类,亦无法改变这个局势。
Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。Go是谷歌2009发布的第二款编程语言.2009年7月份,谷歌曾发布了Simple语言,它是用来开发Android应用 Go Logo的一种BASIC语言.
Go语言的作者们很清楚,C++真的没啥值得参考的,他们要学习的是C语言。C语言经久不衰的根源是它足够简单。Go语言也要足够得简单。那么,互联网时代的C语言需要哪些东西呢?
首先,并行与分布式支持。多核化和集群化是互联网时代的典型特征。作为一个互联网时代的C语言,必须要让这门语言操作多核与计算机集群如单机一样容易。其次是软件工程支持,工程规模不断扩大是产业发展的必然趋势。单机时代语言可以只关心问题本身的解决。互联网时代的C语言还需要考虑软件品质保障、团队协作相关的话题。最后,编程哲学的重塑。计算机软件经历了数十年的发展,形成了多种学术流派,有面向过程编程、面向对象编程,函数式编程、面向消息编程等等。这些思想究竟孰优孰劣,众说纷纭。什么才是最佳的编程实践?
在本次演讲中,我们将来看下Go作为互联网时代的C语言,是如何应对这些问题的。
Go语言在服务器上的标准库是最多的。在谈及并行与分布式支持时,许式伟表示,多核化和集群化是互联网时代的典型特征,作为一个互联网时代的Go语言,必须要让这门语言操作计算机集群如单机一样容易。
轻量级进程应成为语言最重要的执行单元
- “轻量级进程模型”对“异步IO模型”
- 实现“轻量级进程”的成本
- 基础层面
- 新IO库
- 同步与互斥
- 使用第三方库的问题
通讯
- 共享内存模型VS消息传递模型
- Erlang风格的并发模型
- Go语言的轻量级进程的通讯
在软件工程方面,Go是第二个将代码风格强制统一的语言。
If expression
{
}
在错误处理规范方面,函数允许返回多个值、error类型
Go的特性列表
- 垃圾回收
- 更丰富的内置类型:slice、string、map等
- 函数都返回值、更好的错误处理规范
- 匿名函数和闭包
- 类和接口
- 轻量级进程和消息队列
- 反射
- 包
- 更丰富的标准库
Go目前为止有两个编译器,一个是按照Plan 9 风格编写的,另一个是Gcc Go,尽管两个编译器相较其他语言的编译器已经非常快了,但是其中Plan 9风格的速度比Gcc Go还要快上5倍。
Go语言支持类、类成员方法、类的组合、反对集成、反对虚函数、放弃构造函数和析构函数、更好的接口.Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
从编程哲学角度来看,Go语言是变革派,不是改良派。面向过程编程、面向对象编程、函数式编码、面向消息编程等等、Go语言融合众家之长、极力维持语言特性的简洁。Go语言和C++、Java、C#有着完全不同的设计哲学。既然函数重载带来了负担、并且这个特性并不对解决任何问题有显著的价值,那么Go就不提供它。
谷歌Go语言日渐完善,接近C语言
Go将动态语言易于编写的特性和静态语言的高效性相结合,具备良好的易用性和极佳的执行效率。Go语言最初定位于网络服务器、存储系统和数据库的程序设计,同时在语言中包含并发构造体,以方便的帮助开发者创建并行任务。
Go语言具有效率极高的编译器,目前Go编译器能在Linux、FreeBSD以及Mac OS X平台下运行,但暂时没有对Windows环境提供编译支持。Go开发团队曾在博客中表示,编译完成的Go程序运行速度接近C语言实现的程序。
在今年五月份举办的Google I/O大会上,Go语言背后的工程师Rob Pike和Russ Cox两人一同为开发者带来了Go语言编程讲座,解释Go语言的灵活设计和独到之处。Go语言的主要设计者Rob Pike是Google公司的资深工程师,在分布式系统、程序语言设计以及软件开发工具方面有着多年的经验。此前在贝尔实验室工作期间,Rob曾是网络操作系统Plan 9的设计者,同时也是Inferno 操作系统的设计者,Rob还曾与AWK 和AMPL编程语言的设计者Brian Kernighan一起合著有两本Unix环境下编程语言的书籍。同时,Rob Pike还给出一份可供参考的Go语言教程。
针对Google I/O大会上收集到开发者的提问,在Go开发团队博客上给出了常见问题的FAQ。在Android平台支持方面,Go编译器支持面向ARM处理器的代码生成,所以在Android平台上运行Go程序是可行的,Go语言开发团队也将积极推进Android平台上的开发工作。由于Go具备简洁的语法和语言本身的一致性,已有大学执教的老师表示将会在自己教授的编程语言课程中为学生开设Go语言选修项目。
目前在Google内部已有部分应用使用Go语言来实现,同时开发团队表示,Go已相对成熟,完全能够用于最终系统的开发和交付,甚至可以使用Go来开发Web应用。在后续工作中,Go开发团队将不断对语言进行改进提升,并随时欢迎开发者在社区中反馈Go语言开发时遇到的问题。目前在国内使用Go语言进行实际开发的公司还为数很少,尝试使用Go语言的开发者大多源自个人兴趣或技术预研,随着Go语言类库和成功案例的增多,将会有越来越多国内开发者在实际开发中尝试Go语言带来的效率和便捷。
GCC 4.7 正式发布,支持C/C++11的更多特性
GNU 项目今天发布了GCC 4.7 正式版本。
GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。GCC 使用 GPL 与 LGPL 许可证,是 GNU 计划的关键部分。GCC 目前可处理 C++、Fortran、Pascal、Objective-C、Java以及 Ada 等语言。现在是 Linux/Unix、Mac 等操作系统的标准编译器。
该版本在4.6.x的基础上,进行了大量的改进,现在C、C++和Fortran编译器支持3.1版本的OpenMP规范(用于共享内存并行系统的多线程程序设计的一套指导性注释)。该版本还针对各个语言进行了功能改进,主要包括:
针对C的功能改进
- 支持ISO C11标准中的更多特性。除了之前的-std=c1x和-std=gnu1x选项外,GCC现在还支持-std=c11和-std=gnu11选项。
针对C++的功能改进
- G++现在支持-std=c++11、-std=gnu++11和-Wc++11-compat选项,这些选项的作用相同。
- 实现了C++11的extended friend语法。
- 实现了C++11的重写控制。
- 实现了C++11的非静态数据成员初始化。
- 实现了C++11的用户定义数据标识。
- 实现了C++11的别名声明。
- 实现了C++11的委托构造函数。
针对运行时库(libstdc++)的改进
- 实验性地支持新的ISO C++11标准。
- 增加了--enable-clocale=newlib配置选项。
- 用于无序关联容器的调试模式迭代器。
- 通过包含来避免破坏全局命名空间。
针对Go语言的改进
- 现在GCC实现了Go1语言标准,目前对于Go的支持尚不完全,预计将在4.7.1版本中进行改善。
- Go已经在GNU/Linux和Solaris平台上进行了测试,在其他平台中也可能会很好地运行。
关于改进的详细信息可参阅: GCC 4.7 Changes
使用GCC 4.7的一些注意事项:
- 一些针对旧系统的支持功能以及最近没有被维护或检验的GCC目标端已经被放弃,在下个版本中将会永久删除这些代码。
- AVR端的libgcc已得到改善,它的multilib架构得到了增强。因此,所有应用程序的对象必须在GCC 4.6.x或4.7.0中进行编译。
从之前GCC版本迁移至4.7版,可参阅: 迁移指南
揭秘iPad/iPhone 钓鱼网站产业链
钓鱼网站盯上New iPad
在iPad代购网下单购买New iPad,结果下单后按卖家要求交完定金,就再也收不到货了。因New iPad发布之后迟迟未能在中国大陆正式销售,iPhone 4S依然一货难求,利用iPad/iPhone 来钓鱼的网站令消费者大上其当。金山毒霸发布的数据显示,仅上周,金山毒霸就拦截了超过500家山寨苹果钓鱼网站。
这些假iPhone/iPad钓鱼网站主要依赖互联网媒介来推广获益,网站流量是行骗的基础。记者调查分发现,这些钓鱼网站的平均生存周期只有3-5天,每天吸引的访客数量约20万人,其中即便只有千分之一的人中招,每天也会有200名受害者损失大约20万-40万元。巨额利益的诱惑使得钓鱼网站层出不穷,严重危害消费者权益。
巧妙设局步步设套
猖獗的背后,是大量以iPad/iPhone为噱头的钓鱼网站支撑运转,这已经形成了一条完整的黑色产业链。
骗子利用网民心理漏洞,巧妙设局步步设套。行骗的常规手段是先以物品超低价引诱网民,后以货到付款的手段麻痹网民取得信任。然后最后通过不法手段骗取网民钱财。
安全专家李铁军分析说,“货到付款仅仅只是钓鱼网站行骗的噱头,其目的是先收集消费者真实个人信息,再通过打电话询问的方式试探消费者是否有购买需求,然后确定采用哪种行骗方式。在确认买家身份后,若发现买家对苹果和网购了解不多,兴许就会收到破砖头或廉价山寨机。”
“更多情况下,骗子根本不发货,只会通过电话骗你预付定金,再一步步让你掉进连环骗的陷阱。核心是骗子电话核实买家个人信息,再通过短信、电话实施连环。到这一步,具体是卖什么东西已经不重要了。”李铁军说
钓鱼网站产业链条绘制图显示,网民在完成支付行为之前保护好个人信息以防泄露是预防掉进连环陷阱的关键。
图1 假苹果钓鱼网站的典型骗人流程
识别钓鱼网站特征
一位长期跟踪观察钓鱼网站的业内人士介绍说,钓鱼网站的特征比较明显,虽然在外观上模仿正规商城,但当访客到达网站时,大多能在页面发现在线聊天的窗口,而不是淘宝旺旺。在聊天过程中,消费者很容易观察到疑点。
“这些网站的购物流程极其简陋,网站内容大同小异,模板相对比较简单,疑似批量制作。消费者看到到达这些网站,会有“似曾相识”的感觉。为吸引用户上钩,钓鱼网站会充分信任访客。哪怕你全部输入错误信息,骗子们也并不在意。如果你在聊天对话框看到所谓“客服”的联系方式,简单搜索“客服”QQ号或手机号,就会发现这骗子不光卖假iPhone/iPad,还会出租房屋、卖茶叶、卖药品、开旅行社、甚至卖充气娃娃。”
行骗方式一:假团购
行骗方式二:超低价
行骗方式三:直接付款给个人账户
此外,记者了解到,钓鱼网站通过第三方信息平台进行推广也是常用的营销手段。“骗子擅长使用搜索引擎优化,对iPhone/iPad感兴趣的人,比较容易搜索到这些页面。比如可以在某些商城的论坛、空间、博客、贴吧、分类信息网站等平台发现这些网站的推广链接,因为价格很低,容易吸引点击。”
该人士提醒网民,虽然识别钓鱼网站不是很难,但重要的是网民不要轻易相信网上低价信息。
金山毒霸一周捕获500钓鱼网站
金山毒霸安全中心发布数据显示,利用低价iPad/iPhone为噱头的案件呈现高发态。据了解,金山毒霸发起网友举报钓鱼网站的活动仅仅一周内就捕获了500个钓鱼网站。
“我们在官方论坛公布钓鱼网站特征,发动网友采用类似人肉搜索的方法去寻找更多钓鱼网站。该活动激发网友的极大热情,仅几天时间,就收到网友举报的假iPhone/iPad钓鱼网站150余个。根据这些发现调整钓鱼网站识别算法,一周内捕获的新iPhone/iPad钓鱼网站就超过500个。”安全专家李铁军介绍说。
金山毒霸发出预警,提醒购买iPhone/iPad的网民,切勿轻易相信那些超低价的千元级iPhone/iPad,货到付款的交易也未必是安全的交易。使用免费的金山毒霸2012帮助拦截各类钓鱼网站,如果开启金山毒霸2012网购敢赔模式依然被骗,还可申请金山毒霸进行赔付。
国际大学生超级计算机中国区决赛开幕
在科技部、教育部的共同指导下,由国际超级计算机大会组委会(简称ISC)、国际高性能计算咨询委员会(简称HPC-AC)、浪潮集团共同主办的“首届中国大学生超级计算机竞赛暨ISC12国际大学生超级计算机竞赛中国区选拔赛”决赛正式拉开战幕。来自国家科技部、中国科学院、中国工程院、各决赛高校的领导、院士、科学家、师生以及新华社、人民日报、科技日报、新浪、搜狐、至顶网等30余家媒体等参加了此次开幕式,新华网、新浪网、至顶网对此开幕式进行了图文直播。
这是中国首次举办这一类型的赛事,本次赛事自2月拉开战幕,共有27所985、211高校报名,3月22日,经过竞赛评审委员会的多轮评定,国防科学技术大学、中国科学技术大学、清华大学、武汉大学、山东大学、中山大学六大名校获得决赛资格。此次决赛为时3天,4月19日决赛结束。最终胜出的两支队伍将获得6月于德国汉堡举办的ISC12国际大学生超算竞赛的两张入场券,代表中国高校超算的最高水平与世界超算强队同场竞技。
突出的应用导向是本届赛事的特色。比赛采用了超算实际应用中最为广泛的HPL、OPENFORM、CPMD、CP2K、NEMO五大应用算例。参赛队伍需要自行搭建总功率不高于3千瓦的超级计算机,并在该平台上运行上述5个算例,累计成绩最高者胜出。评审委员会、北京应用物理与计算数学研究所副所长莫则尧在发言中指出,大赛规则与国际赛事完全接轨,参赛队伍不仅需要具备优秀的高并行程序开发和优化能力,更要拥有丰富的超级计算机实际操作经验,以及对最新超算技术的理解,大赛规则与国际赛事完全接轨,是对参赛队伍的超算应用能力的全方位考察。
当前应用已经成为美、日、欧等国家超级计算机产业的发展的重要动力,从全球范围来看,超算竞争正在从峰值性能的比拼向应用推进转变。竞赛组委会、清华大学高性能计算技术研究所所长杨广文称,就我国来看,随着自主研制的 “天河一号”、“神威蓝光”等千万亿次系统的问世,我国超算产业已在核心技术领域已取得了很大成就,但是长期以来“重硬轻软”的矛盾也日益暴露,应用成为制约中国超算及相关产业发展的突出瓶颈。
从应用和人才入手,推进中国超算发展,是本次大赛的主要目的。浪潮集团高级副总裁王恩东在本次比赛开幕式发言中表示,要想让超算长期健康发展,需要转变发展思路,不仅要研制国际领先的超级计算机,更要用好超级计算机。大学生是未来中国科技力量的主体,此次大赛可以推进大学生对超算的认知,为今后的超算培养应用型人才,对于推进超算发展具有十分重要的意义。
作为“现代经济科技的大脑”,超级计算机能够缩短技术研发周期、加快创新成果,提高经济发展效率,推动经济发展转型。推进超算应用普及,不仅对于加快产业自身的发展具有重要意义,对于十二五,甚至更长时期的发展方式转换也具有不可低估的作用。在当天的启动仪式上,国家科技部高新司副司长杨咸武对于本届竞赛给予了高度评价,他认为我国举办的这一赛事正当其时,这对于今后增强超算人才储备,促进超算更好的在国民经济和科研领域发挥作用,将产生积极影响。