图形界面编程成就了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界面使用 ...
随机推荐
- 瀑布流的一些CSS实现方式
一个选择是用CSS3的多列columns,可以参考这篇文章.但这篇文章给的例子并不怎么好理解,我做了一些更改,在每个元素上加了序号.可以看到,多列布局是在每一列上依次排列元素的,第一列排完才开始排第二 ...
- AndroidStudio使用properties资源文件
在Android项目开发中,为了一些公用资源使用方便,可以在assets资源文件夹中将需要用到的资源写成.properties或者.json的文件形式,并进行读取使用.在做html5+javascri ...
- <meta http-equiv="refresh" content="0; url=">什么意思?
原文:<meta http-equiv="refresh" content="0; url=">什么意思? 页面定期刷新,如果加url的,则会重新定 ...
- POJ 3904(容斥原理)
Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1750 Accepted: 545 Descripti ...
- Delphi Base64编码/解码及ZLib压缩/解压
最近在写的程序与SOAP相关,所以用到了一些Base64编码/解码及数据压缩/解压方面的知识. 在这里来作一些总结: 一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDe ...
- Spring boot+RabbitMQ环境
Spring boot+RabbitMQ环境 消息队列在目前分布式系统下具备非常重要的地位,如下的场景是比较适合消息队列的: 跨系统的调用,异步性质的调用最佳. 高并发问题,利用队列串行特点. 订阅模 ...
- QT之QSignalMapper(可以理解为转发器,多个按钮绑定到一个Edit上,且能分辨。每个单独连接的话,反而麻烦)
QT之QSignalMapper QT之QSignalMapper 简述 效果图 上代码 相关知识点文章 结尾 简述 QSignalMapper我们可以理解为转发器,此话怎讲呢?比如,按钮点击的响应槽 ...
- 概率论经典问题 —— 三个事件 A、B、C 独立 ≠ 三个事件两两独立
三个事件 A.B.C 相互独立?三个事件两两独立? A:第一次正面朝上: B:第二次正面朝上: C:第一次和第二次结果不同: P(AB)=P(A)P(B): P(AC)=1/4=P(A)P(C)(不是 ...
- WPF 超长文本的来回滚动
原文:WPF 超长文本的来回滚动 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Vblegend_2013/article/details/8362 ...
- SSH框架的搭建与配置文件的书写格式
通常Java Web 开发的时候,我们一般会采用三大框框架的整合来架构,这样做主要是为方便维护.但是有时候会忘了一些配文件(*.xml)的格式头,这里主要就三大框架Spring.struts.hibe ...