吐槽一下 Java JRE 的源码可读性有点差

2020-08-21 09:26:17 +08:00
 taogen

想了解一下 java.util.concurrent.ConcurrentHashMap,发现可读性太差了。

吐槽点如下:

以上或许都是为了追求极致性能,但是可读性真的太差了。

4025 次点击
所在节点    程序员
23 条回复
wsy2220
2020-08-21 09:30:00 +08:00
底层数据结构实现是可以为了性能牺牲可读性的
yangbonis
2020-08-21 09:36:22 +08:00
单个字母命名屏蔽垃圾信息,都是通用的逻辑,又不是业务,取名字反而是干扰。
yangbonis
2020-08-21 09:37:23 +08:00
你只是站在自己角度觉得可读性差,站在作者角度,说不定人家觉得很好。
yanzhiling2001
2020-08-21 09:41:48 +08:00
看到 jre 我就过来了 www.injdk.cn
taogen
2020-08-21 09:43:30 +08:00
@yangbonis #2 当有多个单字母变量在一起时,很难记住每个变量的含义,除非对代码非常熟悉。
lamy
2020-08-21 09:49:12 +08:00
和 c++ stl 比一下
Still4
2020-08-21 09:49:38 +08:00
你才搞了几年,写底层的搞了多少年,不是说资历就是能力,而是人家这么做一定有道理,底层必然优先性能,可读性靠边站,参考这个

https://www.v2ex.com/t/691522
flippydoo
2020-08-21 09:56:16 +08:00
这可读性都能差?但凡你好好看了 chm 类上面的注释和属性注释都不会这么讲,douglee 差不多用注释写了篇论文了
ChanKc
2020-08-21 09:57:23 +08:00
函数里面单个字母还挺正常的
位运算看习惯就好,很多和 2 相关的运算,用位运算都比乘除要快。而且我看位运算的基本都有注释。
sockpuppet9527
2020-08-21 10:33:18 +08:00
1. 局部变量单个字母命名:个人习惯问题,一般为单次首字母,看多了也习惯了,kernel 里面长词也会这样,打个比方,super block = sb , inode = i or n , Group Descriptors = gdt, Multiple mount protection = mmp
2. 位运算:位运算很常见也很方便,如果不明觉厉我个人会认为这是你的问题,举个简单的例子:掩码,再举个简单的例子:两个 32 位变量支持 64 位变量。
如果不用位运算,去写一大堆逻辑来支撑某个功能,那样做反而更复杂。
3. 魔法值:不知道楼主说的是不是 Magic number 。如果是的话,那我想说,如果你是 jre 的维护者,你不考虑版本兼容问题?

其他逻辑上的,大项目的基础功能都是这样的,面向的不是业务,考虑的东西以及开发的经验都是日积月累的。
sockpuppet9527
2020-08-21 10:38:59 +08:00
@sockpuppet9527 #10 补充一下,JRE 最少还有注释,还不断重构。
一些维护十年、二十年的开源项目注释都很少,patch 打的多了也不重构(开发者无精力),兼容多代的版本,兼容多个平台(指 OSX/WIN32/SUN/UNIX/LINUX),甚至因为 GCC 版本问题而弄得一些兼容(特指不通过 CONTAINER_OF 转型,直接强转)。这类看起来才是头大。
开源就是这样的,如果面对单一业务线,精简很多,也不需要考虑那么多。
chihiro2014
2020-08-21 10:40:44 +08:00
啊这,JDK 的东西和 JRE 有啥关系。JUC 里面的注释已经足够好了,至少市面上没有比他更好的文档。
taogen
2020-08-21 10:45:16 +08:00
@chihiro2014 JDK 包含 JRE,还有开发工具,以及 Java 文档。JRE 是运行时环境,主要包含是 Java 标准库代码和其它运行时的代码。
chihiro2014
2020-08-21 10:51:30 +08:00
@taogen 啊这,长见识了
cccy0
2020-08-21 11:02:27 +08:00
@yanzhiling2001 #4 现在装环境基本都是从这下载, 还是很不错的 ( 话说木兰是放上去搞笑的么
j2gg0s
2020-08-21 12:43:18 +08:00
这种级别的东西,性能的优先级是远高于可读性的。

另一个骚操作是提高参与门槛
yanzhiling2001
2020-08-21 12:47:40 +08:00
@cccy0 鞭尸
newmlp
2020-08-21 13:34:22 +08:00
是你水平太菜
slyang5
2020-08-21 14:10:53 +08:00
有没有想过,是自己的水平不够呢 ?
taogen
2020-08-21 14:20:35 +08:00
@slyang5 可读性差是事实。水平一般也是事实。
看过《 clean code 》,对代码的可读性深有感悟。我觉得性能固然重要,可读性也比较重要。
有些对性能影响不大的地方,可以适当地提升可读性。如,变量的名称,if 条件用一个方法封装,function 代码的结构层次化。

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

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

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

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

© 2021 V2EX