O que fixo especial a Lisp

«A mellor linguaxe de programación xamais creada«
- Alan Kay, "on Lisp"

O que fixo especial a Lisp

Cando McCarthy desenvolveu Lisp a finais da década de 1950, era radicalmente diferente das linguas existentes, a máis importante das cales era Fortran.

Lisp presentou nove novas ideas:

1. Condicionais. As declaracións condicionais son construcións if-then-else. Agora dámolos por feitos. Estiveron inventado McCarthy durante o desenvolvemento de Lisp. (Fortran nese momento só tiña declaracións goto, estreitamente vinculadas a unha instrución de rama sobre o hardware subxacente.) McCarthy, mentres estaba no comité de Algol, contribuíu con condicionais a Algol, desde onde se estenderon a outras linguas.

2. Un tipo de función. En Lisp, as funcións son obxectos de primeira clase: son un tipo de datos, igual que os números, as cadeas, etc., e teñen unha representación literal, pódense almacenar en variables, poden pasarse como argumentos, etc.

3. Recursión. A recursividade, por suposto, existía como concepto matemático antes de Lisp, pero Lisp foi a primeira linguaxe de programación que o admitiu. (Isto quizais estea implícito na creación de funcións como obxectos de primeira clase).

4. Un novo concepto de variables. En Lisp, todas as variables son punteiros efectivos. Os valores son os que teñen os tipos, non as variables, e asignar ou vincular variables significa copiar punteiros, non o que apuntan.

5. Recollida de lixo.

6. Programas compostos por expresións. Os programas Lisp son árbores de expresións, cada unha das cales devolve un valor. (Algunhas expresións Lisp poden devolver varios valores.) Isto contrasta con Fortran e moitas outras linguaxes exitosas que distinguen entre "expresións" e "sentencias".

Era natural ter esta distinción en Fortran porque a linguaxe estaba orientada a liñas (non é sorprendente para unha lingua cuxo formato de entrada era unha tarxeta perforada). Non puido ter declaracións aniñadas. E mentres necesitabas expresións matemáticas para funcionar, non tiña sentido que outra cousa devolvese un valor porque podería non haber nada esperando a ser devolto.

As restricións levantáronse coa aparición das linguaxes estruturadas en bloques, pero para entón xa era demasiado tarde. Xa se estableceu a distinción entre expresións e enunciados. Pasou de Fortran a Algol e máis adiante aos seus descendentes.

Cando unha lingua está feita enteiramente de expresións, podes compoñer expresións como queiras. Podes escribir calquera dos dous (usando a sintaxe Arco)

(if foo (= x 1) (= x 2))

ou

(= x (if foo 1 2))

7. Un tipo de símbolo. Os caracteres son diferentes das cadeas, nese caso pode comprobar a igualdade comparando os punteiros.

8. Unha notación para o código utilizando árbores de símbolos.

9. Todo o idioma está sempre dispoñible. Non hai diferenzas obvias entre o tempo de lectura, o tempo de compilación e o tempo de execución. Pode compilar ou executar código mentres le, ou ler ou executar código mentres compila, ou ler ou compilar código mentres se executa.

Executar código mentres le permite aos usuarios reprogramar a sintaxe de Lisp; executar código en tempo de compilación é a base das macros; a compilación en tempo de execución é a base para usar Lisp como linguaxe de extensión en programas como Emacs; e, finalmente, a lectura en tempo de execución permite que os programas se comuniquen mediante expresións s, unha idea reinventada recentemente en XML.

Conclusión

Cando se inventou Lisp, estas ideas estaban moi lonxe das prácticas de programación convencionais ditadas polo hardware dispoñible a finais da década de 1950.

Co paso do tempo, a linguaxe predeterminada, encarnada polo éxito das linguas populares, foi evolucionando gradualmente cara ao Lisp. Os puntos 1-5 agora son amplamente aceptados. O punto 6 comeza a aparecer no mainstream. En Python, hai unha cláusula 7 dalgunha forma, aínda que non hai unha sintaxe adecuada. O elemento 8, que (co elemento 9) fai posibles macros en Lisp, aínda está só en Lisp, probablemente porque (a) require eses parénteses ou algo igual de malo, e (b) se engades este último aumento de potencia, podes xa non pretenden ter inventado unha nova lingua, senón só ter desenvolvido un novo dialecto de Lisp; -)

Aínda que isto é útil para os programadores modernos, é estraño describir Lisp en función da súa diferenza coas técnicas aleatorias adoptadas noutros idiomas. Isto pode non ser o que McCarthy estaba pensando. Lisp non foi deseñado para corrixir os erros de Fortran; apareceu máis como un subproduto do intento axiomatizar os cálculos.

Fonte: www.habr.com

Engadir un comentario