最近,Linux之父Linus Torvalds在事隔三年之后,又一次炮轰C++语言(见http://www.realworldtech.com/forums/index.cfm?action=detail&id=110563&threadid=110549&roomid=2 )。在国外技术社区掀起新一波的批判C++语言的狂潮。国内技术社区也不甘清净,csdn在这里(http://news.csdn.net/a/20100612/218785.html)也有非常热烈的讨论。国内C++的大牛网易的云风也加入论战(http://blog.codingnow.com/2009/01/the_new_c_standard.html)。

总结目前各方对C++的批判,主要观点如下:

1. 做系统底层编程(比如linux内核、网易游戏引擎),C++和C相比没有任何优势。因为底层编程不需要C++那么多的“面向对象抽象”

2. 做上层应用编程(比如CRM、ERP等企业应用),虽然需要“面向对象的抽象能力”,但C++过多的语言机制导致C++语言陷阱太多(特别是稍不留神就有内存泄漏),因此应该选用提供垃圾收集机制的语言。(Linus没说,但是基本指的是C#、Java几个主流语言)。

虽然这种说法有些太过绝对,但是firelong认为还是相当有道理的。特别是第2点,因为以前我们公司就有一个C++写得CRM项目,刚开始老板还让我们在C++上继续改,改了将近半年,全体人员都决定放弃了,转到现在的C#上。Linus这种观点出来后,C#社区好像很受鼓舞,我甚至在某个论坛上看到一些C#程序员在欢呼C#万岁了。但是firelong的问题是,C#语言真的完美了吗?仔细思考这个问题后,firelong认为并非如此。事实上C#语言现在一路狂奔,有点重蹈当年C++语言发展的覆辙。firelong将不成熟的思考写出来,与大家共同讨论。

firelong认为C#目前可能重蹈C++语言覆辙。微软从2002年C# 1.0开始,到2010年8年时间推到C# 4.0,平均每2年一个新版本。其中属于重大的语言特性有:泛型、Lambda表达式与linq、dynamic动态特性、并发编程。除了重大语言特性外,还有很多很多技巧语法。微软这样一路狂奔,只要是想出来的cool点子,都往C#语言里面加。 很多程序员也很追求cool的效果,瞧瞧看,我们C#语言又有XXXXXXXXX功能,你们Java、Python  XXXXX有吗?

但问题是“新特性越多,语言就一定越强大吗?”,我们真的需要那么多cool特性的编程语言C#吗?

C++语言走到今天的墙途末路,众人踩踏的地步,跟C++语言过于臃肿的功能特性密切相关。 firelong这些年的编程经验表明,语言新特性对语言并非一本万利,而是可能会带来很多伤害:

1. 新特性加重了编译器的编译负担,编译效率低下。大家试试很多linq项目的编译速度就知道了。

2. 新特性加重了运行时的运行负担,运行效率低下,大家试试很多dynamic动态新特性的运行效率就知道了。

3. 新特性加重了程序员的心智负担,在写代码时必须考虑很多功能背后的影响,“顾前思后”就是C++程序员最后抛弃C++的一个很大的原因。大家回想一下现在在VS2010底下写C# 4.0程序,还有当初写C# 1.0程序的流畅性了吗?

有的朋友可能会说,那是firelong水平低,对这些新特性没有掌握好,所以要批判C#新特性。首先firelong水平不一定低(带一个10人的C#队伍已经近2年)。其次水平再高,也有心智负担。看看Linux之父Linus Torvalds和网易的云风等诸多国内外大牛批判,他们可都是响当当的C++技术大牛,难道是对C++各种特性不熟练所以才批判C++?

综上所述,firelong对微软C#编译器组有以下建议:
保留C#以下功能:

1. 面向对象

2. 接口

3. 构造器、字段、方法

4. 垃圾收集

5. 异常

6. 并发支持——这是firelong唯一投票支持的新特性,因为它在今后的项目太常用了。

7. 和其他语言的互操作(类似P/Invoke)——那些不适合C#做的,用其他语言来做,然后与C#互操作。

然后将研发精力投入C#语言的代码优化和内存收集优化上,让C#成为一门效率超高的语言,比那些华而不实的新特性重要得多!

删除C#以下功能:

1. 委托和事件(这些都可以用接口来做,参考Java)

2. 反射(反射用处很小,如果真想用反射,请用其他语言)

3. 特性(也可以用接口做,C++没有特性不是一样活得很好)

4. 属性、索引器、析构器(都是方法)

5. JIT编译(直接编译成native代码,完全没必要JIT,微软当初JIT是因为承诺跨平台,但是现在C#真的跨平台了吗?还是Windows上跑,Mono这种阿斗别提了。)

6. 泛型(没必要,用的很少)

7. Linq(去掉,还是用Sql语句+存储过程来的实际)

8. dynamic(去掉,真想dynamic,让ruby、python, f#等去做吧)

9. 还有更多。。。。大家来补充

firelong说得不一定对,但是firelong相信一个简洁、高效的语言,比那一堆华而不实的“新特性”要有用得多——语言最后的威力是“开发软件”,而不是“比拼新特性”。

为什么C语言至今仍是编程语言的王者?它满足了简洁、高效!而不是它有很多新特性。如果C#不这么做,将会有其他语言埋葬C#。就像C慢慢埋葬C++,Ruby慢慢埋葬Java一样。

当然微软C#编译器组不会听firelong的建议,但是如果这样下去,C#几年之后将比现在的C++更为臃肿,那时候批判C#的就不止firelong一个人了,恐怕也不仅仅是批判了。

转载于:https://www.cnblogs.com/vvv999vz/archive/2011/01/22/2125367.html

C,C++,C#的点评相关推荐

  1. 实时实例分割的Deep Snake:CVPR2020论文点评

    实时实例分割的Deep Snake:CVPR2020论文点评 Deep Snake for Real-Time Instance Segmentation 论文链接:https://arxiv.org ...

  2. 给手绘图着色(添加颜色或色彩):CVPR2020论文点评

    给手绘图着色(添加颜色或色彩):CVPR2020论文点评 Learning to Shade Hand-drawn Sketches 论文链接:https://arxiv.org/pdf/2002.1 ...

  3. ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测

    ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测 STD: Sparse-to-Dense 3D Object Detector for Point Cloud 论文链 ...

  4. CVPR2020论文点评: AdderNet(加法网络)

    CVPR2020论文点评: AdderNet(加法网络) 论文原文链接:https://arxiv.org/pdf/1912.13200.pdf 源码链接:https://github.com/hua ...

  5. CVPR2019:无人驾驶3D目标检测论文点评

    CVPR2019:无人驾驶3D目标检测论文点评 重读CVPR2019的文章,现在对以下文章进行点评. Stereo R-CNN based 3D Object Detection for Autono ...

  6. CVPR 2020几篇论文内容点评:目标检测跟踪,人脸表情识别,姿态估计,实例分割等

    CVPR 2020几篇论文内容点评:目标检测跟踪,人脸表情识别,姿态估计,实例分割等 CVPR 2020中选论文放榜后,最新开源项目合集也来了. 本届CPVR共接收6656篇论文,中选1470篇,&q ...

  7. iphone如何信任软件_你还在用大众点评吗?评价软件失去信任还如何活下去

    合并五年之后,大众点评终于在公司名称中消失了.9月11日,美团点评在港交所发布公告称,公司名称拟简化为美团,美团点评也最终成为了历史.有知情人士表示,今年7月美团总部前台大厅的公司名称中就已经没有了点 ...

  8. endnote能自动翻译吗_人工智能能翻译古文吗?跟小编点评专业翻译PK人工智能翻译...

    我们知道,自从基于统计而不是语义分析的人工智能翻译软件出现以后,人工智能在翻译领域取得了巨大的成就.现在很多人搬运外文资料发表就是直接采用机器翻译,虽然还是能被看出机器翻译的痕迹,比较生硬,不过可理解 ...

  9. 看大众点评如何通过实时监控系统CAT打造7*24服务

    为什么80%的码农都做不了架构师?>>>    看大众点评如何通过实时监控系统CAT打造7*24服务 2015-06-08  尤勇  高可用架构 https://github.com ...

  10. 大众点评数据平台架构变迁

    2019独角兽企业重金招聘Python工程师标准>>> 最近和其他公司的同学对数据平台的发展题做了一些沟通,发现各自遇到的问题都类似,架构的变迁也有一定的相似性. 以下从数据& ...

最新文章

  1. 旷视砸20亿进军AIoT,发布国内首个机器人协作大脑河图
  2. 细说SSO单点登录(转)
  3. 罗森伯格荣获2015年度中国数据中心优秀供应商与中国十大布线品牌两项大奖
  4. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...
  5. linux 串口中断_1600字干货 | 大佬讲Linux启动流程(内含福利)
  6. Windows应用商店下载安装Ubuntu
  7. DIY 3.5毫米/MMCX接口的耳机线(无麦)
  8. matlab直方图匹配,直方图匹配 histogram match
  9. 几个LabVIEW软件欢迎页面
  10. 学习笔记61—兴趣阅读之经济学
  11. [OpenAirInterface实战-18] :OAI 软件无线电USRP B200/B210/X300/X310/N300/N310/E310比较
  12. Study「Photoshop」:勾线图
  13. vba根据列名获取列号 获取总列数 求和
  14. PMP/高项 05-项目进度管理
  15. 有同学问我Java工程师怎么入门?我马上甩出C认证模拟测试推荐给他!
  16. 【第七章】 C语言之牛客网力扣刷题笔记 【点进来保证让知识充实你一整天】
  17. 智慧工地系统_成都智慧工地平台
  18. opensips安装教程
  19. Ethereum Architecture : 以太坊架构
  20. aden -接球游戏 2.0

热门文章

  1. c++五子棋_Java五子棋实现
  2. 【读书笔记】练习的心态
  3. docker挂载本地文件
  4. CentOS挂载U盘
  5. 说说FATFS文件系统(转)
  6. 双向链表简单实现及图示
  7. 串口协议的制定以及串口中怎样接收一个完整数据包的解析
  8. 详解C++代码反汇编后的堆栈寄存器EBP和ESP
  9. oracle locked timed,Oracle里面的用户smsdb无法登录 LOCKED(TIMED)
  10. 获取顺序容器vector,deque,string和array的首尾元素的方法有四个