免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: OwnWaterloo
打印 上一主题 下一主题

[C++] 有效降低C++复杂性的方法 —— 百试百灵 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2011-11-30 12:52 |只看该作者
回复 20# asuka2001

虽然带来复杂性,但划分适当的话代价可能是合理的。

另外,不仅是可能总体的复杂性,很可能还增加了潜在的编译性能优化的余地。

论坛徽章:
0
22 [报告]
发表于 2011-11-30 13:03 |只看该作者
现在已经有两个C++层级了

C++ level 1
     Raw C code

C++ level 2
     Embedded C++ (EC++)

接下来再定几个?

论坛徽章:
0
23 [报告]
发表于 2011-11-30 15:31 |只看该作者
用disable不如用enable,范围不是整个工程,而是声明的头文件。

这样,任何一个模块想启用某个高级特性,就必须声明。比如启用多重继承,启用泛型,启用lambda等等。

这其实同时就意味着,一旦要打开某个高级特性,首先就要思考是否非它不可,或者至少是能大幅度降低开发难度。

并且还意味着,在管理较完善的公司,要打开某个高级特性,首先要经过某种QA流程,大家同意后方可开启;

最后,这个规定还意味着这个打开的特性是不允许传染的——就好像用了STL库并不一定会弄得你的代码里满是模板一样——这就可以有效避免有人写的代码太高端,以至于其他人写的东西没法和他配合问题。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
24 [报告]
发表于 2011-11-30 15:40 |只看该作者
本帖最后由 starwing83 于 2011-11-30 15:43 编辑
用disable不如用enable,范围不是整个工程,而是声明的头文件。

这样,任何一个模块想启用某个高级特性, ...
狗蛋 发表于 2011-11-30 15:31



    你牛逼,这样简直就是他妈的C++版本的《寂静城市》了……

UPDATE:哦,是寂静之城,马伯庸写的,祥瑞御免……

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
25 [报告]
发表于 2011-11-30 16:59 |只看该作者
恩,我也感觉enable比较好,至少不用操心哪里没关到。。。你要用某个特性至少还是证明自己对它已经有了解了

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
26 [报告]
发表于 2011-11-30 18:02 |只看该作者
嗯, enable貌似更好。

论坛徽章:
0
27 [报告]
发表于 2011-11-30 19:29 |只看该作者
恩,我也感觉enable比较好,至少不用操心哪里没关到。。。你要用某个特性至少还是证明自己对它已经有了解了
asuka2001 发表于 2011-11-30 16:59



    是的。


    事实上,C++在最初几年的红火之后,现在连C都搞不过了,这个事实就能说明很多问题。

(甚至,那些用C++的,相当一部分是用C的方式玩或者java的方式玩(前者如很多用C++但拒绝类或其它特性的,后者如很多用STL容器但拒绝指针的);只有很少一些团队核心级的、写通用库的有必要(但未必有意愿)用泛型。)






另一方面,可以这么想:

C会的,C++哪点不会?大家用的gcc/g++,不他妈就是个彻头彻尾的C++编译器吗?

为什么C++会的越多、能耐越大、做的越精致,退缩的人反而越多?



没错,你可以拿它当纯C用,你也可以拿它当Java式无指针的语言用;但你没法阻止另外一个非常牛X的人,拿它搞出一堆惊天地泣鬼神让你维护的欲哭无泪的GOD LIKE级的code。。。

并且,正如我之前反复说过的,这种GOD LIKE级的东西,由于C++特性之间的非正交问题,具有很强的传染性。这甚至使得使用者不GOD LIKE起来就没法用它的东西,而且越是GOD LIKE的代码越是如此。

反而是STL那帮子人,搞的STL用起来反而用不着GOD LIKE,至多打几个<>而已。



更要命的是,打开一个C++源文件,你完全不会知道自己将会遭遇怎样的“惊喜”,不知道它的作者,是STL作者那样的神人,还是某些3行代码给你几十个设计模式上百个委托外加若干匪夷所思的运算符重载的贱人。


而一个enable标志,就可以有效解决这个问题。
起码,打开一个源文件,你立马就能对其可能涉及的编码技术有一个了解,配合文件名和简短的功能说明,经验丰富的你,简直马上就能说出它的实现原理。



很久前,我在反击某些“进攻”C++的java-er时曾这样说:C++是父亲的工具箱。里面和你的小工具箱一样,有改锥、有扳手;但不一样的是,它里面还有硫酸、电锯、电钻甚至射钉枪。这些额外的家什非常危险,稍不留意就会造成严重的伤害,但它们很有用。

现在,反过来想,Java-er 或许是些没胆玩危险工具的乖小子;可是很多CPPer,实质上是些拿硫酸到处乱泼、举个电锯四处砍杀的坏小子。

所以,Linus 宁可用“把工具箱藏起来”的方式来拒绝坏小子(或者,其实是因为他自己就是个控制不住破坏欲的坏小子)

我之所以近年尽量不考虑启用C++特性,也是因为,控制自己的破坏欲,真的很难。而且这种“砍起来很爽”的东西一旦开头,就很难中途停下来。
——这就好像,把一堆东西放你包里,让你挑出不需要的,很难;但,把一堆东西放超市里,让你挑出需要的,很容易。

比如说,在linux下用c++,不就是把.c改成 .cpp 这么简单吗?这和enable有何区别?
gcc/g++不就用这种方式,把linux原来的、纯粹的c编译器彻底湮灭了吗?

用一个enable把这些东西锁起来,这和火车上的紧急刹车要涂上红色、罩上透明罩子、并且写上乱动罚款1000并追究刑事责任,性质上是一样的;甚至可能是C++真正代替C的一个重要前提。

论坛徽章:
0
28 [报告]
发表于 2011-11-30 20:21 |只看该作者
如果用了C++三年,还认为C++好的人,都是智商低下甚者弱智!

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
29 [报告]
发表于 2011-11-30 22:06 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
30 [报告]
发表于 2011-11-30 22:26 |只看该作者
回复 30# pmerofc

这里是想讨论这种强制性enable/disable特性是否可以缓解团队合作时程序员不可控的问题。

C++特性的用处什么的,可以另外开帖。不说其他地方,就只说CU论坛,很多特性我都已经负责过了。
另外,我上来是讨论的。也越来越倾向闲侃了。总之一直都不是来传教的。
让他人相信C++好用首先就不是一件利己的事 —— 对我没有半点好处。
其次还可能是一件损人的事 —— 认为这东西一无是处不屑学,总比认为这东西有好处但又学不会更让人心里好受吧?
得饶人处且饶人
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP