- 主题:[转载]Linus Torvalds 称 C++ 是一种很烂的语言
在C++11以前的C++,确实有太多问题。
但是现在的C++,正确使用的话已经跟很多其它高级语言有类似的易用性了。但同时它又保留了像C一样实现底层功能的能力,并在大工程下面比C还快。
【 在 hgoldfish 的大作中提到: 】
: "LOL," was his response. "C++ solves _none_ of the C issues, and only makes things worse. It really is a crap language.
: "For people who don't like C, go to a language that actually offers you something worthwhile. Like languages with memory safety and [which] can avoid some of the dangers of C, or languages that have internal GC [garbage collection] support and make memory management easier.
: "C++ solves all the wrong problems, and anybody who says 'rewrite the kernel in C++' is too ignorant to even know that."
: ...................
--
FROM 76.126.252.*
写起来费劲只是一个小问题。
但是写起来费劲有可能会带来两个大问题。
1. 读起来也费劲。
2. 忘了检查错误
【 在 littleSram 的大作中提到: 】
: 这个文章很好啊
: 不过在我看来,check是优化,确实不错
: if err return
: ...................
--
FROM 76.126.252.*
其实这两个问题都可以解决。
1. 可读性问题。可以通过定义宏(这个算是少见的合理应用宏)
RETURN_IF_ERROR(Foo());
2. 忘记检查返回值。可以用Status类,然后用编译工具来保证如果忘记使用返回的Status值则产生一个错误。
可以参见absl::Status
https://abseil.io/docs/cpp/guides/status
【 在 littleSram 的大作中提到: 】
: 是可能带来这两大问题
: 但是有趣的是 if err return 对我来说却没有这个问题
: 1.这种范式避免了较深的逻辑嵌套,反而读起来简单
: ...................
--
FROM 76.126.252.*
其实说白了就是用返回值模拟了异常。
主要还是C++的异常设计得太难用。一个函数默认就可以随便抛异常,这谁顶得住?
【 在 ilovecpp 的大作中提到: 】
: go没有宏。
: C程序里面这个宏其实很多时候名字更短,叫C或者D。Rust里是?。总之希望它不那么显眼的人更多。
--
FROM 76.126.252.*
java的异常设计最起码是基本合理的。
你自己写的函数,会抛出什么异常,这是API设计的一部分。你不应该以一种“哥反正啥都不处理,我调用的东西有啥异常我就抛啥”的态度来对待。理论上你只有搞清楚你自己写函数对外能且应该抛出什么异常,你才能合理的处理你从底层接收到的异常:是处理掉呢还是转化成别的异常还是直接不管抛出。
写python(大工程)最大的痛点之一就是尼玛我调用的这个函数会抛出啥神奇的异常根本就无法提前搞清楚。等上线了发现BUG再紧急修补。
【 在 hgoldfish 的大作中提到: 】
: 不然这个异常要怎么设计比较好呢?
: 如果异常还需要特殊的语法,像 java 那样的话,程序员的负担会很重啊。
: java 没法用普通的文本编辑器的最大原因可能是 checked exception 的设计。没有 IDE 就无法识别要在函数签名里面 throws 什么异常。
: ...................
--
FROM 76.126.252.*
失败原因呢?
【 在 hgoldfish 的大作中提到: 】
: 感觉 socket 这个地方不需要搞异常。用 -1 表示 recv() 失败了不是更好。
: 或许我们可以发明一个新语言,支持 checked exception,但是大多数情况下不使用。而不是像 java 那样,普遍地用。
:
--
FROM 76.126.252.*
不矛盾。有IDE在,不懂的人可以直接不管让IDE来添加函数签名里的throws exception。IDE是现实世界的一部分。
【 在 ilovecpp 的大作中提到: 】
: 不能光讲理论上,还得看看现实世界普通人写的java程序。
: 好了,大致分两派,一派是throws Exception,一派是throw new RuntimeException。
: 普通人没有能力把异常作为api设计的一部分,并且这样的程序也是支撑现实世界正常运转的一部分,这就是我的观察。
: ...................
--
FROM 76.126.252.*