图形界面编程成就了C++
听有人说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++的更多相关文章
- Linux C 程序 GTK+图形界面编程(22)
GTK+图形界面编程 Linux大多是在字符界面,但也可以开发图形界面 目前已经存在多种Linux下开发图形界面的程序开发包:最常用的是Qt和GTK+ Qt是一个跨平台的图形界面开发库,不仅仅支持Li ...
- Java中的图形界面编程
前言 正文 Java中的图形界面编程 AWT/Swing AWT(Abstract Window ToolKits,抽象窗体工具集) 1.容器类:用来存储组件,实现容器布局 2.组件类:实现界面的一些 ...
- C语言控制台窗体图形界面编程(总结)
本系列文章是笔者通过学习<C语言控制台窗体界面编程(修正版)>而写(关于此文档的很多其它信息请看本系列文章第一篇),旨在让大家更加清晰简洁easy地学习C语言控制台窗体界面的编程. 通过本 ...
- python 教程 第十九章、 图形界面编程
第十九章. 图形界面编程 import Tkinter top = Tkinter.Tk() hello = Tkinter.Label(top, text='Hello World!') hello ...
- Java第5次实验提纲(Java图形界面编程)
1. Swing与NetBeans 使用NetBeans编写简单界面.见GUI实验参考文件中的0.第06次实验(图形程序设计.事件处理与Swing).doc 题目1: Swing用户界面组件与事件处理 ...
- 第58节:Java中的图形界面编程-GUI
欢迎到我的简书查看我的文集 前言: GUI是图形用户界面,在Java中,图形用户界面我们用GUI表示,而GUI的完整英文为: Graphical User Interface(图形用户接口), 所谓图 ...
- Java第05次实验提纲(Java图形界面编程)
1. Swing与NetBeans 使用NetBeans编写简单界面.见GUI实验参考文件中的0.第06次实验(图形程序设计.事件处理与Swing).doc 题目1: Swing用户界面组件与事件处理 ...
- java之 22天 GUI 图形界面编程(一)
转自:http://takeme.iteye.com/blog/1876850 GUI(图形用户界面) import java.awt.Button; import java.awt.FlowLayo ...
- 【情人节选帽子】TCS34725颜色传感器和Python图形界面编程(STM32 HAL库)
截图 描述: l STM32 HAL库编程 l 使用模拟IIC通信,方便程序移植 l Python界面编写,蘑菇头的帽子是什么颜色 l STM32 HAL库串口通信 l Python界面使用 ...
随机推荐
- 【bzoj3555】[Ctsc2014]企鹅QQ 简单哈希
传送门 题目分析 题意即求有多少对字符串只相差一个字符,枚举删除每个字符后的哈希, 看有多少相等即可. 比如有如下字符串:$Sd123$,其中S部分的哈希值为H,删除的是d,则原字符串的哈希值为$$( ...
- PostThreadMessage发送进程间消息(对话框向控制台发消息,控制台也可有消息循环)
函数原型 BOOL PostThreadMessage( DWORD idThread, UINT Msg, WPARAM wParam, LPARAM lParam ); 1 2 3 4 5 6 T ...
- 【非常高%】【codeforces 733A】Grasshopper And the String
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- C# 调用PowerShell方法
PowerShell应为编写和运行都很方便,所以为了重复利用,经常写了一些小方法或者PS代码片段.使用的时候可能会很难找到自己想要的那个方法,如果要是有一个界面把这些代码管理起来并且调用,那就很爽了 ...
- Method and apparatus for establishing IEEE 1588 clock synchronization across a network element comprising first and second cooperating smart interface converters wrapping the network element
Apparatus for making legacy network elements transparent to IEEE 1588 Precision Time Protocol operat ...
- twemproxy分片处理原理--剖析twemproxy代码正编
twemproxy在redis上能处理多命令流程只有mset,mget,del的命令,例如mset的话是mset k1 v1 k2 v2 k3 k3,mget的话是mget k1 k2 k3,del的 ...
- OpenCV dll 源码调试—附加到进程
使用CMake可以生成OpenCV源码的解决方案,然后就可以对OpenCV函数进行修改,功能剪切等操作了,对这部分内容感兴趣的可以浏览一下上一篇文章:CMake生成OpenCV解决方案&&am ...
- Matlab Tricks(十八)—— 矩阵间元素距离的计算
两个矩阵间元素(向量)距离的度量,首先想到的是遍历,循环的方式,显然 matlab 下的编程并不推荐,matlab 下矩阵向量化编程效率尤高. 先考虑两个向量距离的计算: ∥x−y∥2=∥x∥2+∥y ...
- bootstrap学习之路
接触bootstrap也半年有余,从一开始不知道如何使用,到知道其各个模块的具体功能,再到提炼哪些使用的比较多,再此又体会到bootstrap源码的精髓,通过oocss写的类使其感觉更有易用性,开始本 ...
- libuv和libev 异步I/O库的比较
libuv 和 libev ,两个名字相当相近的 I/O Library,最近有幸用两个 Library 都写了一些东西,下面就来说一说我本人对两者共同与不同点的主观表述. 高性能网络编程这个话题已经 ...