免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 52208 | 回复: 16

[C] libuv 是一个非常糟糕的, 垃圾透顶的库. [复制链接]

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11数据库技术版块每日发帖之星
日期:2015-08-30 06:20:00
发表于 2013-08-24 21:47 |显示全部楼层
不得不说, libuv 是一个非常糟糕的, 垃圾透顶的库.

为啥这么说呢? 因为 uv_write 允许 NULL 回调! 鼓励忽略 write 的返回值! 鼓励编写面条代码, 垃圾代码就这样被 libuv 鼓励出来了.

uv_write 为啥允许 NULL 回调呢? 因为 以前 libuv 的 uv_write 是没有回调也没有返回值的 , 你永远不知道发送成功了没. 后来大概作者意识到这个问题了, 就添加了 回调....

然后估计是为了方便代码迁移吧, 允许 NULL 回调, 这样原来的代码加个 NULL 参数就继续工作了 ......

这写库是写着玩的吧?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2013-08-24 22:06 |显示全部楼层
node.js才出来几天, 接口设计有问题也应该能接受.

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2013-08-24 22:08 |显示全部楼层
再说了, 为毛直接用libuv, 人家是为了做node.js, 顺便暴露个底层组件, 用libev,libevent才对.

论坛徽章:
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
发表于 2013-08-24 23:21 |显示全部楼层
libev貌似最近有了Windows native的CPIO接口……

不过libuv因为有node.js当小白鼠,应该还是稳定一些。

话说回来,人家才0.10嘛,接口都没固定的,好歹等到1.0再说吧,说不准哪天就把NULL回调的特性给remove掉了= =

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-08-24 23:50 |显示全部楼层
函数执行退出,数据可以不写完;数据写完,再执行回调。
他不就是要设计成回调吗?

论坛徽章:
0
发表于 2013-08-26 14:57 |显示全部楼层
"允许 NULL 回调"是它设计的,感觉不合理可以不用,用的人肯定是有自己的目的。 node.js已经很多项目是实际使用了。
另外,比如delete 一个NULL指针,肯定要崩的, c++编译器可没管这个,该崩就崩,有意见吗?
libuv应该目前最简洁的网络库,libev只支持linux, libevent在windows下iocp还不完善,另外epoll效率也不够最优。至于boost,ace等,相信google和ms不会没听过这它们名字的,既然不用肯定也有道理(ms版的redis也在用libuv)。
连MS自己都在用,所以尽管放心就是了。
对google和ms里的程序员还是要有信心的。

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
发表于 2013-08-26 16:27 |显示全部楼层
回复 6# sxcong


    C++明确规定delete一个null pointer没有任何影响, C明确规定free一个null pointer不发生任何动作。所以无论C还是C++在删除空指针时的行为都是安全的。

论坛徽章:
30
摩羯座
日期:2013-12-23 17:28:38牛市纪念徽章
日期:2015-07-13 11:35:582022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:57青铜圣斗士
日期:2015-11-27 17:45:3815-16赛季CBA联赛之天津
日期:2016-02-15 13:44:3615-16赛季CBA联赛之江苏
日期:2018-05-02 16:56:2715-16赛季CBA联赛之辽宁
日期:2018-08-08 13:41:1015-16赛季CBA联赛之深圳
日期:2018-10-02 18:05:0315-16赛季CBA联赛之天津
日期:2019-05-31 15:05:0615-16赛季CBA联赛之北京
日期:2022-06-30 13:34:1115-16赛季CBA联赛之同曦
日期:2022-07-06 19:33:5415-16赛季CBA联赛之吉林
日期:2022-12-28 14:16:22
发表于 2013-08-26 18:11 |显示全部楼层
本帖最后由 siseniao 于 2013-08-26 18:13 编辑

讨厌回掉的当然选择NULL了,就像malloc一样,你会检查返回指针为空吗,我就从来不检查,如果连内存都分配不了,检不检查有毛区别,有时候貌似是正确的东西都是脱裤子放屁

论坛徽章:
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
发表于 2013-08-27 00:20 |显示全部楼层
回复 8# siseniao


    有种东西叫做紧急垃圾回收,所以还是检查一下好,恩

再不济,检查一下扔个异常(C++默认就是这个,所以C++不需要检查)或者直接abort都行啊,这样出问题了至少可以搞到core看看是不是哪里内存泄露了。

通常是可以不检查,不过,软件就是10%的代码90%情况在跑,90%的代码在处理10%的特殊情况的东西,所以,忍一忍吧= =

论坛徽章:
30
摩羯座
日期:2013-12-23 17:28:38牛市纪念徽章
日期:2015-07-13 11:35:582022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:57青铜圣斗士
日期:2015-11-27 17:45:3815-16赛季CBA联赛之天津
日期:2016-02-15 13:44:3615-16赛季CBA联赛之江苏
日期:2018-05-02 16:56:2715-16赛季CBA联赛之辽宁
日期:2018-08-08 13:41:1015-16赛季CBA联赛之深圳
日期:2018-10-02 18:05:0315-16赛季CBA联赛之天津
日期:2019-05-31 15:05:0615-16赛季CBA联赛之北京
日期:2022-06-30 13:34:1115-16赛季CBA联赛之同曦
日期:2022-07-06 19:33:5415-16赛季CBA联赛之吉林
日期:2022-12-28 14:16:22
发表于 2013-08-27 09:02 |显示全部楼层
回复 9# starwing83

碎片回收不应该是操作系统或者系统策略负责的吗,应用层不应该越权干这种事,至于内存泄露,检测分配内存值我认为对于找出内存泄露毫无帮助
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP