读书笔记《Unix编程艺术》一
Posted Virtual_Func
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读书笔记《Unix编程艺术》一相关的知识,希望对你有一定的参考价值。
Unix 设计的统一思想:一切皆文件。
Linux是一个采取了Unix的设计思想,初始行为表现与Unix相同的操作系统,但Linux中的源码并未有任何出自Unix。Linux符合一切皆文件的思想,其中读写操作都是处理文件描述符,无论是文件描述符后的是真正打开的文件,还是进程间通信的套接字,对于用户而言都是操作文件描述符,用同样的API进行操作,这种思想对写IPC等比较方便,容易上手。
开源之于Unix:
Unix之所以生存到现在,并且在稳定性完全性都很好的原因,就是在于开源,将所有源代码都公开在geek的眼前,大家一起审核,确保了Unix的安全性,同时由于开源轻松的特性,使得Unix上好用的工具也很多,awk, sed 等工具。
Unix与Linux:
两者在基本设计思想上相同,但是Unix更倾向于命令行模式,Linux则希望在此基础上提供基本的GUI,面向非技术的使用人员,两者均是开源轻量级的操作系统,Linux设计上源于Unix,但又不完全同于原有的Unix
Unix编程艺术:
1. 封装与模块化:良好的模块不会向外透露自身细节,不会胡乱共享全局数据,模块之间通过定义良好的API来进行通信。
模块分的越小,API的重要性越高,bug的出现率也会降低,但当模块过小时,代码复杂度转移到接口,Bug率也会反增。Hatton认为最佳范围以代码行数计算应在“400-800”行之间
2. 紧凑型:掌握一个设计需要记忆的内容越少,则设计的紧凑型越高。即“一个设计是否能装进人脑中的特性”
紧凑型不等于“容易学习”,对一些紧凑设计而言(如Lisp),在掌握内在基础概念模型之前,理解该设计相对较难,但是一旦掌握了基础概念,则就不需要记忆太多。如C,Python等是半紧凑的,Java等不是紧凑的(掌握Java需要一定的记忆),而C++则是反紧凑的(没有人能完全理解C++,作者原话)。-_-
3. 正交性:每一个动作只做一件事(有时还会做无别的副作用的事),一个属性只会被一个方法改变。
老生常谈,每一本好书都在强调这个问题,千万要记住
4.SPOT原则(Single Point of Truth):即Don't Repeat yourself。
设计中不应该出现重复的代码,与代码知识重复的文档,太通用的数据结构(既表示返回值也表示错误状态等),模糊不清的数据结构
5. 紧凑型与强单一中心:设计应当围绕“解决一个定义明确的问题”的强核心算法进行组织设计。这样在使用该设计时就能不过多的考虑设计使用的算法
设计使用的算法是强大且被证明为正确的算法(称为形式法),与形式法对应的是尝试法(如垃圾过滤算法等就是尝试性算法,不能确保过滤结果绝对正确)
6.自顶向下与自底向上的缺点:
自顶向下是从抽象到具体,在实现过程中发现应用逻辑所需要的域原语与真正能实现的域原语无法匹配。理想与现实的差距 -_-
自底向上是从具体到抽象,很可能发现自己做了很多与应用逻辑无关的工作——像造房子,花了大部分时间设计了一堆砖块
通常采用的方法是两者的综合产物,同时兼有两者的代码,当顶层逻辑和底层原语冲突时,就要采用胶合逻辑层来融合冲突。
7. 胶合层:中和顶层逻辑层与底层原语层之间的冲突。
C语言就是一个薄胶合层的例子,融合顶层逻辑设计并与底层计算机交互。个人认为在操作系统中编写高层应用程序中,对调用系统API的操作而言,系统API就是在应用程序与操作系统之间的胶合层,屏蔽下方的丑陋接口,提供统一且不依赖与硬件的接口。
以上是关于读书笔记《Unix编程艺术》一的主要内容,如果未能解决你的问题,请参考以下文章