História do Lisp, abra os olhos para programação funcional
Tags: lisp, clojure, racket, history
Published: 2018-10-12 08:44:45

---
title: História do Lisp, abra os olhos para programação funcional
published: true
tags: #lisp #clojure #racket #history
canonical_url: https://avelino.run/hist%C3%B3ria-do-lisp-abra-os-olhos-para-programa%C3%A7%C3%A3o-funcional/
cover_image: https://avelino.run/princess-lisp.png#center
---

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

Tenho uma formação na área de Matemática Aplicada (começa ai a loucura), Lisp foi uma das poucas linguagens de programação que me deparei dentro da academia (eu já programava em Perl profissionalmente e conhecia Python), 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 achar confortável os parênteses (seres humanos acostuma muito rápido com tudo) e comecei achar estranho a forma de pensar para escrever a lógica do software (por exemplo `(+ 1 2)`). Lisp usa [Notação polonesa](https://pt.wikipedia.org/wiki/Nota%C3%A7%C3%A3o_polonesa_inversa) 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](https://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_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](https://clisp.sourceforge.io/) na sua implementação [SBCL](http://www.sbcl.org/) (Steel Bank Common Lisp, que é mantido até hoje). Nesse momento eu virei super fã da linguagem e com a forma de lidar com software (de verdade) em produção. A empresa trabalhava com dados estatístico 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** saindo sua primeira versão em **1958** (durante um projeto de pesquisa em inteligência artificial) influenciado pelo seu aluno [Alonzo Church](https://en.wikipedia.org/wiki/Alonzo_Church). A motivação de **McCarthy** surgiu da idéia de desenvolver uma linguagem algébrica para processamento de listas para trabalho em IA (inteligência artificial). O 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 dados.

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](http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf)), assim chamada porque continha várias melhorias no interpretador **Lisp 1** original, mas não foi uma grande reestruturação como planejado que fosse ser o *Lisp 2*.

## Linha do tempo de linguagens que segue o dialeto Lisp

Vou começar apartir 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](https://en.wikipedia.org/wiki/MIT_Computer_Science_and_Artificial_Intelligence_Laboratory#Project_MAC) (não relacionado *Apple*, nem ligado com **McCarthy**)
- **Interlisp** *(1970 - 1990)/Dialeto* - Desenvolvido pela [BBN Tecnologia](https://en.wikipedia.org/wiki/BBN_Technologies)para PDP-10 rodando no sistema operacional [Tenex](https://en.wikipedia.org/wiki/TOPS-20), logo após adotado 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. Esta 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 sucessora 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 Sourcepara Linux e outros sistemas compatíveis com POSIX
- **EuLisp** *(1990 - 2015)/Dialeto* - Escopo estático e dinâmico, introduzida para Indústria e Acamia Europeia
- **ISLISP** *(1990 - mantido até hoje)/Dialeto* - feito para International Standard sobre 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](https://en.wikipedia.org/wiki/Just-in-time_compilation)
- **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](https://en.wikipedia.org/wiki/Andrew_Carnegie) e [Andrew Mellon](https://en.wikipedia.org/wiki/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 Common Lisp rodando na JVM (Java Virtual Machine), trazendo retro compatibilidade com todas linguagens que roda na JVM, é possível importar classes Java por exemplo
- **Arc** *(2005 - mantido até hoje)/Dialeto/Implementação* - desenvolvido por [Paul Graham](https://en.wikipedia.org/wiki/Paul_Graham_(computer_programmer)) e [Robert Morris](https://en.wikipedia.org/wiki/Robert_Tappan_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 at 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](https://github.com/rumlang/rum/)

Veja a [timeline visual](https://cdn.knightlab.com/libs/timeline3/latest/embed/index.html?source=1YM_sjX38YxaDpbNZo9Tm_c09VK1VqZAc2W1ABzfIKRE&font=Default&lang=pt&initial_zoom=2&height=650)

Não para por aqui, existe 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** itilizada como o dialeto mais utilizado.

Existe outra linguagem (mais usada que Lisp) o SQL ANSI ([American National Standards Institute](https://pt.wikipedia.org/wiki/American_National_Standards_Institute)):
- PostgreSQL
- MySQL
- Oracle
- Microsoft SQL
- e outros

Todos tem como dialeto o **SQL ANSI** mas evoluiu a partir do *default*.

## Por onde começar estudar Lisp?

Vamos supor que você gostou da loucura que é as diversas implementações e você quer estudar essa linguagem, por onde você começa?

Qual interpretador usar? Eu particularmente gosto do [SBCL](http://www.sbcl.org/) (particularmente é o que mais tenho usado para desenvolvimento), em produção uso [CCL](https://ccl.clozure.com/), se você trabalha com alguma tecnologia que roda em JVM vai para [Clojure](https://clojure.org/).

Segue alguns links:

- [How I got started with Common Lisp in 2017](https://anticrisis.github.io/2017/09/04/how-i-got-started-with-common-lisp-2017.html)
- [Awesome Lisp](https://github.com/CodyReichert/awesome-cl)
- [Awesome Racket](https://github.com/avelino/awesome-racket)
- [CLiki](https://cliki.net/)
- [lisp-lang.org](http://lisp-lang.org/)
- [racket-lang.org](https://racket-lang.org)
- [The Evolution of Lisp](https://www.dreamsongs.com/Files/HOPL2-Uncut.pdf)

{% twitter 949654068535939072 %}

## Deixe seu comentario

{% twitter 961596218316152832 %}