译后记
其实也不算什么译后记。在翻译完前面一篇文章之后,没更多想说的了。毕竟译文前面也写了很长一段,能憋出来的都写在里面了。开这一篇文章其实是因为前面准备这篇译文的时候,把整个讨论串的消息都读了一遍,感觉其中有不少精彩的观点和论述,摘录出来放到这里。
翻译太难,这里就直接放原文,不翻译了。斜体和粗体均为编者所加。和之前一样,每段后面附上原文链接。后面的中文部分是我的一些想法。
译:"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.” 从文章中提取出来的这个句子,成为了编程语言社区里的一条名言或是警句;也被用作这篇文章的标题。