怎么看这两个代码?

2023-08-11 10:50:12 +08:00
 zhengqiaoyin

看了一篇关于 linus 的内容,不知该如何评价这两张图


补一个来源吧:一个 Liuns 的故事

4050 次点击
所在节点    程序员
24 条回复
liuyunlong
2023-08-11 11:02:35 +08:00
地址
NessajCN
2023-08-11 11:31:19 +08:00
变量定义得越少,if 用得越少,代码越优雅呗
cuihua
2023-08-11 11:36:08 +08:00
具体情况具体分析:
1. 内核中使用第二种,因为都是大佬看,而且内核用的多,千锤百炼不会有问题。
2. 工程中我选择前者,kiss 原则,性能相同,代码蠢一点更好
misdake
2023-08-11 11:39:40 +08:00
indirect 很好地覆盖了 head 的特殊性,后续代码不再需要关心这个问题,节约了注意力,不容易出 bug ,后续维护也不容易出错
weeei
2023-08-11 14:41:15 +08:00
初学肯定是从第一种写起。
第二种是高级写法,就是把第一种的思考逻辑做了合并,两个逻辑是等价的。
我这种菜鸟是打死都想不到第二种的,没办法没有天赋。
weeei
2023-08-11 14:45:03 +08:00
这里是内核代码,最求的节省 CPU 时钟,第二种对大牛来说才是正常代码。
Ianchen
2023-08-11 14:47:22 +08:00
优雅永不过时,喜欢并且认同第二种写法
janus77
2023-08-11 14:50:30 +08:00
第二种好是好,不适合我这种菜鸟
Shatyuka
2023-08-11 14:58:14 +08:00
HaroldFinchNYC
2023-08-11 15:04:51 +08:00
这是一次 TED 采访里的代码片段

你要是能看懂第二种,自然就用第二种
x77
2023-08-11 15:17:11 +08:00
我的视角看第二种比第一种更热爱技术,觉得到了一个阶段自然而然的就会慢慢转向第二种写法,也更喜欢看到第二种的写法
bojackhorseman
2023-08-11 15:21:30 +08:00
虽然我看不懂,但我知道这是 Linus 在一次 Ted 上举出的好坏对比示例代码
lixile
2023-08-11 15:31:03 +08:00
@Shatyuka emmmmmm 我说个奇怪的地方 因为我常用版本是 gcc 9.3.0 我就把上面代码切换到 gcc 9.3.0 发现 居然是前面一种指令集更少 是 16 行 第二种 18 行
zagfai
2023-08-11 15:41:02 +08:00
15 年前我写 c 就用第二种了,明显是水平差距
lsk569937453
2023-08-11 15:43:33 +08:00
我看不懂 c++。还好有 python,js,java 这些语言,让编程的门槛减低了很多。
Shatyuka
2023-08-11 16:03:02 +08:00
@lixile 所以我更喜欢 clang 一点
gcc 两个汇编差不多,一个
```
mov QWORD PTR [rdx+8], rax
```
一个
```
add rdx, 8
mov QWORD PTR [rdx], rax
```
Projection
2023-08-11 16:57:16 +08:00
像 Java 、JavaScript 这类没有指针的语言,想要修改一个对象的 next 字段必须先获取到这个对象才能修改,所以必须用变量存储这个对象本身;而不能像 C/C++ 那样可以拿到 next 字段的指针来修改。第一种方法基本所有语言都可以用,第二种必须要语言支持指针,这更多是语言差异。

对于链表操作来说,用第一种方法时,有头结点和没有头结点操作链表的方式有差异,所以有时出于方便会选择使用头结点。但如果像第二种写法一样使用指向 next 字段的指针或引用,有没有头结点操作都很方便。
yolee599
2023-08-11 17:16:38 +08:00
if-else 里面只有一条语句,我看着也不舒服,特别是 C style 的代码
lcingOnTheCake
2023-08-11 17:22:16 +08:00
这是伪代码吧
cnbatch
2023-08-11 17:23:31 +08:00
@lsk569937453 准确来说,这两段代码是纯 C 的

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

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

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

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

© 2021 V2EX