Hvad der gjorde Lisp specielt

«Det største programmeringssprog, der nogensinde er skabt«
— Alan Kay, «on Lisp»

Hvad der gjorde Lisp specielt

Da McCarthy udviklede Lisp i slutningen af 1950'erne, adskilte det sig radikalt fra de eksisterende sprog, hvoraf det vigtigste var Fortran.

Lisp inkorporerede ni nye idéer:

1. Betingede udsagn (Conditionals). Betingede udsagn er en if-then-else-konstruktion. I dag tager vi dem for givet. De blev opfundet af McCarthy under udviklingen af Lisp. (Fortran havde på det tidspunkt kun goto-erklæringer, der var tæt knyttet til den underliggende hardware's betingede instruktioner.) McCarthy, der var i Algol-komitéen, introducerede betingede udsagn i Algol, hvorfra de spredte sig til andre sprog.

2. Funktionstyper (A function type). I Lisp er funktioner første klasse-objekter — de er datatyper ligesom tal, strenge osv., og de har et bogstaveligt repræsentation, kan gemmes i variabler, kan sendes som argumenter osv.

3. Rekursion (Recursion). Rekursion eksisterede selvfølgelig som et matematisk koncept før Lisp, men Lisp var det første programmeringssprog, der understøttede det. (Dette kan muligvis antages ved at oprette funktioner som første klasse-objekter.)

4. Ny koncept for variabler (A new concept of variables). I Lisp er alle variabler effektive pekere. Værdier er noget, som typer har, og ikke variablerne, og tildeling eller binding af variabler betyder kopiering af pekere, ikke det, de peger på.

5. Affaldssamling (Garbage-collection).

6. Programmer sammensat af udtryk (Programs composed of expressions). Programmer i Lisp er træer af udtryk, hver af dem returnerer en værdi. (Nogle Lisp-udtryk kan returnere flere værdier.) Dette står i kontrast til Fortran og mange andre succesfulde sprog, der adskiller 'udtryk' og 'erklæringer'.

Det var naturligt at have en sådan adskillelse i Fortran, fordi sproget var lineært orienteret (ikke overraskende for et sprog, hvor inputformatet var perforerede kort). Du kunne ikke have indlejrede erklæringer. Og mens du havde brug for matematiske udtryk for at arbejde, gav det ikke mening at få noget andet til at returnere en værdi, fordi der måske ikke var noget, der ventede på et tilbageholdt resultat.

Begrænsningerne blev ophævet med fremkomsten af blok-strukturerede sprog, men på det tidspunkt var det allerede for sent. Forskellen mellem udtryk og udsagn var allerede blevet fastlagt. Den gik fra Fortran til Algol og videre til deres efterkommere.

Når et sprog er helt sammensat af udtryk, kan du danne udtryk som du ønsker. Du kan skrive enten (ved at bruge syntaks Arc)

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

eller

(= x (if foo 1 2))

7. Symboltype. Symboler adskiller sig fra strenge, i dette tilfælde kan du tjekke for lighed ved at sammenligne pegere.

8. Notation for kode ved at bruge træer af symboler.

9. Hele sproget er altid tilgængeligt.. Der er ingen åbenlys forskel mellem læsetid, kompileringstid og køretid. Du kan kompilere eller køre kode under læsning, eller læse eller køre kode mens du kompilere, eller læse eller kompilere kode under kørslen.

Kørsel af kode under læsning giver brugerne mulighed for at omprogrammere syntaksen i Lisp; kørsel af kode under kompilering er grundlaget for makroer; kompilering under kørslen er grundlaget for at bruge Lisp som et udvidelsessprog i programmer som Emacs; og endelig giver læsning under kørslen programmer mulighed for at interagere ved at bruge s-udtryk, en idé, der for nylig er genopfundet i XML.

Konklusion

Da Lisp blev opfundet, var alle disse ideer langt fra almindelig programmeringspraksis, som blev dikteret af det hardware, der var tilgængeligt i slutningen af 1950'erne.

Over tid udviklede standardsproget, repræsenteret ved succesen af populære sprog, sig gradvist i retning af Lisp. Punkterne 1-5 er nu vidt udbredte. Punkt 6 begynder at dukke op i mainstream. I Python findes punkt 7 i en eller anden form, selvom der ikke er en passende syntaks. Punkt 8, som (med punkt 9) muliggør makroer i Lisp, findes fortsat kun i Lisp, muligvis fordi (a) det kræver disse parenteser eller noget ligeså uheldigt, og (b) hvis du tilføjer denne sidste magtforøgelse, kan du ikke længere hævde, at du har opfundet et nyt sprog, men kun at du har udviklet en ny dialekt af Lisp; -)

Selvom det er nyttigt for moderne programmører, er det mærkeligt at beskrive Lisp ud fra dets forskelle med tilfældige metoder, der anvendes i andre sprog. Dette var måske ikke det, McCarthy tænkte på. Lisp blev ikke designet for at rette fejl i Fortran; det opstod snarere som et biprodukt af forsøget at axiomatiskgøre beregninger.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster