《传世经典书丛:UNIX编程艺术》内容涉及社群文化、软件开发设计与实现,覆盖面广、内容深邃,完全展现了作者极其深厚的经验积累和领域智慧。
《传世经典书丛:UNIX编程艺术》主要介绍了Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的Unix编程大师、开源运动领袖人物之一Eric S.Raymond倾力多年写作而成。包括Unix设计者在内的多位领域专家也为本书贡献了宝贵的内容。本书内容涉及社群文化、软件开发设计与实现,覆盖面广、内容深邃,完全展现了作者极其深厚的经验积累和领域智慧。
Eric S.Raymond,从1982年开始就是UNIX开发者。作为开源社区文化的倡导和呼吁者,他在《大教堂与市集》中写下了这场运动的宣言,同时他还是《新黑客词典》的编辑。
terminfo本身使用文件系统作为一个简单的层级数据库。这种偷懒相当具有建设性,符合经济性原则和透明性原则。这意味着对文件系统进行浏览、检查和修改的所有普通工具都可以用于对terminfo数据库进行浏览、检查和修改;无需编写和调试专用工具(用于打包和解包单个记录的tic(1)和infocmp(1)工具除外)。这也意味着要加速数据库的访问就得要加速文件系统本身,知道这一点可以使更多应用程序受益,而不仅仅是curses(3)的用户。
这种结构还有另外一种优点,但在terminfo例子中没有展示出来:你开始使用Unix的授权机制而不用自己编写带来额外bu9的访问控制层。这也是采纳而不是对抗Unix“一切皆文件”基本原则的结果。
terminfo目录的布局在大多数Unix文件系统上都很浪费空间。每条目长度通常在400~1400字节之间,但是文件系统通常为每一个非空磁盘文件至少分配4k的空间。出于选择压缩二进制格式的同一个原因,即为了把terminfo使用的程序的启动延时降到最小,设计者接受了这个代价。同一价格所能买到的磁盘容量已经猛增了一千倍,更能证明这个决定的正确。
比较这种格式和Microcsoft Windows的注册表文件所用的格式很有启发意义。注册表是Windows本身及应用程序都使用的属性数据库。所有注册记录都存放在一个大文件中。注册记录既包含文本也包含二进制数据,需要专用的编辑工具。别的不说,这种“一个大文件”的方法还导致了臭名昭著的“注册表蠕变”现象;平均访问时间随着新记录的加入而无限上升。因为系统没有提供标准APl来编辑注册表,应用程序本身使用专用代码编辑注册表,使得注册表极易受损,甚至能够锁定整个系统。
使用Unix文件系统作为数据库是一种策略,对数据库要求简单的其它应用程序可以效仿并从中受益。不这样做的充分理由通常与性能问题无关,更可能的情形是数据库关键字不太适合做文件名。无论如何,这是在原型设计时非常有用的一种很好的快速编程方法。
6.1.7 实例分析:Freeciv数据文件
Freeciv是一款受到Sid Meier经典的Civilization H启发而制作的开源策略游戏。在该游戏中,每个玩家从一群到处流浪的新石器游牧民开始缔造一个文明。玩家的文明可以探索并拓殖世界,参与战争,从事贸易和研究先进技术。有些玩家实际上可能是人工智能;和这些电脑玩家玩单机游戏很有挑战性。如果谁统治了整个世界,或者第一个研制出先进技术从而获得宇宙飞船飞往半人马座阿尔法星(Alpha Centauri),谁就是游戏的胜利者。源码和文档可以在处获得。