虽然说没有银弹,但是我感觉 c++完全可以设计成更友好,开发速度更快的语言

2021-07-14 21:14:58 +08:00
 zxCoder

c++大佬别杠我,不可否认的是 c++学起来实在太难,写起来实在太慢

实际上很多东西感觉完全可以反过来吸收别的语言的优点

16945 次点击
所在节点    程序员
209 条回复
stimw
2021-07-15 22:39:33 +08:00
Swift 和 C#真的非常可惜
Huelse
2021-07-15 22:47:31 +08:00
@xupefei 是 fp 吗
Huelse
2021-07-15 22:52:09 +08:00
@GeruzoniAnsasu

个人看法,一人就能把 C++新特性玩的好,那当然好。

问题在于工程开发不是一个人的事,C++这样很难协调起来,这样我还不如一起去用 C,成本可能会更低
GeruzoniAnsasu
2021-07-15 23:01:21 +08:00
@Austaras 就是因为 rust 跟 c++在抽象实现上没什么优劣差异,学习成本又一样高,它想“推翻”的 c++痼疾又不一定需要真的重新来过,所以我就没感到 rust 到底颠覆在哪
gBurnX
2021-07-16 01:17:40 +08:00
Java 、C#、PHP 、Python,是你快饿死了,然后直接美团里点单,半个小时到 1 个小时内能解决用餐问题,属于快餐。

C 、C++、汇编,是你想吃什么,从食材、厨具、烹饪手法开始入手,精细化处理,有时一款食材的处理都要大半天,能做出最适合你口味的美味食物。

每款语言的定位都不一样,术业有专攻。
junkun
2021-07-16 01:18:51 +08:00
@GeruzoniAnsasu 就比如 c++里经典错误,一个重载函数签名有 int foo(bool a)和 int foo(std::string b),请问 foo("abc")调用哪个版本。c++语法中就有很多陷阱,因此非常依赖 more more more effective c++之类的最佳实践。
如果让新手写 c++,出来的代码可能能编译能跑,但实际上却有存在内存错误或 UB 等等潜在问题,算不算友好呢。rust 除了强制所有权、引入了抽象数据类型(Option 、Result)等,我觉得最大的优势就是能编译的时候检查许多内存错误,只要改到编译器通过就行。
levelworm
2021-07-16 02:44:00 +08:00
@ipwx 36 楼
您好我想请教一下,究竟用 unique_ptr 还是 shared_ptr,这个是必须在写程序之前就考虑好的是吗?有好几次我想用,但是总觉得根据自己的水平没法考虑清楚,就干脆还是裸指针算了。
ysc3839
2021-07-16 02:59:25 +08:00
@levelworm 我自己是 unique_ptr 随便用,这个是没有额外开销的。shared_ptr 基本不用,要用时得看需求。
levelworm
2021-07-16 03:12:49 +08:00
@ysc3839 多谢!
iceheart
2021-07-16 06:26:41 +08:00
lambda 函数的加入,是巨大的进化,但是 coroutine 实在无法接受

task resuming_on_new_thread(std::jthread& out) {
std::cout << "Coroutine started on thread: " << std::this_thread::get_id() << '\n';
co_await switch_to_new_thread(out);
// awaiter destroyed here
std::cout << "Coroutine resumed on thread: " << std::this_thread::get_id() << '\n';
}

结果

Coroutine started on thread: 139972277602112
New thread ID: 139972267284224
Coroutine resumed on thread: 139972267284224

看起来简单的打印线程 id 的代码,在同一个函数作用域的不同位置,竟然结果不一样,这让我以后可咋读代码啊。
Solael
2021-07-16 06:50:16 +08:00
需要手动管理内存上 rust,不需要找个现代语言写就行了。
zxCoder
2021-07-16 08:16:00 +08:00
@gBurnX 话虽如此,但我总觉得这两类之间可以不用分的这么清

比如能不能我也是从食材,厨具,烹饪手法都自己入手细调,但最终又不需要我自己实际动手,美团会给我做好送来

听起来有点离谱,但是总感觉这是一个正确的方向
fyxtc
2021-07-16 08:16:14 +08:00
如果你真的理解的银弹的概念你就不会纠结于语言了
plko345
2021-07-16 08:17:49 +08:00
@likefly 性能不落后,但相对底层语言就落后一些了,还有明显的缺点,linkerd 的 proxy 不就因为一些原因抛弃了 java 吗,还错失了市场,最后重构,java 和 c 或 c++就不是一类场景的
wangxn
2021-07-16 08:40:40 +08:00
@iceheart Go 也是一样的,这是 co routine 的本质所在,也是优点。
ysc3839
2021-07-16 09:07:29 +08:00
@iceheart @wangxn C++20 的 coroutine 和 Go 的 goroutine 是不一样的,前者是无栈协程,后者是有栈协程。
前者可以像回调函数那样使用,具体在哪恢复执行是没有限制的,你可以实现一个单线程的模型。
HB9527
2021-07-16 09:10:57 +08:00
C++主要是标准太多,导致很不『标准』。
cstj0505
2021-07-16 09:55:26 +08:00
@likefly Java 速度确实不行,致命缺点就是第一次执行速度,虽然多次执行后 jit 能加快速度,提升至少 5 倍以上。但是你不能智网所有场景都是重复执行。
Austaras
2021-07-16 10:50:07 +08:00
@GeruzoniAnsasu 因为真正的学习成本并不一样啊,一个人读了 trpl 就能写生产用的 rust 代码了,一个人要是只读了 cpp primer 你敢让他写生产用 cpp 吗。。。
l00t
2021-07-16 10:51:58 +08:00
我觉得 C++的问题是不同的人写出来的代码差异太大,有时候都跟两个语言似的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/789560

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX