※ 引述《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 但是却无视掉内存复制造成的成本的话,那可能就和使用其他语言的状况差不
多,甚至会更糟,但是如果在每个设计都仔细考虑内存复制的成本的时候,那么整体
的设计速度就会稍微下降了,大概是这样。