免费注册 查看新帖 |

Chinaunix

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

C++ 这孩子 是不是误入歧途了? [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
21 [报告]
发表于 2011-11-30 02:28 |只看该作者
本帖最后由 OwnWaterloo 于 2011-11-30 02:30 编辑

回复 19# zylthinking

>> 语言怎么简洁易懂怎么来, 只要能不降低性能; 剩下的让程序员自己搞定吧。

我前面回复里提到的: 解决问题可以有很多方法。
上面的bits_of, C可能就会交给语言之外的autoconf什么的完成了。

C++03让程序员可以使用语言自身完成这个事。
一旦打开了这个魔盒, 无论实现方式多么不招人喜欢, 肯定就会有人这么干……

模板计划内的使用只是提供类型无关的算法, 被这样泛滥的用于编译时各种计算是语言设计者意料之外的事
C++11就提供了招人喜欢的方式, 让模板干它应该干的事。



再比如, 许多与bit相关的算法, 可以看到这样的注释:
int x = 0x15; /* 10101 */

这绝对可以完成工作, 而且我认为这种程度已经可以接受了。
但肯定有其他C++03程序员自发地, 或者在一本很著名的书(貌似就是是C++ template metaprogramming) 的怂恿下, 会这么干, 也肯定会招致许多批评:
int x = binary_literal<10101>::value;

C++11 可以自己定义literal了, 可以预见下面的自定义literal肯定会被优先实现的。
int x = 10101_b;

论坛徽章:
0
22 [报告]
发表于 2011-11-30 02:43 |只看该作者
回复 7# windyrobin

我觉的 c++11 会加剧 C++ 阵容的分裂。

现在 c++ 使用者有直接当C用的,有OO的,也有 GP/FP 的,引入C++0x 之后估计最后最后一类使用者会增多。

论坛徽章:
0
23 [报告]
发表于 2011-11-30 02:51 |只看该作者
回复 12# OwnWaterloo


    呵呵,只是看着头像随便称呼一下。waterloo也是夜猫子啊。

我之前做过C++03的语法分析,所以对语法比较熟悉,特别是primary-expression和declarator的归约冲突,记忆犹新啊,后来看gcc,发现它强制优先尝试primary-expression,如果失败了(比如identifier没声明)再考虑declarator。目前在考虑模板推导的实现过程,貌似很复杂。

的确,C++11增加的许多特性都是为简化表达设计的,以前的许多奇淫巧计都可以退休了。那些增加的特性需要一段时间消化,其实静下心来多思考一下,也没想象中俄那么复杂。要静不下来,可以找waterloo给我们讲解一下。我认为真正看到新白皮书要拍案而起的应该是那些写编译器的人,又有一堆东西要改。看gcc代码写得那一团浆糊(gcc的构架还是很不错的,代码和细节设计真的不敢恭维,linux内核的代码质量明显高出一截),就知道又有人睡不着觉了,听说gcc4.7的bug巨多,那也是情理之中的。倒不是质疑写gcc的人的水平,而是编译器本身真的太复杂了,而增加一个特性就有可能需要结构性调整,不可能像操作系统那样始终维持模块之间的清晰划分。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
24 [报告]
发表于 2011-11-30 02:56 |只看该作者
template 我承认c确实做不到相同效果, 但一个问题是, template 真的起到了什么作用吗?
STL, 或者 boost, 将容器和算法脱离, 算是一大成果了; 但其实这些容器及算法也是可有可无的, 你不能以方面来否认他们的可替代性。 最后, 所谓容器算法分离, 最终起到的效果也就是让人少些几行代码。
zylthinking 发表于 2011-11-30 01:59


我需要一个类似 vector 的东西, 实现一个。 (这里我就不说类型了, C里面容器要类型无关也不算太麻烦, 就是转型写起来很烦……)
需要排序, 实现一个; 需要稳定排序, 实现一个; 需要部分排序, 实现一个; 需要求交、并, 实现一个……
然后, 又需要类似 list 的东西, 实现一个; 需要各种排序、 各种操作, 分别实现……
然后, 可能有需要类似 deque 的东西, 实现, 实现, 实现……

可替代性还是我上面说的, 解决问题本身与寻求解决问题的方法。
这肯定是可替代的。 但不是解决问题的一般方法

排序就是排序, 容器就是容器, C++允许程序员分别实现 N+M , 而不需要实现 N*M 。
寻找解决问题的一般方法本身就是一种价值。 不需要真的遇见各种可能性了才体现出其价值。



exception 就算了, 我始终不明白 exception 比返回值好到哪里去, 连一个 list.push_back都要 try catch 才算万无一失的东西, 用起来真是麻烦透顶。
zylthinking 发表于 2011-11-30 01:59


返回值的问题是,即使你没法处理这个错误,也得写一段代码去检查,然后再将这个错误代码继续往调用链的上层返回。
上层如果依然不能处理, 还是得继续检测, 继续往上返回, 直到最终被处理, 或者被忽略……

而使用exception机制,是当确实对某种exception感兴趣,能够处理它发生时的情况,才需要写try catch...
不会连一个 list.push_back 都去 try catch 的……
否则,如果不能处理,就让它自动地向上传播 —— 当然要保证代码异常安全 —— 自动地找到某个可以处理的地方, 或者最终被main里写的一个try catch all 抓住。

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

>> 呵呵,只是看着头像随便称呼一下。waterloo也是夜猫子啊。
被误会习惯了……
可能因为这里是技术论坛,所以顶着萝莉头像的大叔不多见……
也不是网络游戏,装ry的也不多见

>> 我之前做过C++03的语法分析,所以对语法比较熟悉,特别是primary-expression和declarator的归约冲突,记忆犹新啊,后来看gcc,发现它强制优先尝试primary-expression,如果失败了(比如identifier没声明)再考虑declarator。目前在考虑模板推导的实现过程,貌似很复杂。

我想做C的语法分析……
因为感觉那些传统的ctags,cscope工具弱爆了……

弱爆了有些夸张……  要用也能用, 但就是各种蛋疼……
不过实力不够……  而且又很懒……  一直没能动手……

C++语法分析更是想都不敢想……


>> 的确,C++11增加的许多特性都是为简化表达设计的,以前的许多奇淫巧计都可以退休了。

所以说嘛……  说C++11复杂是因为没见过C++03可以写得多么脏……   也就无法体会C++11带来的清爽感觉
我只能侃……  真要讲解,得找幻の上帝……


>> 我认为真正看到新白皮书要拍案而起的应该是那些写编译器的人,又有一堆东西要改。

是啊……  自己代码写得爽也是建立在他们的不爽上…………
其实做着这种不图名不图例的工作, 应该也不会真的不爽吧? 实现了应该还是有成就感的?

论坛徽章:
0
26 [报告]
发表于 2011-11-30 09:00 |只看该作者
回复 15# OwnWaterloo


    你竟然说“ object-oriented 就一流俗, 俗不可耐”,你就是一个2B+3B=5B

论坛徽章:
0
27 [报告]
发表于 2011-11-30 09:20 |只看该作者
本帖最后由 cppout 于 2011-11-30 09:23 编辑

我看 OwnWaterloo  就是一只只会记点文字,人云亦云,没有真才实学的鹦鹉,适合在王八朝当个教师,忽悠忽悠一些少不更事的学生。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
28 [报告]
发表于 2011-11-30 10:32 |只看该作者
template 我承认c确实做不到相同效果, 但一个问题是, template 真的起到了什么作用吗?
STL, 或者 b ...
zylthinking 发表于 2011-11-30 01:59


你没领会到异常的精髓啊,异常的精髓在于什么时候try/catch。如果你每个函数调用都try/catch还用异常做甚{:3_188:}

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
29 [报告]
发表于 2011-11-30 10:33 |只看该作者
回复  OwnWaterloo


    你竟然说“ object-oriented 就一流俗, 俗不可耐”,你就是一个2B+3B=5B
cppout 发表于 2011-11-30 09:00


引用一句清茶的名言“小屁孩一边撸管去”

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
30 [报告]
发表于 2011-11-30 10:33 |只看该作者
回复 20# OwnWaterloo


>>感到复杂应该是因为你还没了解C++03的复杂。 了解了C++03的复杂就会觉得C++11简单了。
顶这句
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP