在我的《介绍塞耶龙项目》演示中,我提出的一个观点被广泛误解(可能主要是那些试图误解的人)。鉴于我在多个场合受到批评,这值得回应。令人反感的话是以下这些
- Java的语法根植于高中和数学家、工程师和软件开发人员使用的标准、日常数学观念
- 而不是只有理论计算机科学家使用的lambda演算
当然,现在我读回来看,我承认这里试图表达的意思非常不清楚。为了自我辩护,这是从中国一个小型会议的幻灯片上来的,不知怎么就出现在了slashdot上。这个声明的背景是在一个幻灯片上,我列举了一些我认为Java成为商业计算主流语言的原因。这实际上是一个非常小的点,你同意与否并不特别重要。
因此,很多人决定我试图表达的是Java在某些方面比lambda演算更好或“更数学化”。然而,这种解释甚至没有意义。Java是一种编程语言。lambda演算是一个用于研究函数数学行为的正式系统。因此,很明显,这不可能是我的意思。
现在,我理解在这些日子里,当“抓住把柄”的煽动和廉价得分取代了深思熟虑的智力辩论,许多人都不知道根据“慈善原则”阅读论点的想法,即在作者的意思不清楚时寻找最慈善的可能解释。但我是一个老式的家伙,我对这种缺乏……嗯……礼貌感到惊讶。
无论如何,既然我们知道——从假设我不是一个彻底的白痴开始——我不可能是在试图说些彻底愚蠢的话,那么让我们问问自己,我究竟是在尝试说些什么。(恐怕我的真正意图最终会让人有些失望,毕竟经过了这么多的纷争。)理解的关键在于我对单词《语法
》的使用。集中精力关注这个词一秒钟。我的意思是,Java使用一种函数调用的表示法,例如,f(x,y),这是直接从工程、科学和应用数学中日常使用的数学符号中借鉴而来的。它并没有继承通常表达lambda演算的表示法,例如f x y或者\x y -> x*y。我在谈论的是《表示法》。我并不是在谈论实际的与lambda演算或其他数学概念或形式系统的语义关系。
现在,可能存在一些非常好的理由,让一种语言想要使用通常表达lambda演算的表示法。可能存在一些问题,这种表示法在这里会简单得多。我只是在争辩,这对于旨在用于商业或科学计算的编程语言来说是一个可读性的障碍。再次强调,我是否同意并不重要。
现在等待所有人对我称之为《无知
》的道歉如潮水般涌来。我特别看着你,Scala爱好者们 ;-)