OCaml Modular Programming
按:本文整理自《OCaml Programming: Correct + Efficient + Beautiful》一书的第五章 Modular Programming。
初学 OCaml 时,建议先看完《OCaml from the Very Beginning》,然后看《Learn Programming with OCaml》的前三(或五)章,然后再来看《OCaml Programming》第五章。再往后,就按需去看吧。
在程序规模很小的时候,如数十行,它完全可以由一个人完成,代码放在单个文件中。但在真实世界的开发中,程序规模要大好几个数量级,多的能到数千万行。此时,它必须有多个程序员完成,并且代码放在不同文件中。
其中一个解决方案是模块化编程(modular programming):程序由多个分别开发的模块构成。划分为模块后,每个程序员都仅关注于手头的任务,无须理解整个程序。
同时,我们需要确保每个模块的准确性,此时使用的是 local reasoning:不需要太多关注整体的程序,而是关注它需要满足的 contract(此为接口)。如果每个人都能正确完成,那么各个分别开发的程序组合起来之后应当可以正确工作。这是模块化编程的核心思想。
因此,构建大型程序必须要使用 abstraction,即上面所提及的 contract、接口。不同组件之间通过 abstraction 连接,而非实现的细节。
模块通过给出它们应当完成的功能(specification,规格 or 规范)进行抽象。好的模块规格应当是清晰易懂的,提供恰到好处的信息,使得该模块的 client 能正确使用之。