1.4 系统设计中的此编程风格

在如今轻松拥有GB级内存的计算机的时代,此处展示的受限内存场景已是过去的模糊记忆。即使现代编程语言鼓励忽视内存管理,然而,随着现代程序处理的数据量不断增长,很容易让程序的内存消耗失控,从而对程序的运行时性能产生负面影响。一定程度地了解不同编程风格对内存使用的影响总是一件好事。

如今,许多应用程序——那些所谓的大数据范畴内的应用程序——重新把处理小内存场景的复杂性带回到人们的视野。在这种情况下,虽然从绝对数值上说内存并不稀缺,但它仍比需要处理的数据规模小很多。例如,如果将词频程序应用到整个Gutenberg Collection,而不仅仅是《傲慢与偏见》一本书,我们可能无法同时将所有书籍都保存到内存中,甚至可能无法在内存中保存所有词频列表。一旦数据无法一次性全部装入内存,开发人员就必须设计智能的模式来:(1)表示需要处理的数据,以便在给定时间将更多的数据载入内存;(2)在主存储器和辅助存储器之间轮换数据。在这些约束条件下进行编程,往往会使程序感觉更像往日的美好风格。

关于名称的缺失,整个20世纪50年代和60年代,编程语言演变背后的主要驱动力之一正是消除认知的间接性,正如示例中所示的那些:我们希望程序文本尽可能多地反映领域内的高级概念,而不是反映低级的机器概念并依靠外部文档在两者之间进行映射。但是,尽管编程语言长期以来一直提供用户定义的命名抽象,但程序员未能恰当地命名他们的程序元素、API和整个组件的情况并不少见,而这会导致程序、库和系统就像本示例显示的那样晦涩难懂。

这种往日的美好风格提醒了我们该多么感激现在这个时代——能够在内存中保存如此多的数据并能够为每个程序元素提供适当的名称!