免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 23577 | 回复: 115
打印 上一主题 下一主题

哎,被惦记了…不冒泡对不起观众…跟风一把,教你们如何技术性吐槽C++ [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-30 13:33 |只看该作者 |倒序浏览
本来潜水很久了,10月份改了签名想show一下。
11月电脑坏了,修好了之后又没激情了……
但最近几天接二连三地被想念……   还让不让人潜水啊?


喷C++成风、成流行、 成时尚……  但你们敢喷得有技术含量一点吗?
教你们一个C++的死穴, 以后喷也有底气一些。
当然, 打算继续无脑喷, 继续秀下限也请自便


这无可奈何的死穴就是: C++没有ABI……
于是什么template, 什么exception, 什么class, 什么virtual function…… 统统都局限在一个link target,比如exe/out/dll/so什么的。

要想跨编译器? 可以的,后果自负就是了。
记得某个比较有名的库, OGRE? 仅仅因为 visual studio 是否是SP1就可以导致crash……


这是阻碍exception被实际使用的技术性原因之一。
如果打算二进制兼容, 又想使用exception, 就只能:
内部使用exception, 包括将调用的外部函数返回的status转换为exception, 以及对外将exception转换为status……
这种代码一点趣味都没有……
我说那些拿着 google coding style就开喷的, 这文档你们到底看了还是没看?


丢失上下文啊什么的真不是理由。 因为status同样会丢。因为E不能完成S也不能完成的事, 就说E不好? 这是什么逻辑啊……
要额外手工地记录上下文? 有办法的, 比如boost exception
我倒是好奇用 status 该怎么办啊怎么办……

但boost exception其实我并不看好。 这涉及到一个问题: 记录上下文意味着什么?
就拿文档中Motivation里面的例子来说, 为什么只记录filename,"foo.txt" 而不记录 filemode "rt" ? 万一底层其实需要的是binary mode打开呢?
丢了这个信息, 更上层又怎么知道问题出在这里?  也就是说, "rt" 也需要一并记录。
因此, 所谓的需要上下文才能处理错误, 这个上下文其实就是C与C++都不提供的stack trace……
与其boost exception,并且代码又变为许多地方都要try catch, 完全丢失了exception的优势…… 还不如让语言直接提供可选的stack trace。

论坛徽章:
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
2 [报告]
发表于 2011-11-30 14:10 |只看该作者
沙发,最近纯C中,C++玩不动也不想玩了。

论坛徽章:
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
3 [报告]
发表于 2011-11-30 14:17 |只看该作者
好吧,也许应该学java啊,java啊,java啊啥的。。。

java不是号称一次编译,世界运行么?

论坛徽章:
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
4 [报告]
发表于 2011-11-30 14:18 |只看该作者
或者学一下Lua?

论坛徽章:
0
5 [报告]
发表于 2011-11-30 14:22 |只看该作者
回复 4# starwing83


    lua有没有比较好的错误处理,比如出错时候打印调用栈什么的

论坛徽章:
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
6 [报告]
发表于 2011-11-30 14:25 |只看该作者
回复  starwing83


    lua有没有比较好的错误处理,比如出错时候打印调用栈什么的
reiase 发表于 2011-11-30 14:22



    debug.traceback()

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
7 [报告]
发表于 2011-11-30 14:29 |只看该作者
貌似还没哪个编译执行的高级语言把abi作为语言规范的一部分规定

论坛徽章:
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
8 [报告]
发表于 2011-11-30 14:35 |只看该作者
貌似还没哪个编译执行的高级语言把abi作为语言规范的一部分规定
koolcoy 发表于 2011-11-30 14:29



    不会啊,Python貌似就有ABI规定,另外C虽然没有,但是其ABI也是实际上的工业标准……

论坛徽章:
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
9 [报告]
发表于 2011-11-30 14:36 |只看该作者
abi 到底是啥意思? 就我所知, abi 应该是function call 时寄存器的使用规定, 和语言没关系, 是编译器要关心的事情

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
10 [报告]
发表于 2011-11-30 14:38 |只看该作者
不会啊,Python貌似就有ABI规定,另外C虽然没有,但是其ABI也是实际上的工业标准……
starwing83 发表于 2011-11-30 14:35


python是编译执行的么{:3_195:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP