译:"A closure is poor man’s object, an object is poor man’s closure."
编程范式的讨论,算是程序员社区的日常话题。函数式编程和面向对象编程,各是什么、孰优孰劣,争论不休,如同无休无止的宗教战争。而 closure 和 object 则是 fp 和 oop 各自的代表概念。
要翻译的这篇文章,写于 2003 年,是一条邮件列表里的消息。它出自一个很长的讨论串,始作俑者1标题 “What’s so cool about Scheme?”,并不容易想到和文章标题的联系,它最后一段留下了一个问题:
Is Scheme really a ‘functional programming language’ or is it just a really general purpose tool that allows functional programming?
Scheme 真的是一门“函数式编程”语言吗?便引发了长长的讨论,讨论什么是函数式编程,函数式编程必要的特性有哪些,什么是 Scheme / Lisp 的特质。过程中不可避免会提到其他的编程范式,这个「其他」是指面向对象。
便到了这篇文章,http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg03277.html。它先后从倾向闭包和倾向对象的角度,来阐发一者无非是低级版本的另一者。这两种针锋相对的态度出现在同一篇文章中,仿佛太极阴阳,两相融合。因为这种平等宽容的态度,我很喜欢这个文章;另一个原因是文章最后编的禅宗公案,有棒喝,有机锋,给原本朴实的技术讨论增加了不少禅意。
“A closure is poor man’s object, an object is poor man’s closure.” 从文章中提取出来的这个句子,成为了编程语言社区里的一条名言或是警句;也被用作这篇文章的标题。