听有人说C#、VB比C++好是因为做界面方便还算傻得可爱,听有人说用C++做数值计算而不屑于做界面可就对不起咱C++的恩人了。这我可要说道说道。

想当年C++刚出江湖,名门出身,自立门派,想抢Objective C老大的位置割据一方。但名门出身的混混也还是混混,论OO不够Objective C或SmallTalk的水准,论效率没有C的干净利索,结果折腾半天没人看得起。时至今日,*nix法老们还在坚持用C。

但世事难料,界面图形化之后,大虾小虾们都深感界面功夫之难,是时VB横空出世,威震四方。C教各界大为不满,怎能让一介小虾夺了"The one true programming language"的风头。于是强烈要求微软在Microsoft C里提供类似VB的功能。当时Microsoft C/C++还不成气候,比起Turbo C来简直是一坨。微软怎么能错过这么好的机会呢。不过也巧,微软手头还真有这么个差不多的东西,就是顶顶大名的MFC的前身AFX。

起初AFX这个东西是想利用C++的OO特性来简化Windows界面编程,他们甚至设计了一套完整的OO的窗口系统,但交给其他部门试用后被批评得一塌糊涂。有鉴于开发人员更中意C的API,AFX被彻底重做,成了Win API的简单包装,并改名成MFC,于是有了Visual C++。之后微软在IDE上做了大量工作,模拟VB的界面设计功能,于是推出了Visual C++ 2.0,并成功的使“IDE generated code, do not change!"路人皆知。

那么剩下的事情,就是说服C程序员改用C++。理由大家应该都很熟悉,无非就是C++完全包含C的功能,还支持OO,还有现在已经没人相信了的”改掉了C里不安全的地方“,然后演示怎么用MFC像VB一样拖拽来创建窗口。书商很英明的开始大肆出版OO的书籍,搞得不懂OO就像今天有人不懂Agile一样。于是乎经过艰难的3年时间,Windows95已经进入寻常百姓家,Windows上的C程序员也大多皈依了C++新教。就算不太懂C++,也可以在简历上写”C/C++",赚个面子。后来开源兴起,为推翻Windows图形桌面系统的垄断,众多激情澎湃的开发人员加入开源,于是*nix上的C++社群也开始发展起来。不过也因此暴露出各个C++编译器各说各的方言的问题,而不像C的可移植性那么好。

到了05年,终于有人忍不住站出来说了心里话。C++的OO唯一成功的例子就是做界面。到了07年,Linus Torvalds更是毫不客气的以“You are full of bullsh1t. C++ is a horrible language."来开头抨击。C++错了吗?C++错了吗?C++真的错了吗?

C++确实具有非凡的创新和成就,但作为革新的尝试,它当时提出的方法并没有完全解决它要解决的问题。撇开偏见看一看的话就会发现,直到今天,我们所有可重用的代码中大部分是C的,而且大部分高性能代码也都是C写的,即使用的编译器是C++。而活得比较久的C++的类库代码,最多的则就是界面类的。其中原因说得太多,不再罗嗦了。

正是由于C++的这些弱点和Stroustrup对于C++的纯正性的坚持,导致了Java大肆修改C++的空前的成功。盖茨对Java兴奋不已,导致微软早期大力推动Java,但Java同样有不成熟的地方,微软要扮演改革派,但SUN却扮演了守旧派,拒绝微软对Java的任何改动,双方最终不欢而散。失去了微软支持的SUN当时却力不从心,不过最终英明的把1.2版类库设计外包给了Borland,将Java从玩具变成了将C++踢下王座的征服者。而微软则从Borland挖到Anders Hejlsberg设计了C#定位为应用开发与Java一决雌雄。从此,C++逐渐退出主流,隐居后台底层和维护桥接历史遗产,而C却因嵌入式开发和良好的集成能力小小发展了一把。

总结,尽管有些C++人看不起界面编程,但正是图形界面编程成就了C++。

http://blog.csdn.net/nightmare/article/details/1868002

图形界面编程成就了C++的更多相关文章

  1. Linux C 程序 GTK+图形界面编程(22)

    GTK+图形界面编程 Linux大多是在字符界面,但也可以开发图形界面 目前已经存在多种Linux下开发图形界面的程序开发包:最常用的是Qt和GTK+ Qt是一个跨平台的图形界面开发库,不仅仅支持Li ...

  2. Java中的图形界面编程

    前言 正文 Java中的图形界面编程 AWT/Swing AWT(Abstract Window ToolKits,抽象窗体工具集) 1.容器类:用来存储组件,实现容器布局 2.组件类:实现界面的一些 ...

  3. C语言控制台窗体图形界面编程(总结)

    本系列文章是笔者通过学习<C语言控制台窗体界面编程(修正版)>而写(关于此文档的很多其它信息请看本系列文章第一篇),旨在让大家更加清晰简洁easy地学习C语言控制台窗体界面的编程. 通过本 ...

  4. python 教程 第十九章、 图形界面编程

    第十九章. 图形界面编程 import Tkinter top = Tkinter.Tk() hello = Tkinter.Label(top, text='Hello World!') hello ...

  5. Java第5次实验提纲(Java图形界面编程)

    1. Swing与NetBeans 使用NetBeans编写简单界面.见GUI实验参考文件中的0.第06次实验(图形程序设计.事件处理与Swing).doc 题目1: Swing用户界面组件与事件处理 ...

  6. 第58节:Java中的图形界面编程-GUI

    欢迎到我的简书查看我的文集 前言: GUI是图形用户界面,在Java中,图形用户界面我们用GUI表示,而GUI的完整英文为: Graphical User Interface(图形用户接口), 所谓图 ...

  7. Java第05次实验提纲(Java图形界面编程)

    1. Swing与NetBeans 使用NetBeans编写简单界面.见GUI实验参考文件中的0.第06次实验(图形程序设计.事件处理与Swing).doc 题目1: Swing用户界面组件与事件处理 ...

  8. java之 22天 GUI 图形界面编程(一)

    转自:http://takeme.iteye.com/blog/1876850 GUI(图形用户界面) import java.awt.Button; import java.awt.FlowLayo ...

  9. 【情人节选帽子】TCS34725颜色传感器和Python图形界面编程(STM32 HAL库)

    截图 描述: l  STM32 HAL库编程 l  使用模拟IIC通信,方便程序移植 l  Python界面编写,蘑菇头的帽子是什么颜色 l  STM32 HAL库串口通信 l  Python界面使用 ...

随机推荐

  1. api的管理工具

    一.常用的api管理工具和测试的方法 1.postman 2.Yapi 3.swagger 4.Rap(阿里)

  2. 作IFRAME于iOS您的设备上支持滚动

    原文链接: Scroll IFRAMEs on iOS原始日期: 2014年07一个月02日本 翻译日期: 2014年07月10日翻译人员: 铁锚 非常长时间以来, iOS设备上Safari中超出边界 ...

  3. DapperPoco

    DapperPoco -- 基于Dapper的.轻量级的.高性能的.简单的.灵活的ORM框架 为什么要重复造轮子 因为现有的轮子都在某些方面不太令我满意,下面我来一一点评一下,欢迎拍砖. Entity ...

  4. 设置Oracle tnslsnr监听器口令

    绿盟扫描提示引用程序脆弱账号  Oracle tnslsnr 监听器,加密主要为了防止监听被恶意远程关闭.关于这个安全问题的详细说明参见文字结尾转载的说明<Oracle的监听口令及监听器安全&g ...

  5. gdal库集成MrSID库的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 首先从Lizardtech网站:http://www.lizardtech.com/download/develope ...

  6. 至Linux-2.6.32编译内核ipset-6.23坎坷的经历

    新的版本号ipset 上周,一名医生在儿童医院等待一段差距叫做数量.接受NetfilterPush信息的邮件列表,列表ipset最新6.23版本号的新功能,非常喜欢我现在需要的是,特别是timeout ...

  7. Scripting web services

    A process performed on a server includes configuring the server to enable script for a Web service t ...

  8. vcmi(魔法门英雄无敌3 - 开源复刻版) 源码编译

    vcmi源码编译 windows+cmake+mingw ##1 准备 HoMM3 gog.com CMake 官网 vcmi 源码 下载 QT5 with mingw 官网 Boost 源码1.55 ...

  9. Leetcode 318 Maximum Product of Word Lengths 字符串处理+位运算

    先介绍下本题的题意: 在一个字符串组成的数组words中,找出max{Length(words[i]) * Length(words[j]) },其中words[i]和words[j]中没有相同的字母 ...

  10. ASP.NET Core Razor 视图起始页 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 视图起始页 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图起始页 上一章节中我们介绍了布局视图, ...