- 主题:[转载]Linus Torvalds 称 C++ 是一种很烂的语言
创建协程是很轻的操作,只要申请并填充一次协程的结构体内存空间就够了。
即使有已断开连接的连接,那也无非浪费一次协程的 yield 操作。用 go 写服务端,不需要像 c/cpp 那样拼极限的大并发。你看目前 go 写的应用,一般运行在内网,所谓的 API 网关,那也是先弄几个 nginx 顶住,不怕这种坏连接。
我不是在说服你用 go 写程序。。我只是告诉你一个事实,现在很多人已经用 go 写程序。
ps: 协程之间也是有同步原语的。具体怎么用,跟线程一样。
【 在 leadu (leadu) 的大作中提到: 】
: 异常处理路径不是指异常,是指那些else。比如api gateway上面的大量建连-请求-不等请求结束断开连接,这种情况如何节约服务器资源。
: 再说说你说的这个。
: 协程本身是在用异步伪装成同步,提升开发效率和程序健壮性。不把抛出异常伪装成同步,后台开发显然会遇到子协程一进去崩溃而父协程在傻等的情况,在协程之前的开发太常见了
: ...................
--
修改:hgoldfish FROM 140.224.34.*
FROM 140.224.34.*
不然这个异常要怎么设计比较好呢?
如果异常还需要特殊的语法,像 java 那样的话,程序员的负担会很重啊。
java 没法用普通的文本编辑器的最大原因可能是 checked exception 的设计。没有 IDE 就无法识别要在函数签名里面 throws 什么异常。
【 在 here080 (hero080) 的大作中提到: 】
: 其实说白了就是用返回值模拟了异常。
: 主要还是C++的异常设计得太难用。一个函数默认就可以随便抛异常,这谁顶得住?
--
FROM 112.47.122.*
你说的是没错啊。。王垠对于 java 异常也是类似的观点。
但是写起来实在不方便。
【 在 here080 (hero080) 的大作中提到: 】
: java的异常设计最起码是基本合理的。
: 你自己写的函数,会抛出什么异常,这是API设计的一部分。你不应该以一种“哥反正啥都不处理,我调用的东西有啥异常我就抛啥”的态度来对待。理论上你只有搞清楚你自己写函数对外能且应该抛出什么异常,你才能合理的处理你从底层接收到的异常:是处理掉呢还是转化成别的
: 写python(大工程)最大的痛点之一就是尼玛我调用的这个函数会抛出啥神奇的异常根本就无法提前搞清楚。等上线了发现BUG再紧急修补。
: ...................
--
FROM 124.72.119.*
感觉 socket 这个地方不需要搞异常。用 -1 表示 recv() 失败了不是更好。
或许我们可以发明一个新语言,支持 checked exception,但是大多数情况下不使用。而不是像 java 那样,普遍地用。
【 在 yuanmo (栗子~~一毛一公斤) 的大作中提到: 】
: 太对了哈哈哈。
: C++异常就是throw的人表示我不关心你会goto到哪里,反正我就是不爽了;
: 然后在调用的人看来就是我也不知道哪个底层函数的什么地方突然抽风蹦出一个goto,然后goto到了谁也不知道的地方,而且无法保证编译期间就catch了所有的异常。
: ...................
--
FROM 124.72.119.*