计算机程序的构造和解释(JavaScript版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

致谢

《计算机程序的构造和解释》的JavaScript改编本(SICP JS)是我们在新加坡国立大学(NUS)为课程CS1101S开发的。我们已经共同教授这个课程6年了,并由Low Kok Lim对教学情况做统计,其可靠的教育评估也是本课程和教育项目成功的关键。CS1101S教学团队还包括很多NUS同事和超过300位本科学生助理,他们在过去9年里的持续地反馈,推动并帮助我们解决了无数与JavaScript相关的问题,消除了许多不必要的复杂性,同时维持了SICP和JavaScript两者的基本特点。

SICP JS不仅是一个有关教科书的项目,也是一个软件项目。我们于2008年从原书的作者那里得到了LATEX源文件。Liu Hang开发了SICP JS早期的工具链,Feng Piaopiao做了些改进。Chan Ger Hean为打印版开发了第一个工具,Jolyn Tan基于该工具开发了第一个用于电子书版本的工具,He Xinyue和Wang Qian为本书的对照版重整了这些工具。Samuel Fang设计并开发了SICP JS的在线版本。

CS1101S和SICP JS的在线版深度依赖一个名为Source Academy的软件系统,该系统支持JavaScript的一个称为Source的子语言。在准备SICP JS的过程中,数十名学生对Source Academy做出了贡献,该系统已经永久地把他们列为“贡献者”。2020年以来,NUS课程CS4215(程序设计语言的实现)的学生贡献了几个程序设计语言的实现,它们被用在SICP JS里。本书当前版本3.4节的源代码是Zhengqun Koo和Jonathan Chan开发的;4.2节用的惰性实现是Jellouli Ahmed、Ian Kendall Duncan、Cruz Jomari Evangelista和Alden Tan开发的;4.3节使用的非确定性实现是Arsalan Cheema和Anubhav开发的;Daryl Tan帮助把这些实现集成到Academy系统里。

我们衷心感谢STINT(瑞典研究与高等教育国际合作基金会),其学术假计划使Martin和Tobias建立了联系,还支持Tobias作为CS1101S的合作教师加入SICP JS项目。

我们还想感谢Allen Wrifs-Brock领导的ECMAScript 2015委员会的勇敢工作。SICP JS深度依赖常量、let表达式和lambda表达式,所有这些都是ECMAScript 2015加入JavaScript的特征。这些新特征使我们能尽量接近并维持SICP原有的展示形式和精神。Guy Lewis Steele Jr.领导了ECMAScript的第一次标准化,还对第4章的一些练习提供了细致且有价值的反馈。

Martin Henz和Tobias Wrigstad