Brendan Eich está associado a uma das histórias mais conhecidas da programação: o JavaScript teria sido «criado em dez dias». A afirmação é correta quando se refere ao primeiro protótipo, desenvolvido na Netscape em maio de 1995. Torna-se enganadora se sugerir que a linguagem atual nasceu já completa nesse curto período. O JavaScript moderno resulta de três décadas de normalização, implementações concorrentes, correções e compromissos com uma das regras mais difíceis de contornar na Web: as páginas existentes devem continuar a funcionar.
A trajetória de Eich é interessante precisamente por causa desta tensão. Sob enorme pressão de tempo, concebeu uma linguagem fácil de incorporar numa página, mas combinou ideias de Scheme e Self por baixo de uma sintaxe familiar para programadores de C e Java. Uma necessidade comercial imediata acabou por dar origem à linguagem de programação nativa universal dos navegadores.
Antes da Netscape: um engenheiro de linguagens
Brendan Eich nasceu em Pittsburgh, em 1961. Estudou matemática e informática e concluiu, em 1986, um mestrado na University of Illinois Urbana-Champaign. Antes de entrar na Netscape, trabalhou, entre outras empresas, na Silicon Graphics e na MicroUnity, em compiladores e sistemas.
Este percurso é importante para compreender 1995. Eich não estava a improvisar sem referências: conhecia os compromissos entre desenho de linguagens, implementação e desempenho e tinha particular interesse por Scheme, um dialeto de Lisp no qual as funções ocupam um lugar central.
1995: dar comportamento às páginas Web
Em meados da década de 1990, a Web ainda era sobretudo um conjunto de documentos. O HTML descrevia uma página e o navegador apresentava-a; muitas interações exigiam um novo pedido ao servidor.
O Netscape Navigator era então um dos navegadores dominantes. A Netscape queria permitir aos autores acrescentar comportamento diretamente no navegador sem uma cadeia de desenvolvimento pesada. Em paralelo, colaborava com a Sun em torno de Java, orientado para aplicações mais estruturadas. A nova linguagem de scripting teria de ser mais leve, imediatamente utilizável a partir do HTML e dispensar uma compilação prévia.
Eich entrou na Netscape em abril de 1995. Em maio, construiu em cerca de dez dias o protótipo chamado Mocha. O trabalho prosseguiu antes do lançamento: a linguagem passou a chamar-se LiveScript e, no final de 1995, JavaScript, numa altura em que Java tinha enorme visibilidade comercial.
O nome provoca confusão desde então. JavaScript não é uma versão simplificada de Java. Os sistemas de tipos, os modelos de objetos e os ambientes de execução são diferentes. A semelhança mais visível resulta de uma sintaxe deliberadamente familiar, da família C: chavetas, operadores e estruturas de controlo.
Scheme e Self por baixo de uma aparência familiar
Sob essa superfície, o JavaScript trata as funções como valores de primeira classe. Podem ser guardadas em variáveis, passadas como argumentos ou devolvidas como resultado. Esta flexibilidade, familiar em Scheme, adapta-se particularmente bem a um navegador orientado por eventos, no qual uma função pode reagir a um clique, a uma introdução de dados ou à conclusão de uma operação.
Para os objetos, Eich inspirou-se em parte em Self. Em vez de fazer das classes o mecanismo fundamental, um objeto pode delegar a procura de propriedades noutro objeto através de uma cadeia de protótipos. A sintaxe class, acrescentada muito mais tarde, não substituiu este modelo: oferece uma forma mais familiar de trabalhar sobre ele.
O JavaScript adotou também tipagem dinâmica e numerosas conversões implícitas. Estas escolhas facilitavam a escrita rápida de pequenos scripts, mas também originavam comportamentos surpreendentes. Algumas das peculiaridades mais famosas da linguagem entendem-se melhor como resultado do compromisso inicial: o JavaScript tinha de ser acessível, expressivo e, sobretudo, ficar pronto muito depressa.
Eich desenvolveu simultaneamente o primeiro motor, antecessor do SpiderMonkey. Conceber em conjunto a sintaxe e a implementação acelerou a experimentação, mas deixou pouco tempo para rever certas decisões antes de páginas públicas começarem a depender delas.
Quando as peculiaridades se tornam contratos de compatibilidade
Na Web, um erro publicado é difícil de apagar. Quando milhares de sites dependem de determinado comportamento, alterá-lo de forma incompatível pode quebrá-los. Conversões implícitas, antigas regras de âmbito, o comportamento de this ou a coexistência de null e undefined fazem, por isso, parte de uma herança que o JavaScript moderno tem de gerir em vez de simplesmente eliminar.
Esta restrição explica tanto as arestas da linguagem como a sua extraordinária continuidade. Os padrões tendem a acrescentar mecanismos mais claros ou seguros sem retirar abruptamente os antigos.
É igualmente importante distinguir duas camadas: JavaScript não é o navegador. A linguagem define valores, funções, objetos e operações. API como o DOM, eventos, fetch ou armazenamento são fornecidas pelo ambiente Web. As incompatibilidades históricas podiam, portanto, resultar da linguagem ou das API do navegador que a rodeavam.
De JavaScript a ECMAScript
O sucesso da Netscape gerou rapidamente implementações concorrentes. A Microsoft introduziu JScript no Internet Explorer, enquanto os navegadores desenvolviam comportamentos e API próprios. Sem uma base comum, os autores de sites arriscavam-se a ter de escrever código diferente para navegadores diferentes.
Em 1996, a Netscape submeteu a linguagem à Ecma International. Em 1997 foi publicada a primeira edição da ECMA-262, sob o nome ECMAScript. Foi uma mudança decisiva: as regras centrais da linguagem deixaram de depender exclusivamente do navegador de um único fabricante.
JavaScript continuou a ser o nome histórico e corrente; ECMAScript é a especificação normalizada. Os navegadores implementam essa especificação e acrescentam depois as API próprias da Web.
A normalização não seguiu uma linha reta. O ambicioso projeto ECMAScript 4 encontrou, nos anos 2000, profundas divergências sobre a dimensão das alterações. O compromisso levou ao ECMAScript 5 em 2009. ECMAScript 2015 (ES6) representou depois um grande salto, com módulos, let e const, sintaxe de classes, funções arrow e muitas outras funcionalidades. A especificação passou posteriormente a evoluir num ciclo anual.
O fracasso do ES4 deixa uma lição importante: fazer evoluir uma linguagem omnipresente é tanto um problema de governação como de engenharia. É necessário melhorar a plataforma sem fragmentar as implementações nem abandonar milhares de milhões de linhas de código existente.
A história posterior do JavaScript vai muito além de Eich. Durante os anos 2000, Ajax popularizou interfaces capazes de comunicar com o servidor sem recarregar páginas inteiras. Bibliotecas e, mais tarde, frameworks ajudaram a estruturar aplicações cada vez mais complexas.
A partir de 2008, motores como o V8 aumentaram drasticamente o desempenho através de compilação just-in-time e outras otimizações. Em 2009, Ryan Dahl criou o Node.js, utilizando V8 para executar JavaScript fora do navegador. A linguagem chegou assim aos servidores, às ferramentas de desenvolvimento e a ambientes que o projeto da Netscape de 1995 nunca tinha previsto.
Eich não criou o V8 nem o Node.js, nem desenhou pessoalmente as muitas funcionalidades acrescentadas posteriormente ao ECMAScript. O seu papel histórico foi criar o núcleo inicial e participar na sua primeira normalização. A plataforma moderna é uma construção coletiva de comités de padrões, equipas de motores, fabricantes de navegadores, autores de bibliotecas, programadores e utilizadores.
Mozilla e a Web aberta
Depois da aquisição da Netscape pela AOL, Eich tornou-se uma figura importante do projeto Mozilla, assumindo responsabilidades técnicas e de direção. O Firefox, lançado em 2004, ajudou a restabelecer uma forte concorrência entre navegadores e a promover padrões Web abertos.
Em 2014, Eich tornou-se por pouco tempo diretor executivo da Mozilla, antes de se demitir no contexto de uma controvérsia pública relacionada com uma doação política efetuada em 2008. O episódio faz parte da sua trajetória profissional, mas é distinto da avaliação técnica do seu papel no JavaScript.
Em 2015, cofundou a Brave Software, que desenvolve o navegador Brave, centrado, entre outros aspetos, na proteção contra rastreamento e numa abordagem diferente à publicidade online. O projeto prolonga o seu envolvimento com navegadores, mas é separado do desenho e da normalização do JavaScript.
Porque Brendan Eich continua importante na história da Web
O contributo duradouro de Eich não consiste em ter desenhado sozinho o JavaScript moderno. Consiste em ter dado ao navegador, num momento decisivo da expansão da Web, uma linguagem suficientemente acessível para se difundir de imediato e suficientemente expressiva para ultrapassar rapidamente os pequenos scripts a que parecia destinada.
As suas influências ajudam a explicar essa capacidade de adaptação: funções de primeira classe, objetos baseados em protótipos e comportamento dinâmico permitem estilos de programação muito diferentes. Os compromissos iniciais explicam também muitas das dificuldades da linguagem. As duas dimensões pertencem à mesma história.
Acima de tudo, o JavaScript mostra como uma linguagem distribuída na Web deixa rapidamente de pertencer ao seu criador. Torna-se um contrato coletivo entre uma especificação, vários motores, API, ferramentas e uma enorme quantidade de software existente. O seu sucesso depende tanto dessa continuidade como do desenho original.
Cronologia
- 1961: Brendan Eich nasce em Pittsburgh.
- 1986: conclui um mestrado na University of Illinois Urbana-Champaign.
- Abril de 1995: entra na Netscape.
- Maio de 1995: constrói o protótipo Mocha em cerca de dez dias.
- 1995: Mocha passa a LiveScript e depois a JavaScript.
- 1996: a Netscape submete a linguagem à Ecma International.
- 1997: é publicada a primeira edição da ECMA-262.
- 1998: Eich participa na criação do projeto Mozilla.
- 2004: lançamento do Firefox.
- 2009: ECMAScript 5; Ryan Dahl lança o Node.js.
- 2014: breve mandato de Eich como diretor executivo da Mozilla.
- 2015: ECMAScript 2015 e cofundação da Brave Software.
- Hoje: o ECMAScript continua a evoluir e o JavaScript permanece a linguagem nativa universal dos navegadores Web.
Perguntas frequentes
Brendan Eich criou realmente o JavaScript em dez dias?
Criou o primeiro protótipo, Mocha, em cerca de dez dias em maio de 1995. A linguagem continuou a mudar antes do lançamento e evoluiu depois durante décadas através de padrões e diferentes implementações.
JavaScript é uma versão de Java?
Não. O nome e parte da sintaxe criam uma semelhança enganadora. O JavaScript tem tipagem dinâmica e baseia-se fundamentalmente em protótipos; Java foi concebido com outro modelo e outro ambiente de execução.
Qual é a diferença entre JavaScript e ECMAScript?
ECMAScript é a especificação padrão que define o núcleo da linguagem. JavaScript é o nome corrente das suas implementações. Num navegador, JavaScript funciona ainda com API Web como o DOM.
Porque utiliza JavaScript protótipos?
Eich inspirou-se em parte em Self. Os objetos podem delegar a procura de propriedades noutros objetos. A sintaxe moderna de classes não substitui este mecanismo: é construída sobre ele.
Brendan Eich criou o Node.js?
Não. Ryan Dahl criou o Node.js em 2009 utilizando o motor V8. A sua importância mostra até que ponto o JavaScript ultrapassou a função originalmente prevista nas páginas Web.
Porque continuam a existir as antigas peculiaridades do JavaScript?
Porque a compatibilidade retroativa é uma restrição fundamental da Web. Remover ou alterar um comportamento antigo poderia quebrar sites que continuam online, pelo que a linguagem tende a evoluir acrescentando alternativas melhores enquanto conserva grande parte do seu passado.