作者pichubaby (Pichu Chen)
看板Soft_Job
标题Re: [讨论] 为什麽不要用c++写网站
时间Fri Jun 28 04:00:44 2024
※ 引述《brucetu (sec)》之铭言:
: 现代网站开发一定有框架
: 几乎所有的操作都有现成的函数让你用
: 也是就说
: 就算用c++开发也只是在call框架的API
: 把资料丢来丢去而已
: 有人觉得python / .net 写网站比较简单
: 但其实框架包得好
: 就算是c++也没有什麽不同吧?
: 例如 python 的 list comprehension
: 或是 .net 的 linq
: 都可以包成一个套件来做啊
: 在 c++ 也就只是一行 function call 而已了
: 那为什麽不用c++开发网站就好了?
如果是我的话也许宁愿选择用 C 也不太会选择用 C++ 开发网站。
C 和 C++ 的好处在於没有节操,大部分软体工程师讲得出来的程式语言,都会有记忆体
范围保护以及垃圾回收的设计。
但是 C 和 C++ 没有,C 和 C++ 觉得这是工程师应该要负责的事情。
而大部分的 HTTP 伺服器,如果是使用 nginx 或是 apache 的话,基本上这两套都是纯
C 下去开发的,在更底层的 Linux 或是 Windows 的 TCP 演算法原则上也是 C 开发的
居多。
资料库的部分 Postgres 是 C, MongoDB 是 C++,所以其实大多数组件都是 C 开发的,
只是一般的软体开发团队比较不会真的去重新编译这些东西,但是如果是做路由器相关
的 HTTP Server 的话,或是物联网相关的,那就有可能真的是用 C 直接输出 HTML。
回到正题。
在工程上选择要用什麽语言或是更精确来说要用什麽技术来开发,原则上取决於专案预期
获利以及死线大概在哪边。哪个语言有相对多的函式库或者是范例通常就会用哪个语言,
但更现实的是前人留下来的东西是什麽语言通常就是那个语言。
Meta =FB 现在还有部分 PHP, 毕竟老板以前就是用 PHP 的。
然後如果是手机 APP, 因为 Apple 给的范例就是 Obj-C, 所以虽然可以用 C++ 来写,但
是可能不会是太愉快的体验。
接着谈到框架,大部分的框架都会降低执行期效能。
降低执行期效能等於增加上线後伺服器资源费用也等同於消耗更多电力或者是说不环保。
同时执行期效能降低也会增加反应时间降低使用者体验。
但是在十到二十年前,大部分的效能并不是卡在商业逻辑的部分。
同样是 printf("<html ...... 使用 C 和 PHP 并不会差到哪里去,大部分的效能差异
会在使用者 56K 的数据机以及 SAS 硬碟的转速上面。
所以与其用 C 去改善商业逻辑,不如多投资一些频宽或者是磁碟阵列,甚至是记忆体。
但是现在的状况稍微不太一样,毕竟 Redis 兴起,资料库可以直接放在记忆体做 IMDB
网路速度是 10Gbps 起跳,已经超过普遍伺服器 CPU 3GHz 的速率了,因此商业逻辑
的常数效能是不是仍然不重要这点可以重心评估。
另外虽然 Python 有助於让大众可以接触到 AI,很快速的兜出模型出来,但毕竟他还是
有一些记忆体保护上的矜持,所以效能注定没办法超越 C / C++ ,因此也有出现像是
LLAMA.cpp 这样的专案,那麽他也是有 HTTP Server 的,所以说千万不要说死说不可能用
C / C++ 去做的这种事。
那不过通常写 C / C++ 的工程师必须要能够保持很多好习惯,例如玩具玩玩要收好,
malloc 用完要做 free,我的浏览器分页数量证明了我很难保持这种习惯,所以基本上
我都是用 Golang 这类型有垃圾回收机制的语言来做开发。
顺带一提,「把 C 包装起来这样就可以有 C 的效能而且还可以快速开发」的想法很多工
程师都想过,所以我们才会有了各式各样的程式语言,包括 PHP, Python, Ruby ... ...
大概除了 JAVA 以外大致上都是因为这样所以开发了一个框架语言出来。
如果说一点都不在乎有可能发生 Stack overflow 或是 memleak 的话,那还是可以试试
看用 C 开发,否则现在的话或许会比较推荐可以用 Rust 做开发。
至於开发速度而言,目前已经是 Copilot 的时代了,开发速度原则上取决於在心中想像
架构以及如果遇到问题除错的速度,打字或是变数命名交给 IDE 处理就行了。
使用 C 但是却无视掉记忆体复制造成的成本的话,那可能就和使用其他语言的状况差不
多,甚至会更糟,但是如果在每个设计都仔细考虑记忆体复制的成本的时候,那麽整体
的设计速度就会稍微下降了,大概是这样。
--
此篇文章以 CC BY-SA 4.0 发表。
咖啡是一种豆浆,
茶是一种蔬菜汤。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 150.117.165.81 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1719518456.A.8D3.html
1F:嘘 final01: 好惨,一个不懂c++的人说c比c++适合... 06/28 07:31
2F:推 RouterHsieh: 作为一个搞底层出身的人我觉得这篇很中肯啊, 06/28 07:55
3F:→ RouterHsieh: 一楼的觉得人家不懂的话要不要自己回一篇? 06/28 07:55
4F:推 sw12: 看到节操我笑了...要你什麽姿势就什麽姿势。这是C的魅力 06/28 09:14
5F:推 psychic: 用C写web,都不用考虑相容性了吗...更新改死你 06/28 09:26
6F:推 nicehorse06: 请问原po觉得rust未来趋势?是否很多C的情景都可以 06/28 09:50
7F:→ nicehorse06: 改用rust 06/28 09:50
听说目前 rust 社群有个迷因,打算把全世界都用 rust 改写过。
但也有可能是这个原因,现在还找不太到只有 rust 版本的专案。
再来目前我测试的 Benchmark 结果 rust 的效能还没办法和 C 真的做比较,在某些状况
下可以胜过 Golang, 但是 rust 没有 GC, 在 Benchmark 的场景中不一定会触发 Golang
的 GC 事件,再加上 rust 刚开始,所以很多部分还有最佳化空间,Golang 也是经过了
几年的最佳化,所以一些东西真的不好说。
然後从我的观点看来,rust 导入的拥有权概念是比较新的概念,但是对高中生来说可能
没差,反正所有东西都是新的。所以他们可能不会觉得 rust 特别难。
目前 rust 的开源程式码有比较少,这部分也导致 copilot 写 rust 的准确度没有那麽高
回到问题上,Linux 整个改写成 rust 我认为难度太高,但是你可以先观察 RTOS
https://arewertosyet.com/
对於 C 的信仰差不多是常数效能等於一切,因此只要在某个平台上 C 没办法在效能上
超过 rust,那大概就灭教了吧...
8F:推 Bencrie: 我是觉得 CPU 3GHZ 跟 10Gbps 的关系比较奇怪啦 06/28 10:14
9F:推 neo5277: 纯推分页开一堆 06/28 10:20
10F:推 wei115: 用cpython技术上来说也是用c写web 06/28 10:25
认真来说 cpython 的程式码因为那些矜持,所以只是能用 C 编译器编译,效能而言没有
到一般写 C 的工程师的基本水准。
11F:推 abccbaandy: 效能真的没人在乎啦,看electron写出来体验烂到爆还不 06/28 10:49
12F:→ abccbaandy: 是只能继续用 06/28 10:49
13F:→ abccbaandy: 赶快写出来让老板能拿出去卖钱实在 06/28 10:50
14F:→ kshieh: C++ smart pointer 表示 06/28 11:13
15F:→ x000032001: C++ RAII表示 06/28 13:33
16F:→ fatb: 确实不可能 这跟市占扯上关系了 06/28 14:01
17F:→ fatb: 除非不同语言做串接 06/28 14:01
18F:→ brucetu: 赞 06/28 17:19
※ 编辑: pichubaby (150.117.165.81 台湾), 06/28/2024 23:55:49
19F:推 knme: 推 06/29 14:52
20F:→ superpandal: rust不论编译耗时还是硬碟占用都很多 整天被编译器整 06/29 18:06
21F:→ superpandal: 蛊时间都没了 06/29 18:06
22F:→ BoXeX: 一些底层的程式 连malloc都没 记忆体自己管理的 06/29 19:53
23F:→ BoXeX: 应该是没有用 rust 的必要 06/29 19:53
24F:推 wsad50232: 老是有人爱说别人不懂C++, 那自己又懂了什麽 06/29 22:04
25F:推 pot1234: 不太喜欢new完不知道什麽时候会delete掉的感觉 06/29 23:47
26F:推 alex70266: 喜欢没有节操这句 XDD害我在手机面前笑出来 06/30 01:34
27F:推 wizozd84070: 推,长知识了谢谢分享 06/30 07:34
28F:嘘 CoNsTaR: 第三句就看得出来原 Po 半毛 C++ 都不懂,这样都不能嘘? 06/30 18:38
29F:→ CoNsTaR: 你来给我教 15 分钟会的 C++ 可能比原 Po 还多 06/30 18:38
30F:推 hobnob: 能请楼上教两句,我最近正好在学 06/30 18:58
31F:推 j0958322080: 给楼上,去看智慧指标 06/30 21:33
32F:嘘 MoonCode: 06/30 22:22
33F:嘘 wuyiulin: 三小有帮你写好的GC比较有节操? 06/30 22:40
34F:→ wuyiulin: 我的头开始痛了。 06/30 22:40
35F:推 wulouise: 我觉得很多lib都用c开发跟从c c++中选c这两者没有关联, 06/30 22:53
36F:→ wulouise: 原PO的确没说理由 06/30 22:53
38F:推 Hitmear: 现在这个时代生产力比效能重要多了,你的产品真的会压榨 07/01 16:00
39F:→ Hitmear: 全部效能吗?我怀疑 07/01 16:00
40F:→ Dracarys: @hobnob RAII, Rule of 0/3/5 07/01 16:00
41F:→ superpandal: 效能并不是完全不重要 只是效能瓶颈不在语言本身 07/02 12:03
42F:推 hobnob: 谢谢关键字 07/03 17:02