Prefácio
O livro Estrutura e Interpretação de Programas de Computador (SICP) apresenta ao leitor as ideias centrais da computação, estabelecendo uma série de modelos mentais para a computação. Os capítulos 1 a 3 cobrem os conceitos de programação que são comuns a todas as linguagens de programação de alto nível modernas. As duas primeiras edições originais do SICP usam a linguagem de programação Scheme em seus exemplos de programas, cuja sintaxe minimalista e orientada à expressão permite que o livro se concentre nas ideias subjacentes, em vez do design da linguagem escolhida. Os capítulos 4 e 5 usam Scheme para formular processadores de linguagem para Scheme, aprofundando a compreensão dos leitores dos modelos mentais e explorando extensões e alternativas de linguagem.
Desde sua publicação em 1984 e sua segunda edição em 1996, o SICP foi adotado como um livro-texto por universidades e faculdades em todo o mundo, incluindo a Universidade Nacional de Cingapura (NUS), que introduziu o curso introdutório baseado no SICP CS1101S em 1997. Em meados da década de 1990, surgiram as linguagens Python, JavaScript e Ruby, que compartilham elementos de design centrais com Scheme, mas que empregam uma sintaxe orientada a instruções mais complexa que usa notação algébrica familiar (infixo). Seu aumento de popularidade levou os instrutores a adaptarem seus cursos baseados no SICP, normalmente traduzindo os programas de exemplo para a linguagem de sua escolha, adicionando material específico para aquela linguagem e omitindo o material dos capítulos 4 e 5.
Adaptando SICP para JavaScript
A obra de adaptação da segunda edição do SICP para JavaScript (SICP JS) começou na NUS em 2008 e o CS1101S mudou para o JavaScript em 2012. O padrão de linguagem ECMAScript 2015 introduziu expressões lambda, recursão de cauda e variáveis e constantes com escopo de bloco, que permitiu que a adaptação ficasse bastante próxima do original. Fizemos mudanças substanciais no SICP apenas quando sentimos que foram forçados por diferenças entre JavaScript e Scheme. O livro cobre apenas uma pequena fração do JavaScript, portanto, o leitor não seria aconselhado a usá-lo para aprender a linguagem. Por exemplo, a noção de um objeto JavaScript – considerado um de seus ingredientes fundamentais por qualquer medida – nem mesmo é mencionada!
Foi fácil traduzir os programas dos capítulos 1 a 3 para JavaScript, adicionando bibliotecas que espelham primitivas de Scheme – incluindo suporte para estrutura de lista – e adaptando o texto de acordo. No entanto, a mudança para o JavaScript nos forçou a fazer mudanças sutis nos interpretadores e no compilador dos capítulos 4 e 5 para lidar com as instruções de retorno. A sintaxe orientada a expressões de Scheme não tem instruções de retorno, que são uma característica proeminente das linguagens orientadas a instruções.
Ao usar JavaScript, os capítulos 1 a 3 apresentam ao leitor o estilo sintático da maioria das linguagens tradicionais de hoje. No entanto, esse mesmo estilo sintático deu origem a mudanças significativas no capítulo 4, porque a representação direta de programas como estruturas de dados não podia mais ser tomada como certa. Isso nos deu a oportunidade de apresentar ao leitor a noção de análise de programa na seção 4.1, um componente importante dos processadores de linguagem de programação. Na seção 4.4, a estrutura sintática rígida do JavaScript complicou a implementação do sistema de programação lógica apresentado e expôs as limitações do JavaScript como uma ferramenta para o projeto de linguagem de programação.
Recursos para usar SICP JS
A página web do MIT Press do SICP JS possui links para suporte aos usuários deste livro. Isso fornece todos os programas do livro e recursos extensivos para instrutores, incluindo uma grande coleção de exercícios adicionais e recomendações sobre a seleção de um subconjunto de SICP JS que pode ser abordado em um semestre típico de faculdade. Os programas JavaScript no livro são executados no modo estrito recomendado em qualquer interpretador JavaScript que esteja em conformidade com a especificação ECMAScript 2020 de JavaScript (ECMA 2020). A página web do MIT Press inclui o pacote JavaScript sicp, que fornece todas as funções JavaScript consideradas "primitivas" no livro.
Ao leitor
Esperamos sinceramente que, se este livro for seu primeiro encontro com a programação, você use sua compreensão recém-adquirida da estrutura e interpretação de programas de computador para aprender mais linguagens de programação, incluindo Scheme e a linguagem JavaScript completa. Se você aprendeu JavaScript antes de escolher o SICP JS, pode obter novos insights sobre os conceitos fundamentais que fundamentam a linguagem e descobrir o quanto pode ser alcançado com tão pouco. Se você vier ao SICP JS com um conhecimento do SICP original, poderá gostar de ver ideias familiares apresentadas em um novo formato – e poderá apreciar a edição de comparação online, disponível na página da web do livro, onde SICP JS e SICP podem ser vistos lado ao lado.
- Martin Henz and Tobias Wrigstad