如何阅读源代码?
读源码确实是大多数程序员进阶的重要途径,使自己变成技术强的最快路径。道理都懂,但大家阅读源码的方法不一定高效,我今天结合自身经验和一些公认有效的方法,从为什么要阅读源码到如何阅读源码两个方面来谈谈看法,分享点经验。
如果大家觉得对自己有用,写的可能会有点长,建议收藏。
(资料图片)
一、为什么要阅读源码?
第一,好奇心
我阅读源码的动机主要是好奇心,比如,我很好奇babel究竟是如何转化JS的,vue-loader内部究竟做了什么,再深入点,webpack的架构是什么,webpack和rollup打包原理是不是一样的,有什么不同。
阅读别人的文章终究不深刻,另外咱也不知道他说的对不对,虽然一套套的,但很有可能别人的文章已经过时了。
第二,涨知识
阅读源码一个很重要的好处是可以拓宽技术视野,即知识的广度和深度,有意思的是,阅读源码可以兼得广度和深度。阅读源码相当于在学习原理了,这就是深度,广度指的是阅读过程中遇到的其他知识点,比如gensync,广度的根本原因是很多框架都是站在巨人的肩膀上的。拓宽技术视野之后,工作中遇到类似的问题,你会有更多的思路和想法。
二、如何阅读源码?
第一,重视文档
你阅读源码的框架,如果有介绍使用文档,一定要看一遍,一般文档中也有对其核心功能,核心API的详细说明,在读源码的时候可以重点看一下这些对外的接口是怎么实现的。
第二,基础知识
有些源码的阅读可能需要一点门槛,[emailprotected]/core中广泛用的generator和gensync,对这些前置知识不熟悉的话需要补齐,才能阅读更顺利。
第三,阅读过程,抓住主流程
分支可能比想象中的要多,如果一开始就把精力放在每一个分支上,估计很快就放弃了。当你对主流程掌握后,然后再阅读感兴趣的细节部分,应该是一个更好的选择。
第四,多思考,多对比
多问自己几个为什么,想一下为什么这样实现,有什么好处,为什么不那样实现,是不是有更好的实现方式。还可以对比一下与它类似的框架有什么不同。如果存在不同,那它们各自的优势是什么,解决什么问题。
方法上,可以自己把项目克隆下来,跑一下,写几个demo,使用console调试一些重要信息,甚至可以把主流程画出来理解都是有效方案。
第五,求源求新
所谓求源就是看它第一次提交(commit)是怎样的,它最开始是为了解决什么问题而出现的。所谓求新就是看它最新的版本是怎样的,架构有什么改动,加入了什么新的特性。
第六,写感悟
对某个框架有自己的感悟时,可以尝试写一篇文章,自己会和写出来是不一样的。在写的过程中,极有可能发现自己对某些知识掌握得并不深刻,你需要说服自己,然后才能说服别人。
快速总结一下,读源码,读什么?
一,读目的:该框架构是为了解决什么问题?类似框架对比优劣是什么?
二,读注释:优秀的开源项目,通常某个类,某个函数的目的,核心逻辑,核心参数解释,异常的发生场景等都会写到注释中,对我们学习源码有极大的帮助。
三,读逻辑:逻辑指的是语句或者子函数的顺序问题,要重视作者编码的顺序,了解为什么先写A再写B,背后的原因是什么。
四,读思想:所谓思想指源码背后体现出了哪些设计原则,比如是不是和设计模式的六大原则相符?是不是符合高内聚低耦合?是不是体现某种性能优化思想?
五,读原理:就是前面讲的读主流程。而不是记忆每行代码。
六,读编码风格:一般来来说优秀的源码的代码风格都比较优雅。可以通过源码来学习编码规范。
七,读编程技巧:作者是否采用了某种设计模式,某种编程技巧实现了意料之外的效果。
八,读设计方案:读源码不仅包含具体的代码,更重要的是设计方案。掌握一些解决问题的设计方案之后对提升我们自己的工作经验非常有帮助,我们工作中做技术方案时可以参考这些优秀项目的方案。
以上是所有,希望大家都进步。[灵光一闪]
【开源资讯】Mesa 21.2.0 发布,3D 计算机图形库
Mesa 21.2.0已经发布。Mesa 是一个三维计算机图形库,以开源形式实现了OpenGL的应用程序接口。
主要更新内容
1、pan/bi:限制同一个周期临时的 swizzles
2、pan/bi:删除不正确的勘误表解决方法
3、vulkan/wsi/x11: 不继承 last_present_mode
4、ir3:在分片着色器中保留 gl_ViewportIndex
5、intel/fs:将旧版 GPU 上的最大推送长度限制在一个较小的范围内
6、crocus/gen45:修复映射压缩纹理
7、intel/genxml:修复 blt genxml 中的光栅操作字段
8、crocus:使用 blt 添加对将 alpha 设置为 1 的支持
9、lavapipe:不把不支持的测试标记为崩溃
10、d3d12:拆分根参数的更新和设置
11、zink:使代码生成器与 python 3.5 兼容
12、mesa/main:在将 EGL 图像导入纹理时检查 fbo 附件
13、v3d、vc4:修复非扫描缓冲区的 dmabuf 导入
14、Broadcom:从Neon库中删除 v3dv3
15、gallium:在 dri_unbind_context 中重置 {d,r}Priv
16、loader/dri3:创建具有扫描输出支持的线性缓冲区
17、nir/lower_shader_calls:添加缺失的堆栈偏移对齐
18、anv:修复提交批处理与 perf 查询的问题
19、drm-shim:当 xstat 变体不存在时实现 stat/fstat
20、intel/disasm:修复丢失的 oword 索引解码
[看图学英文-47]
是不是经常有这种情况,想用英语说些事儿,句子说一半却卡壳了,脑子里搜不出对应的词汇。那是因为单词散落在我们脑子里,从这么多词汇库里一个一个的检索想用的单词速度当然慢啦。
不要死记硬背单词,让我们试试另一种方法,如果把一些词按照场景在一起记忆,不但容易记牢,用的时候也会很容易联想到相关的单词呢。认识身边的物件,每天都能看到的东西就不容易忘记,不管有多难拼写。日常物件学英语,用中学,学中用。
今天的场景是建筑工地,来看看你都认识哪些工具吧。
1. wheelbarrow 工地用推车
2. toolbelt 工具皮带
3. shovel 铲子
4. sledgehammer 大锤
5. pickax 镐头
6. jackhammer/pneumatic drill 冲击钻
7. helmet/hard hat 安全帽
8. blueprints 蓝图
9. trowel 瓦刀/镘
10. tape measure 卷尺
11. level 水平尺
12. ladder 梯子
13. scaffolding 脚手架
14. dump truck 卡车
15. front-end loader 铲车
16. bulldozer 推土机
17. cherry picker 见评论区图
18. crane 起重机
19. cement mixer 水泥搅拌机
20. pickup truck 皮卡
21. trailer 拖车
22. van 厢式货车
23. backhoe 挖掘机
24. cement 水泥
25. wood/lumber 木材
26. plywood 胶合板
27. wire 电线
28. insulation 保温棉/板
29. brick 砖块
30. shingle 瓦
31. pipe 管子
32. girder/beam 钢梁
本专题作者小留洋豆子妈妈,欢迎评论区讨论您是怎么教孩子学英语的。 关注「小留洋」全网同名,获取更多海外K12教育资料,为孩子留学做好准备。#英语##英语启蒙##看图学英语#
本文windows,7,loader,windows,loader在哪里到此分享完毕,希望对大家有所帮助。