免费注册 查看新帖 |

Chinaunix

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

[C++] OwnWaterloo此人是何方神圣? [复制链接]

论坛徽章:
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
11 [报告]
发表于 2013-12-20 00:41 |只看该作者
回复 10# windoze


    这个是C++11?

论坛徽章:
0
12 [报告]
发表于 2013-12-20 00:46 |只看该作者
windoze 发表于 2013-12-20 00:17
回复 1# sqfasd

不考虑具体情况直接“禁止”,这是天朝有关部门的作风。


1.我觉得你从一楼应该看不出我们不考虑具体情况直接“禁止”吧。。。
2.你再回头看看6楼的话
3.天朝有关部门并不是不考虑具体情况就直接禁止的,只是他们考虑的原则不合你的意罢了
4.我只是说从这个规范“获益良多”,并没有说让我学会正确的做事,从来没有一本书或一个人能让我学会如何做正确的事,更何况一个规范而已。
5.有差距就不能争了吗,只要有理就可以争。。。。能说服我,我就又学习到了。

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

带有所谓的“高级”控制流程的绝大部分语言和C交互时都会有同样的问题。不仅仅是C++而已。

如果说C++有什么特殊的地方可能就是:
1. 它和C交互太容易了反而让人不觉得这是语言之间的协作并且以此为理由对C++各种喷。
2. C和C++都是语言规范于是就有各种实现。 如果说有什么语言在这方面比C++更容易:
a) 这语言本身就是实现并且没有其他 decent alternative implementations 可供选择。 这种情况下将C++也降级到某个具体的实现会不会一样轻松?
b) 这语言本身是规范并且像C++那样有各种实际上真正可用的各种实现。 这种情况下该语言的规范还真能在高级控制流程上做到比C++更容易地与C交互?
如果两个问题之一是否, 那这样的语言我还真想见识一下。

另外C里本身就有很多“高级”控制流程。 在C里使用高级控制流程之后与其他语言交互不比C++里使用异常然后与C交互产生的问题少。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
14 [报告]
发表于 2013-12-20 00:52 |只看该作者
fender0107401 发表于 2013-12-19 23:02
万恶的骆驼命名法。。。

能改的我都改了。。。 不能改的要么是不常上。。。 要么是像CU这样不许改。。。

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
15 [报告]
发表于 2013-12-20 00:57 |只看该作者
好久没看到这个画面。。恩。。。好萌。。。

论坛徽章:
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
16 [报告]
发表于 2013-12-20 01:01 |只看该作者
回复 13# OwnWaterloo


    所以遇到边界情况就只好全部不用了……毕竟还是需要C来交互的。

你说的这两点的话,Ruby有标准而且不止一个实现,不过貌似没宣称和C交流方便(甚至我还不清楚这个货有没有高级控制神马的),Python有多个实现但是没标准(PEP神马的算标准么……),Lua有标准但是只有一个实现(LuaJIT算不算= =),另外Lua和C++交流一样麻烦而且不兼容,LuaJIT是个例外,他在二进制实现层面对各种不同的高级控制进行支持,甚至还有SEH的支持,不过后果显然就是各种见招拆招了= =

总的来说,如果有边界问题(比如我现在用C++干活但是导出C接口),那还是别把异常混进去的好,当然sjlj什么的也是反之亦然了……

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

你说的一定是签名吧?

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
18 [报告]
发表于 2013-12-20 01:13 |只看该作者
回复 17# OwnWaterloo


    恩。。还有对话神马的。。以及。那啥那啥。。。。。

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
19 [报告]
发表于 2013-12-20 01:47 来自手机 |只看该作者
base和util这两个词有什么魔力?为什么放在里面的东西就不能抛出异常了呢?不管内容先定规矩,这不就是天朝作风?
如果你们担心低手把程序搞乱,如何不让低手进入团队才是当务之急,而不是把所有人都拉到低手的水平线上。

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

我记得原文是在说C++里异常怎样怎样。 不记得有没有提到C++的异常与C交互会怎样这样。
不过既然被提到了于是想指出高级控制流程与C交互的问题不是C++独有的。 反而C++里处理这个问题还算比较容易的。 如果后续有人想以此作为理由喷C++完全是站不住脚的。
当然如果还要人想继续无脑喷。。。 面子是别人给的而脸是自己丢的。

至于C++本身里的异常怎样怎样。。。  都没那个心情讨论了。。。 都什么年代了还在讨论C++异常。。。 又不是什么新鲜和高级玩意。。。
换种说法是我有心情讨论的对谈异常变色的人来说完全是黑魔法了。。。  鸡同鸭讲。。。

抛开C++异常本身。 不管是10年左右那篇博客还是现在, 我瞧不起并且以前会去喷而现在没那个精力的是这样一类人。
他们真是被各种自己搞不懂的玩意给吓傻了。 随后采取的态度不是真正静下心用自己的大脑去分析而是找各种“Liuns怎么说”、“Google怎么看”并以此来安慰与逃避自己的无能。
而且Linus的话语本身。。。 说好听叫富有感染力说难听就是也就是喷。。。Linus和Google的始终是他们在他们自己的情况下采取的做法而不是普适的。 对放弃自我思考而将这种权利托付给他人的人。。。 多说无益。。。


对单一或者参考实现来说。 Ruby,Python,Lua里的高级控制流程可以与C很方便的交流?
比如 "R/P/Lf -> C -> R/P/Lg" 。 R/P/Lg里非局部向上不可逆跳转可以直接绕过C到R/P/Lf?
那具体到某个C++实现的时候 "C++f -> C -> C++g" 是否可以做到C++g抛出的异常不经过特殊处理直接在C++f里抓取到?
我不知道具体答案。 但我觉得这样的比较才是公平的。

对多种实现来说。 {J,Iron} x {Ruby,Python,Lua} 的组合 "R/P/Lf -> J/Iron -> R/P/Lg" 里 R/P/Lg 抛出的“异常”能被R/P/L/f 接住是应该的。 因为J/Iron里本身就有异常。
而{C,J,Iron} x {Ruby,Python,Lua} 的组合 "R/P/Lf -> C -> R/P/Lg" 里 R/P/Lg 抛出的异常要被 R/P/Lf 接住? 而不需要在g里抓取所有然后转换成状态码返回给C?

这对J,Iron啥啥的来说又有点不公平。 谁让C++有许多native实现呢。
至于C++有这么多实现是不是好事我也没有明确观点。 但因为它的选择多了于是不能在写出在所有实现里都能直接向模块外抛异常而批评异常我依然觉得这不公平。

我也赞同“跨边界用异常是作死”的观点。 除非宿主环境本身就支持。

我也不知道“标准”到底应该怎么定义。
C++的各种实现和在它的宿主环境交互的时候都有很一致的做法。 比如#include后就可以将C的各种库拿来用。extern "C" 将class/struct包在struct甚至是一个struct*里并实现一些包装函数把异常全部转换成状态码, 将模板具现化之后C++实现的库又可以在C里用。
Ruby,Python,Lua在JVM和.net上的各种实现是否只是有相同的语法甚至相近的语义但在访问宿主环境时就有区别了?
反正Clojure{JVM,JS,dotNET}是这样。 区别不多但就是存在。 而且最麻烦的是宿主环境里的各种库根本就不一样。 我相信这点上R/P/L在JVM和dotNET的实现也是一样的。
C++的各种主流实现是为了在同一个宿主环境下使用而它们是为了在不同的宿主环境下使用。

PS: silj是什么? LuaJIT 里 f -> C -> g 。 g里面可以直接error,yield什么的到f?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP