書名: 計算機程序的構造和解釋(JavaScript版)作者名: (美)哈羅德·阿貝爾森等本章字數: 1331字更新時間: 2024-06-06 19:10:09
前言
《計算機程序的構造和解釋》(SICP)給讀者介紹計算的核心思想,采用的方法是為計算建立一系列的概念模型。第1章到第3章涵蓋了所有時新的高級程序設計語言所共有的程序設計概念。在原SICP的兩個版本里,程序設計示例用程序設計語言Scheme描述,該語言具有極簡的風格和基于表達式的語法形式,這些使原書可以聚焦于基礎概念,而不是所選語言本身的設計。第4章和第5章使用Scheme構造Scheme的處理器,用以加深讀者對概念模型的理解,并探索了語言的一些擴充和替代結構。
自1984年出版,以及1996年第2版出版后,SICP被全世界許多大學和學院選作教科書。新加坡國立大學(NUS)1997年開始開設基于SICP的引論課程CS1101S。20世紀90年代中期,Python、JavaScript和Ruby等語言發展起來,它們都共享了Scheme的核心設計元素,但采用了更復雜的基于語句的語法結構,使用了人們更熟悉的代數表達形式(中綴形式)。這些語言的興起,導致一些教師調整基于SICP的課程,典型方法是把其中的示例程序都翻譯為他們所選的語言,再加上一些特別的與語言相關的材料,并略去原書的第4章和第5章。
把SICP改編到JavaScript
在NUS,把SICP的第2版改編到JavaScript(SCIP JS)的工作開始于2008年,2012年CS1101S課程轉到了JavaScript。ECMAScript 2015語言標準引進了lambda表達式、尾遞歸和分程序作用域的變量和常量,這些使有關的改編更接近原書。我們對SICP的實質性修改不多,只出現在JavaScript與Scheme的差異使我們感到不得不修改的地方。這本書只涉及JavaScript的很少一部分,所以絕不建議讀者用它學習這個語言。舉例說,JavaScript對象的概念在本書里就完全沒有提及——而對象被認為是該語言最基本的成分。
通過加入一些模擬Scheme原語的庫,包括支持表結構的庫,并相應修改正文中的文字,翻譯第1~3章的程序是直截了當的。然而,轉到JavaScript,也迫使我們對第4章和第5章的解釋器和編譯器做了一些實質性的修改,以便處理返回語句。Scheme的基于表達式的語法里沒有返回語句,而這種語句是基于語句的語言中不可或缺的特征。
通過使用JavaScript,第1章到第3章給讀者介紹了今天大多數主流語言的語法風格。然而,在第4章,語法風格產生了重大變化,因為把程序直接表示為數據結構已經無法看作是理所當然了。但這也為我們提供了一個機會,在4.1節為讀者介紹語法分析,這是程序設計語言處理器的一個重要組成部分。在4.4節,JavaScript嚴格的語法結構使展示邏輯程序設計系統的工作大大復雜化,顯示出用JavaScript作為程序語言設計工具的局限性。
使用SICP JS資源
MIT出版社有關SICP JS的網頁上有針對本書使用者的支持鏈接,那里提供了書中所有程序和擴展教學資源,包括一大批附加練習,以及安排典型的大學一學期課程的SICP JS選學子集的建議。本書中的JavaScript程序可以在符合ECMAScript 2020規范(ECMA 2020)的任何JavaScript解釋器推薦的嚴格模式下運行。MIT出版社的網頁包含一個名為sicp的JavaScript包,它提供了本書中當作“原語”的所有JavaScript函數。
致讀者
我們真誠地希望,如果你在閱讀本書時第一次遇到程序設計,你將能運用自己對計算機程序的構造和解釋的新理解去學習更多的程序設計語言,包括Scheme和完整的JavaScript。如果你在拿起SICP JS之前已經學過JavaScript,你可能得到有關該語言背后的基本概念的一些新見解,并看到只需要多么少的東西就可以得到多么多。如果你遇到SICP JS時已經學過有關原SICP的知識,你可能看到熟悉的思想如何用一種新形式表達,還可以欣賞在線的對照版本(在本書的網頁上可用),它使你可以并排地對照著看SICP和SICP JS。
Martin Henz和Tobias Wrigstad
- Python程序設計教程(第2版)
- Rust編程:入門、實戰與進階
- 跟小海龜學Python
- Java虛擬機字節碼:從入門到實戰
- Python Data Analysis Cookbook
- Android系統原理及開發要點詳解
- Mastering ROS for Robotics Programming
- Learning Concurrency in Kotlin
- iOS自動化測試實戰:基于Appium、Python與Pytest
- 計算機應用基礎項目化教程
- 深入實踐DDD:以DSL驅動復雜軟件開發
- SQL Server 2012 數據庫應用教程(第3版)
- Scratch編程從入門到精通
- Visual FoxPro程序設計教程(第3版)
- 數據結構:Python語言描述