- 主题:[转载]Linus Torvalds 称 C++ 是一种很烂的语言
你说的是没错啊。。王垠对于 java 异常也是类似的观点。
但是写起来实在不方便。
【 在 here080 (hero080) 的大作中提到: 】
: java的异常设计最起码是基本合理的。
: 你自己写的函数,会抛出什么异常,这是API设计的一部分。你不应该以一种“哥反正啥都不处理,我调用的东西有啥异常我就抛啥”的态度来对待。理论上你只有搞清楚你自己写函数对外能且应该抛出什么异常,你才能合理的处理你从底层接收到的异常:是处理掉呢还是转化成别的
: 写python(大工程)最大的痛点之一就是尼玛我调用的这个函数会抛出啥神奇的异常根本就无法提前搞清楚。等上线了发现BUG再紧急修补。
: ...................
--
FROM 124.72.119.*
太对了哈哈哈。
C++异常就是throw的人表示我不关心你会goto到哪里,反正我就是不爽了;
然后在调用的人看来就是我也不知道哪个底层函数的什么地方突然抽风蹦出一个goto,然后goto到了谁也不知道的地方,而且无法保证编译期间就catch了所有的异常。
C++异常的非强制性保证了你可以假装不知道有异常,但事实是你不仅不能假装不知道,而且你其实想知道也不能完全知道,你只知道你只能知道得不完整。
什么你说可以catch(...)?那就完美地破坏了bug现场,使得程序带病继续运行到谁也搞不清楚究竟发生了啥。
这种奇葩设定使得我只会在出错概率极高的场合使用异常(比如socket),并且只在极少量地方catch,并且绝对不往外扔。
【 在 here080 (hero080) 的大作中提到: 】
: java的异常设计最起码是基本合理的。
: 你自己写的函数,会抛出什么异常,这是API设计的一部分。你不应该以一种“哥反正啥都不处理,我调用的东西有啥异常我就抛啥”的态度来对待。理论上你只有搞清楚你自己写函数对外能且应该抛出什么异常,你才能合理的处理你从底层接收到的异常:是处理掉呢还是转化成别的
: 写python(大工程)最大的痛点之一就是尼玛我调用的这个函数会抛出啥神奇的异常根本就无法提前搞清楚。等上线了发现BUG再紧急修补。
: ...................
--
修改:yuanmo FROM 61.50.110.*
FROM 61.50.110.*
感觉 socket 这个地方不需要搞异常。用 -1 表示 recv() 失败了不是更好。
或许我们可以发明一个新语言,支持 checked exception,但是大多数情况下不使用。而不是像 java 那样,普遍地用。
【 在 yuanmo (栗子~~一毛一公斤) 的大作中提到: 】
: 太对了哈哈哈。
: C++异常就是throw的人表示我不关心你会goto到哪里,反正我就是不爽了;
: 然后在调用的人看来就是我也不知道哪个底层函数的什么地方突然抽风蹦出一个goto,然后goto到了谁也不知道的地方,而且无法保证编译期间就catch了所有的异常。
: ...................
--
FROM 124.72.119.*
失败原因呢?
【 在 hgoldfish 的大作中提到: 】
: 感觉 socket 这个地方不需要搞异常。用 -1 表示 recv() 失败了不是更好。
: 或许我们可以发明一个新语言,支持 checked exception,但是大多数情况下不使用。而不是像 java 那样,普遍地用。
:
--
FROM 76.126.252.*
不能光讲理论上,还得看看现实世界普通人写的java程序。
好了,大致分两派,一派是throws Exception,一派是throw new RuntimeException。
普通人没有能力把异常作为api设计的一部分,并且这样的程序也是支撑现实世界正常运转的一部分,这就是我的观察。
不管c,c++,go还是java,大部分程序的大部分函数里的错误处理,要么就是不管底层返回什么错误我照样返回(过程中处理好资源释放),要么就是不管底层返回什么错误我都返回同一个错误(把原错误包装在里面)。语言能帮助用户做好括号里的事就不错了。
【 在 here080 的大作中提到: 】
: java的异常设计最起码是基本合理的。
: 你自己写的函数,会抛出什么异常,这是API设计的一部分。你不应该以一种“哥反正啥都不处理,我调用的东西有啥异常我就抛啥”的态度来对待。理论上你只有搞清楚你自己写函数对外能且应该抛出什么异常,你才能合理的处理你从底层接收到的异常:是处理掉呢还是转化成别的异常还是直接不管抛出。
: 写python(大工程)最大的痛点之一就是尼玛我调用的这个函数会抛出啥神奇的异常根本就无法提前搞清楚。等上线了发现BUG再紧急修补。
--
修改:ilovecpp FROM 58.37.58.*
FROM 58.37.58.*
不矛盾。有IDE在,不懂的人可以直接不管让IDE来添加函数签名里的throws exception。IDE是现实世界的一部分。
【 在 ilovecpp 的大作中提到: 】
: 不能光讲理论上,还得看看现实世界普通人写的java程序。
: 好了,大致分两派,一派是throws Exception,一派是throw new RuntimeException。
: 普通人没有能力把异常作为api设计的一部分,并且这样的程序也是支撑现实世界正常运转的一部分,这就是我的观察。
: ...................
--
FROM 76.126.252.*
(过程中处理好资源释放),—— 这个程序员分析程序,释放上下文的资源,不难。处理全局的资源,java有何高招?还得程序员分析,往往没人分析。
(把原错误包装在里面)——这个程序员rethrow,没难度。
(程序状态没有副作用)—— 这个得程序员分析业务。几乎不可能。别说不分析,分析了也处理不到这个程度。因为真实世界的异常也不可能没副作用。
异常强安全的程序,要么是理论上,要么是足够简单,有限状态机。我遇见的程序
很少,我想来想去,chrome那种多进程,崩了拉起是极限了,没法更优。
版上贴过链接,说Bjarne参与的JSF不用异常,因为要实时性高。但好像一直没开发完。 能连续飞4个小时就不错了。要啥自行车。
【 在 ilovecpp 的大作中提到: 】
: 不能光讲理论上,还得看看现实世界普通人写的java程序。
: 好了,大致分两派,一派是throws Exception,一派是throw new RuntimeException。
: 普通人没有能力把异常作为api设计的一部分,并且这样的程序也是支撑现实世界正常运转的一部分,这就是我的观察。
: ...................
--
FROM 1.80.241.*