Dev (Back & Front)ARTIGO

História do Lisp: abra os olhos para programação funcional

Neste artigo, Thiago Avelino apresenta um compilado cronológico da história completa do Lisp e fala sobre a importância da programação funcional.

Como começou minha paixão por parênteses (ops, Lisp)?

Tenho uma formação na área de Matemática Aplicada (começa aí a loucura), e Lisp foi uma das poucas linguagens de programação que me deparei dentro da academia (já programava em Perl profissionalmente e conhecia PythonPython56 conteúdosVSCode + Python + Alexa: Desenvolva e teste skills para alexa localmente com pythonDev (Back & Front) · out 2025Dominando decoradores em Python: um guia completo com exemplosDev (Back & Front) · jan 2025Desenvolvimento de software: diferenças entre Python, JavaScript e JavaGestão Dev & TI · nov 2024Ver tudo em Dev (Back & Front) ). Quando vi aqueles parênteses, de cara pensei: “Isso não é para mim (isso é uma loucura de Matemática/Acadêmico que nunca saiu para o mercado de trabalho)”.

Com o passar das aulas eu comecei a achar os parênteses confortáveis (seres humanos acostumam muito rápido com tudo) e comecei a achar estranho a forma de pensar para escrever a lógica do software (por exemplo, (+ 1 2)). Lisp usa Notação polonesa como forma de expressão. Isso foi complicado acostumar – no dia a dia usava uma linguagem de programação “normal” e dentro da academia, funcional (sem saber que era funcional).

Com o tempo comecei pegar gosto pela forma de pensar (funcionalmente) e acabei entrando para um projeto (no mercado, não acadêmico), que usava Common Lisp na sua implementação SBCL (Steel Bank Common Lisp, que é mantido até hoje).

Nesse momento eu virei super fã da linguagem e sua forma de lidar com software (de verdade) em produção. A empresa trabalhava com dados estatísticos do mercado de Pesquisa Cliníca, e LISP foi tomado como linguagem por matemáticos. Isso facilitou muito a comunicação entre o time de engenharia e acadêmicos.

Como tudo começou?

É um conjunto de linguagem de programação especificada pelo John McCarthy, em 1955, com sua primeira versão em 1958 (durante um projeto de pesquisa em inteligência artificialInteligência artificial440 conteúdosUX e IA: Transformando Experiências Digitais com Inteligência ArtificialProduto & UX · jan 2025MCP: O que é e por que você vai ouvir falar disso em breve?AI · jul 2025IA generativa e a urgência de reconstruir nossa relação com a verdadeAI · jun 2025Ver tudo em AI ), influenciado pelo seu aluno Alonzo Church. A motivação de McCarthy surgiu da ideia de desenvolver uma linguagem algébrica para processamento de listas para trabalho em IA (inteligência artificial).

Seu nome vem de LISt Processing (a lista é a estrutura de dados fundamental desta linguagem). Tanto os dados como o programa são representados como listas, o que permite que a linguagem manipule o código fonte como qualquer outro tipo de dado, nascendo assim o Lisp 1, a versão que realmente foi distribuída por McCarthy e outros do MIT (Massachussets Institute of Tecnology). Foi Lisp 1.5 (manual de programadores), assim chamada porque continha várias melhorias no interpretador Lisp 1 original, mas não foi uma grande reestruturação como planejado que seria o Lisp 2.

Linha do tempo de linguagens que segue o dialeto Lisp

Vou começar a partir do Lisp 1.5, pois foi o primeiro a ser distribuido.

  • Lisp 1.5 (1955 – 1965)/Dialeto: primeira implementação distribuída por McCarthy e outros do MIT.
  • Maclisp (1965 – 1985)/Dialeto: desenvolvido pelo MIT Project MAC (não relacionado a Apple, nem ligado com McCarthy).
  • Interlisp (1970 – 1990)/Dialeto: desenvolvido pela BBN Tecnologia para PDP-10 rodando no sistema operacional Tenex, adotado, em seguida, pela máquina Xerox Lisp o InterLisp-D.
  • ZetaLisp (1975 – 1995)/Dialeto: denominada Lisp Machine – usado nas máquinas Lisp, descendente direto de Maclisp. Tendo como grande influência o Common Lisp.
  • Scheme (1975 – mantido até hoje)/Dialeto: diferente de Common Lisp, linguagem que usa dialeto Lisp
  • NIL (1975 – 1980)/Dialeto: sucessor direto do Maclisp, com muitas influências de Scheme. Essa versão do Common Lisp estava disponível para plataformas de grande alcance e foi aceita por muitos como um padrão, de fato, até a publicação do ANSI Common Lisp (ANSI x3.226-1994).
  • Common Lisp (1980 – mantido até hoje)/Dialeto: aka Common Lisp the Language (a linguagem) – as tentativas e divergência entre ZetaLisp, Spice Lisp, nil, e S-1 Lisp para criar um dialeto sucessor para Maclisp. Common Lisp estava disponível para plataformas de grande alcance e foi aceita por muitos como padrão até a publicação do ANSI Common Lisp (ANSI X 3.226-1994).
  • CCL (1984 – mantido até hoje)/Implementação: baseado no dialeto Common Lisp, antiga MCL
  • T (1985 – mantido até hoje)/Dialeto: derivado de Scheme, escrito por Jonathan A. Rees, Kent M. Pitman e Norman, Adams da Yale University com experiencia de design de linguagem e implementação. Em 1987 foi publicado o livro “The T Programming Language: A Dialect of LISP“.
  • Emacs Lisp (1985 – mantido até hoje)/Dialeto/Implementação: usado como linguagem de script (configuração) do editor Emacs (mantido pelo projeto GNU).
  • AutoLISP (1985 – mantido até hoje)/Dialeto/Implementação: feito para AutoCAD, rodando nos produtos AutoCAD Map 3D, AutoCAD Architecture e AutoCAD Mechanical.
  • OpenLisp (1985 – mantido até hoje)/Dialeto: desenvolvido por Christian Jullie escrito, em C e Lisp, que deu origem a implementação ISLISP.
  • PicoLisp (1985 – mantido até hoje)/Dialeto: Open Source para LinuxLinux34 conteúdosKali Linux em um Servidor VPS: como, quando e por que usar?DevSecOps · dez 2024Construindo um Windows Service ou Linux Daemon com Worker Service & .NET Core – Parte 2Dev (Back & Front) · jul 2020Criando uma WebApi utilizando .NET, Linux e VSCodeDev (Back & Front) · ago 2019Ver tudo em DevSecOps e outros sistemas compatíveis com POSIX.
  • EuLisp (1990 – 2015)/Dialeto: escopo estático e dinâmico, introduzido para Indústria e Academia Europeia.
  • ISLISP (1990 – mantido até hoje)/Dialeto: feito para International Standard sob licença de Dominio Público.
  • newLISP (1990 – mantido até hoje)/Dialeto: linguagem Open Source escrita por Lutz Mueller, ditribuída pela licença GPL (GNU General Public License) com fortes influencias de Common Lisp e Scheme.
  • Racket (1990 – mantido até hoje)/Dialeto: multi paradigma que veio da familía Scheme, um de seus objetivos de projeto é servir como uma plataforma para a criação de linguagens, design e implementação. Sua runtime usa JIT.
  • GNU Guile (1990 – mantido até hoje)/Implementação: usado para extensão de sistema para o Projeto GNU, baseado em Scheme.
  • SBCL (1999 – mantido até hoje)/Implementação: baseado no dialeto Common Lisp com recurso de alta performance no compilador, suporte a unicode e threading. Nasceu como fork do Carnegie Mellon University Common Lisp por Andrew Carnegie e Andrew Mellon.
  • Visual LISP (2000 – mantido até hoje)/Dialeto/Implementação: antigo AutoLisp após ser comprado pela Autodesk.
  • Clojure (2005 – mantido até hoje)/Dialeto/Implementação: começou sendo baseado em Common Lisp rodando na JVM (Java Virtual Machine), trazendo retrocompatibilidade com todas as linguagens que rodam na JVM. É possível importar classes Java, por exemplo.
  • Arc (2005 – mantido até hoje)/Dialeto/Implementação: desenvolvido por Paul Graham e Robert Morris, escrito usando Racket.
  • LFE (2005 – mantido até hoje)/Dialeto/Implementação: Lisp Flavored Erlang, implementado em Erlang.
  • ACL2 (2005 – mantido até hoje)/Dialeto/Implementação: criado por Matt Kaufmann e J Strother Moore dentro da University of Texas, em Austin.
  • Hy (2013 – mantido até hoje)/Dialeto/Implementação: apelido para Hylang, implementado em Python. Nasceu dentro da PyCon 2013, escrito por Paul Tagliamonte.
  • Rum (2017 – mantido até hoje)/Dialeto/Implementação: implementado em Go, projeto extremamente novo. Veja o GitHub e a timeline visual.

Não para por aqui. Existem muitas outras derivações.

É isso mesmo! Lisp é uma linguagem de programação que tem vários dialetos e implementações, com a ANSI Common Lisp utilizada como o dialeto mais utilizado.

Existe outra linguagem (mais usada que Lisp), o SQLSQL64 conteúdosSQL Server – Como evitar SQL Injection?Data · mai 2019Azure SQL DB Managed InstanceData · abr 2019SQL Server – Como evitar SQL Injection? Pare de utilizar Query Dinâmica como EXEC(@Query)Data · abr 2019Ver tudo em Data ANSI (American National Standards Institute): PostgreSQL, MySQL, Oracle, Microsoft SQL, entre outros.

Todos têm como dialeto o SQL ANSI, mas evoluiu a partir do default.

Por onde começar estudar Lisp?

Vamos supor que você gostou da loucura das diversas implementações e quer estudar essa linguagem. Por onde você começa? Qual interpretador usar? Eu, particularmente, gosto do SBCL (particularmente é o que mais tenho usado para desenvolvimento). Em produção uso CCL – se você trabalha com alguma tecnologia que roda em JVM vai para Clojure.

Segue alguns links:

Fundador da nuveo.ai/levpay (com Banco Rendimento) e Matemático pelo IME-USP. Trabalha no dia a dia com inteligência artificial, rede neural (usando técnicas de machine e deep learning) e visão computacional. Com a necessidade de processar grandes volumes de dados o seu foco de pesquisa e desenvolvimento incluem Go, Racket/Clojure (apaixonado por dialeto lisp), Python, sistemas distribuídos, concorrência e já passou por diversos projetos Open Source https://github.com/avelino.

Ver perfil