llcpf 发表于 2023-10-3 18:31:30

Linux内核代码算屎山吗?

Linux内核代码算屎山吗?

cnz1035 发表于 2023-10-3 18:32:29

主要的屎山集中在驱动层,linux内核为什么-O0编译不同过,就是因为这些写的差的代码(因为优化时根本就没办法编译通过),当然稍微改动以下,就能O0愉快的调试了。还有一部分屎山是历史遗留问题,因为linux在某项模块刚开发的时候,不可能会设计的很完美。但考虑到兼容性问题,会遗留一些历史代码,大部分可以通过宏开关。当然有些屎山,会一直遗留下来。就比如时钟事件,liunx内核会定期的tick事件,系统目前无事可做,也必须定期地发出时钟事件,激活系统,这完全没有意义,浪费电量,但linux很多代码都依赖tick,不可能重新写一套,只能通过配置CONFIG_NO_HZ来考虑nohz的情况,向调度,rcu和定时器都得考虑nohz的情况,本来不是很复杂的原理,就是因为当初设计的不合理,导致要讨论各种情况,使得代码又臭又长。还有定时器,linux内核有两套定时器,但实际上根本就不需要低精度的定时器,完全多余,但因为要兼容历史代码和驱动,就一直留存下来。一个cup一个定时器结构,通过大轮驱动小轮,一共七级。记得那个数据结构超过4k了,加入有四个内核,光定时器就占了20多k,太浪费内存空间了。后面出现了高精度定时器,还得兼容低精度定时器。总而言之,linux内核核心代码并不非常完美,但由于开源,质量上还是可以的,是非常值得阅读,借鉴的,虽然自己现在偏android系统开发了,好久没看内核代码了哈。

nxwqwt 发表于 2023-10-3 18:33:26

代码从来都只有自己写的部分代码才能算优雅,别人写的永远都是屎山。
所谓的屎山,就是一堆复杂度非常高的代码。你可以抽象,可以解耦,但永远也没法降低现实世界的复杂度。
一个程序员的最高修养,大概就是见山还是山,但已经能够快速理解这座山的臭味是从何而来的。

if1001 发表于 2023-10-3 18:33:31

每个大版本都敢进行大刀阔斧的重构,内核api都变来变去,你管这叫屎山?

axlyzyy 发表于 2023-10-3 18:34:27

不请自来
读一读Linux Kernel代码呗。我个人觉得模块化做得非常好,Linus本人强调的“差的程序员关注实现,好的程序员关注数据结构及它们之间的关系“,一句话足以说明问题。

leoqb 发表于 2023-10-3 18:34:43

有史以来最著名的严厉的代码审查员在守着这个代码库的提交,如果这也是屎山那就没有代码不是屎山了。
页: [1]
查看完整版本: Linux内核代码算屎山吗?