译:"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.” 从文章中提取 出来的这个句子,成为了编程语言社区里的一条名言或是警句;也被用作这篇文章的标题。