Re: [讨论] 为什么不要用c++写网站

楼主: hizuki (ayaka)   2024-06-21 01:29:31
※ 引述《Lordaeron (Terry)》之铭言:
: CGI 这东西,看了这么多人回,都没人讲出来,表示这边的都是高手了。
: 资O会,以前某套内部的系统是CGI 当底的,后面接的是C。
其实也没有那么陌生,经历过php, Rails时代的人都有被cgi折磨过
只不过现代server side都转向JavaEE那个样子,类似Asp.net那样依附个CGI还是
蛮少见的。
现代的web无论是spring还是go那边都是走向自己从network connection开始管。
(我知道Spring有内置Tomcat)
: 所以, 在这种基本上是I/O bound 的工作面前,用以CPU bound 为强项的语言。
: 是不是大材小用了?
其实C/C++这种可以编译为native code的还是快,但是一般的编写方式用用不上。
网络连线其实没有那么burst的,一堆时间都在idle,不然poll(), coroutines发明
出来做什么。也毕竟是HTTP/2以前的连线非常没有效率,每段msg,先是废话一堆。
gRPC也只是把header的废话个压缩掉。
这也是为什么有javascript来拉json这样的东西出现,web中一堆没有用的资料都是
css这样的东西,真实有用的资料用类似out of band的手段丢一丢还比较快。
就算这个protocol进化到gRPC protobuf那么没有浪费,抱歉现在的socket编程根本
跳不开CPU copy,从Transport layer过来那边kernel给你copy到userspace去,
然后reply的时候又userspace 给copy到kernel去包一包。
我前一段时间想弄个VPN程式看到这边都要吐血了,是有DMA方案啦,DPDK。
没几个平台支援,想要部署到Android或者iOS都不可能。
: 但当我看到它每一个取char * 传进来的字串长度是用sizeof 时,就该明白....赞啦。
: 还好它只是检查它长度是否大于0。
native code的东西对这种memory boundary就很烦,有debug的人会发现,比如在
一个64bits memory的OS上,两个32bits变量我只watch一个,结果旁边variable
动一下,我这边给拉起来。
string判断size一不小心没有null terminator就crash了,string类的function
用之前一定要看看有没有n version, strnlen()就解决问题了没有?
在ptt这样不支援UTF-8的可没有这种好事。
Jave就没有这种烦恼了,也没有Pass by reference这样这的烦恼。
写C++的时候要经常看看是不是move还是copy这种屁事.
: 推 alihue: 推,其实现代 jvm 速度已经没有那么慢了 06/20 08:24
: → superpandal: jvm占用内存阿 外加某些工具启动龟速 运作也马乎也 06/20 10:05
: → superpandal: 没什么优势 06/20 10:06
ART讲内存处理不好是还可以,GraalVM就没这个问题了
至于ready time这个您有load过一堆c++ libraries,要处理symbols也很慢
: 推 brucetu: c++ compile真的是很耽误开发 06/20 11:10
: 推 tsaigi: sizeof XDDD 很有画面 06/20 12:35
: 推 qwe78971: 确实 每次compile 也超耗时 06/20 13:51
C还好,C++真是痛苦,template每次展开都是毁天灭地般的时间。
还好有更糟的rust
作者: superpandal   2024-06-21 02:05:00
graalvm有反射问题阿 不想写映射设定 这部份go好多了虽然go的反射难用一点java你不透过反射是很难hack一些东西搞动态的 变量因封装搞的不可见超级麻烦都什么年代了还搞一堆设定 设定都一堆坑
楼主: hizuki (ayaka)   2024-06-21 02:15:00
我其实不知道reflection有什么用,c++不习惯RTTI的东西
作者: superpandal   2024-06-21 02:24:00
你的程式如果都是固定逻辑确实可以不用 但要多写还多很多东西很多框架也极依赖反射
楼主: hizuki (ayaka)   2024-06-21 02:33:00
我spring只用了大概3个小时就没碰了,我本业不是web这边的
作者: testPtt (测试)   2024-06-21 02:58:00
c++builder那套元件拉一拉就可以happy了
作者: BoXeX (心爱骑士团异端审判骑士)   2024-06-21 03:26:00
C就很白痴 一堆型态定义大家乱玩最后为求保险都在用int32_t 普通的int没人在用
作者: labbat (labbat)   2024-06-21 03:48:00
int是给闭起门来造车的开发人员的软件糖,不适合大规模用
作者: BoXeX (心爱骑士团异端审判骑士)   2024-06-21 03:55:00
没 int32_t 才是语法糖 你看stdint.h就知道
作者: Lordaeron (Terry)   2024-06-21 03:57:00
你是指啥时的stdint.h?
作者: BoXeX (心爱骑士团异端审判骑士)   2024-06-21 04:04:00
一堆stdint.h都是吧 int32_t 还好可能x86大部分用intint64_t 在不同平台会用不同东西来定义
作者: Lordaeron (Terry)   2024-06-21 04:10:00
我问的是"啥时"...如果不明白,东西是有历史的。
作者: BoXeX (心爱骑士团异端审判骑士)   2024-06-21 05:00:00
你想讲啥就直接说吧 一个在不同版本 平台 厂牌会长不一样的东西 你跑来问时间 到底是想干嘛
作者: s25g5d4 (function(){})()   2024-06-21 05:26:00
vpn 那段,kernel wg 会比较好吗?
作者: Apache (阿帕契)   2024-06-21 06:09:00
怎么不用Rust
作者: Lordaeron (Terry)   2024-06-21 06:36:00
int32_t 是C99 的事了。C99 以前怎么辨?不用int用什么?而有它也只是为了让不同的compiler有相同的反应。免得像long 这样。
作者: BoXeX (心爱骑士团异端审判骑士)   2024-06-21 07:22:00
阿所以我说"后来"都用int32_t 或是说他是语法糖有问题吗*最后而且 如果是C89前 大不了也是自己define类似的东西
作者: ohmylove347 (米特巴爾)   2024-06-21 10:04:00
为啥要反射?用FP写法,再不济写个策略模式也可以吧,还是封装太深东西捞不到?
作者: iamOsaka (欧沙卡)   2024-06-22 04:44:00
不是...你spring只碰过三小时哪有什么好评论的,基本上之所以用Java做web就是因为Spring生态系太强太丰富,非常好用
作者: Lordaeron (Terry)   2024-06-22 07:27:00
哈...spring 未出生java 就已在做web 了。关spring啥事
作者: superpandal   2024-06-22 07:46:00
为什么用反射? 因为不少东西都在用 工作上能让你选择的情况不多 通常都是框架与lib封装太深 限制你的应用 你用其它的也不是完美
作者: superpandal   2024-06-20 18:05:00
graalvm有反射问题阿 不想写映射设定 这部份go好多了虽然go的反射难用一点java你不透过反射是很难hack一些东西搞动态的 变量因封装搞的不可见超级麻烦都什么年代了还搞一堆设定 设定都一堆坑
楼主: hizuki (ayaka)   2024-06-20 18:15:00
我其实不知道reflection有什么用,c++不习惯RTTI的东西
作者: superpandal   2024-06-20 18:24:00
你的程式如果都是固定逻辑确实可以不用 但要多写还多很多东西很多框架也极依赖反射
楼主: hizuki (ayaka)   2024-06-20 18:33:00
我spring只用了大概3个小时就没碰了,我本业不是web这边的
作者: testPtt (测试)   2024-06-20 18:58:00
c++builder那套元件拉一拉就可以happy了
作者: BoXeX (心爱骑士团异端审判骑士)   2024-06-20 19:26:00
C就很白痴 一堆型态定义大家乱玩最后为求保险都在用int32_t 普通的int没人在用
作者: labbat (labbat)   2024-06-20 19:48:00
int是给闭起门来造车的开发人员的软件糖,不适合大规模用
作者: BoXeX (心爱骑士团异端审判骑士)   2024-06-20 19:55:00
没 int32_t 才是语法糖 你看stdint.h就知道
作者: Lordaeron (Terry)   2024-06-20 19:57:00
你是指啥时的stdint.h?
作者: BoXeX (心爱骑士团异端审判骑士)   2024-06-20 20:04:00
一堆stdint.h都是吧 int32_t 还好可能x86大部分用intint64_t 在不同平台会用不同东西来定义
作者: Lordaeron (Terry)   2024-06-20 20:10:00
我问的是"啥时"...如果不明白,东西是有历史的。
作者: BoXeX (心爱骑士团异端审判骑士)   2024-06-20 21:00:00
你想讲啥就直接说吧 一个在不同版本 平台 厂牌会长不一样的东西 你跑来问时间 到底是想干嘛
作者: s25g5d4 (function(){})()   2024-06-20 21:26:00
vpn 那段,kernel wg 会比较好吗?
作者: Apache (阿帕契)   2024-06-20 22:09:00
怎么不用Rust
作者: Lordaeron (Terry)   2024-06-20 22:36:00
int32_t 是C99 的事了。C99 以前怎么辨?不用int用什么?而有它也只是为了让不同的compiler有相同的反应。免得像long 这样。
作者: BoXeX (心爱骑士团异端审判骑士)   2024-06-20 23:22:00
阿所以我说"后来"都用int32_t 或是说他是语法糖有问题吗*最后而且 如果是C89前 大不了也是自己define类似的东西
作者: ohmylove347 (米特巴爾)   2024-06-21 02:04:00
为啥要反射?用FP写法,再不济写个策略模式也可以吧,还是封装太深东西捞不到?
作者: iamOsaka (欧沙卡)   2024-06-21 20:44:00
不是...你spring只碰过三小时哪有什么好评论的,基本上之所以用Java做web就是因为Spring生态系太强太丰富,非常好用
作者: Lordaeron (Terry)   2024-06-21 23:27:00
哈...spring 未出生java 就已在做web 了。关spring啥事
作者: superpandal   2024-06-21 23:46:00
为什么用反射? 因为不少东西都在用 工作上能让你选择的情况不多 通常都是框架与lib封装太深 限制你的应用 你用其它的也不是完美
作者: abccbaandy (敏)   2024-06-22 11:06:00
现在哪间公司java不用spring? 银行都有用了...关spring啥事勒...
作者: Lordaeron (Terry)   2024-06-23 07:37:00
C99要"解决问题",但被人说成是candy,我..crush...

Links booklink

Contact Us: admin [ a t ] ucptt.com