«Největší jazyk programování, který byl kdy vytvořen«
— Alan Kay, „o Lispu“

Když McCarthy vyvinul Lisp na konci 50. let, byl radikálně odlišný od tehdy existujících jazyků, z nichž nejvýznamnější byl .
Lisp ztělesnil devět nových myšlenek:
1. Podmínková prohlášení (Conditionals). Podmínková prohlášení jsou konstrukce if-then-else. Dnes je považujeme za samozřejmost. Byly McCarthym během vývoje Lispu. (Fortran tehdy měl pouze goto příkazy, úzce spojené s instrukcí větvení na základním hardwaru.) McCarthy, jako člen komitétu pro Algol, zavedl podmínková prohlášení do Algolu, odkud se rozšířila do dalších jazyků.
2. Funkční typy (A function type). V Lispu jsou funkce objekty prvního typu — jsou datovým typem stejně jako čísla, řetězce atd., mají doslovné zastoupení, mohou být uloženy v proměnných, mohou být předávány jako argumenty atd.
3. Rekurze (Recursion). Rekurze samozřejmě existovala jako matematický koncept před Lispem, ale Lisp byl prvním programovacím jazykem, který ji podporoval. (To je naznačeno vytvořením funkcí jako objektů prvního typu.)
4. Nový koncept proměnných (A new concept of variables). V Lispu jsou všechny proměnné efektivními ukazateli. Hodnoty patří typům, ne proměnným, a přiřazení nebo vazba proměnných znamená kopírování ukazatelů, nikoli toho, na co ukazují.
5. Garbage-collection (Sběr odpadu).
6. Programy složené z výrazů (Programs composed of expressions). Programy v Lispu jsou stromy výrazů, z nichž každé vrací hodnotu. (Některé Lisp výrazy mohou vracet více hodnot.) To vytvoří kontrast s Fortranem a mnoha dalšími úspěšnými jazyky, které rozlišují mezi „výrazy“ a „příkazy“.
Bylo přirozené mít takové rozlišení ve Fortranu, protože jazyk byl orientován na řádek (není překvapující pro jazyk, jehož formát vstupu byl děrovací karta). Nemohli jste mít vnořené příkazy. A zatímco jste potřebovali matematické výrazy pro práci, nemělo smysl nutit něco jiného vracet hodnotu, protože nemohlo existovat nic, co by očekávalo návrat.
Omezení byla odstraněna s příchodem blokově strukturovaných jazyků, ale v té době už bylo příliš pozdě. Rozdíl mezi výrazy a tvrzeními se již upevnil. Přešel z Fortranu na Algol a dále k jejich potomkům.
Když je jazyk zcela složen z výrazů, můžete vytvářet výrazy, jak chcete. Můžete napsat buď (používající syntaxi )
(if foo (= x 1) (= x 2))nebo
(= x (if foo 1 2))7. Symbolový typ (A symbol type). Symboly se liší od řetězců, v tomto případě můžete porovnávat na rovnost porovnáním ukazatelů.
8. Notace pro kód (A notation for code) s využitím stromů ze symbolů.
9. Celý jazyk je vždy dostupný (The whole language always available). Neexistuje žádný jasný rozdíl mezi časem čtení, časem kompilace a časem provádění. Můžete kompilovat nebo spouštět kód během čtení, nebo číst nebo spouštět kód během kompilace, nebo číst či kompilovat kód během provádění.
Spouštění kódu během čtení umožňuje uživatelům přepsat syntaxi Lispu; spouštění kódu během kompilace je základem pro makra; kompilace během provádění je základem použití Lispů jako rozšiřujícího jazyka v takových programech jako je Emacs; a nakonec, čtení během provádění umožňuje programům interagovat pomocí s-výrazů, myšlenka, která byla nedávno znovu vynalezena v XML.
Závěr
Když byl Lisp právě vynalezen, všechny tyto myšlenky byly daleko od běžných praktik programování, které dikoval hardware dostupný na konci 50. let.
Postupem času jazyk ve výchozím nastavení, zhmotněný v úspěchu populárních jazyků, postupně evolvoval směrem k LISP. Body 1-5 jsou nyní široce rozšířeny. Bod 6 začíná pronikat do mainstreamu. V Pythonu v určité podobě existuje bod 7, i když žádná vhodná syntaxe není. Bod 8, který (s bodem 9) umožňuje makra v Lispu, je dosud pouze v Lispu, pravděpodobně proto, že (a) vyžaduje tyto závorky nebo něco obdobně komplikovaného, a (b) pokud přidáte toto poslední zvýšení výkonu, už nemůžete tvrdit, že jste vynalezli nový jazyk, ale pouze vyvinuli novou variantu Lispu; -)
I když je to užitečné pro moderní programátory, je divné popisovat Lisp z pohledu jeho rozdílů od náhodných přístupů, které se používají v jiných jazycích. Možná to není to, co měl McCarthy na mysli. Lisp nebyl navržen, aby opravil chyby Fortranu; spíše vznikl jako vedlejší produkt pokusu .
Zdroj: habr.com
