作者hizuki (真女主角爱与正义的天使)
看板Soft_Job
标题Re: [讨论] 为什麽不要用c++写网站
时间Thu Jun 20 17:29:31 2024
※ 引述《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
--
你比较喜欢哪一个?
当年不是党国大老但是被江浙财团捧红的中国帅哥
跟同样拥兵一方的诸侯约会裁军结果半途诸侯们爽约,平常有在写日记的庄严男人开始发飙
在旁边读着荒漠甘泉冷眼旁观看着蔷薇战争的人,为了中国的事情争吵
别国调侃是不是中国总统,义正词严的说着我是民族的灯塔的威严老先生
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 192.147.44.15 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1718875775.A.9B3.html
1F:→ superpandal: graalvm有反射问题阿 不想写映射设定 这部份go好多了 06/20 18:05
2F:→ superpandal: 虽然go的反射难用一点 06/20 18:06
3F:→ superpandal: java你不透过反射是很难hack一些东西搞动态的 变量因 06/20 18:10
4F:→ superpandal: 封装搞的不可见超级麻烦 06/20 18:10
5F:→ superpandal: 都什麽年代了还搞一堆设定 设定都一堆坑 06/20 18:12
6F:→ hizuki: 我其实不知道reflection有什麽用,c++不习惯RTTI的东西 06/20 18:15
7F:→ superpandal: 你的程式如果都是固定逻辑确实可以不用 但要多写还多 06/20 18:24
8F:→ superpandal: 很多东西 06/20 18:24
9F:→ superpandal: 很多框架也极依赖反射 06/20 18:26
10F:→ hizuki: 我spring只用了大概3个小时就没碰了,我本业不是web这边的 06/20 18:33
11F:→ testPtt: c++builder那套元件拉一拉就可以happy了 06/20 18:58
12F:→ BoXeX: C就很白痴 一堆型态定义大家乱玩 06/20 19:26
13F:→ BoXeX: 最後为求保险都在用int32_t 普通的int没人在用 06/20 19:26
14F:→ labbat: int是给闭起门来造车的开发人员的软体糖,不适合大规模用 06/20 19:48
15F:→ BoXeX: 没 int32_t 才是语法糖 你看stdint.h就知道 06/20 19:55
16F:→ Lordaeron: 你是指啥时的stdint.h? 06/20 19:57
17F:→ BoXeX: 一堆stdint.h都是吧 int32_t 还好可能x86大部分用int 06/20 20:04
18F:→ BoXeX: int64_t 在不同平台会用不同东西来定义 06/20 20:04
19F:→ Lordaeron: 我问的是"啥时"...如果不明白,东西是有历史的。 06/20 20:10
20F:→ BoXeX: 你想讲啥就直接说吧 一个在不同版本 平台 厂牌 06/20 21:00
21F:→ BoXeX: 会长不一样的东西 你跑来问时间 到底是想干嘛 06/20 21:00
22F:推 s25g5d4: vpn 那段,kernel wg 会比较好吗? 06/20 21:26
好是好,扩展蛮麻烦的。
kernel中不能随便spin lock的,一个deadlock真的全世界陪葬
23F:→ Apache: 怎麽不用Rust 06/20 22:09
24F:→ Lordaeron: int32_t 是C99 的事了。C99 以前怎麽辨?不用int用什麽? 06/20 22:36
25F:→ Lordaeron: 而有它也只是为了让不同的compiler有相同的反应。 06/20 22:42
26F:→ Lordaeron: 免得像long 这样。 06/20 22:42
27F:→ BoXeX: 阿所以我说"後来"都用int32_t 或是说他是语法糖 06/20 23:22
28F:→ BoXeX: 有问题吗 06/20 23:22
29F:→ BoXeX: *最後 06/20 23:25
30F:→ BoXeX: 而且 如果是C89前 大不了也是自己define类似的东西 06/20 23:26
(u)int32_t其实在PC/Server这样的地方用,或者需要定义fixed length的data structure
都是没有问题的。
但是麻烦还是不要都用32bits,int的意义在於一般都是compiler设定效能最佳化到最好的
data type。stm8也是这样讲,就算int在这个8bits MCU上是32bits长。
至於爲什麽不用更大的data type来存资料比较保险,就有一个paramter pass的问题,
特别是CISC的暂存器又少,大一点就要堆到memory中去了
31F:推 ohmylove347: 为啥要反射?用FP写法,再不济写个策略模式也可以吧 06/21 02:04
32F:→ ohmylove347: ,还是封装太深东西捞不到? 06/21 02:04
※ 编辑: hizuki (192.147.44.15 美国), 06/21/2024 14:30:14
33F:推 iamOsaka: 不是...你spring只碰过三小时哪有什麽好评论的,基本上 06/21 20:44
34F:→ iamOsaka: 之所以用Java做web就是因为Spring生态系太强太丰富,非 06/21 20:44
35F:→ iamOsaka: 常好用 06/21 20:44
web不是只有Java EE,26的Bilibili的Go泄露事件,说明Go使用比人想象的广
另外我的工作和IO蛮有关系的,怎麽不能评论
36F:→ Lordaeron: 哈...spring 未出生java 就已在做web 了。关spring啥事 06/21 23:27
37F:→ superpandal: 为什麽用反射? 因为不少东西都在用 工作上能让你选 06/21 23:46
38F:→ superpandal: 择的情况不多 通常都是框架与lib封装太深 限制你的应 06/21 23:47
39F:→ superpandal: 用 你用其它的也不是完美 06/21 23:50
40F:→ abccbaandy: 现在哪间公司java不用spring? 银行都有用了...关 06/22 11:06
41F:→ abccbaandy: spring啥事勒... 06/22 11:06
Android一票公司,当然web方面甚至说涉及到网路程式都是spring一本道
※ 编辑: hizuki (154.3.4.179 美国), 06/22/2024 18:44:58
42F:→ Lordaeron: C99要"解决问题",但被人说成是candy,我..crush... 06/23 07:37