Čo robilo Lisp výnimočným

«Najväčší z kedy vytvorených programovacích jazykov«
— Alan Kay, „on Lisp“

Čo robilo Lisp výnimočným

Keď McCarthy vyvinul Lisp na konci 50. rokov, radikálne sa líšil od existujúcich jazykov, z ktorých najvýznamnejší bol Fortran.

Lisp predstavoval deväť nových nápadov:

1. Podmienečné vyjadrenia (Conditionals). Podmienečné vyjadrenia sú konštrukcia if-then-else. Dnes ich považujeme za samozrejmosť. Boli vynájdené McCarthym počas vývoja Lispu. (Fortran v tom čase mal iba goto príkazy úzko spojené s inštrukciou vetvenia na základnom hardvéri.) McCarthy, pôsobiac v komisii Algol, zaviedol podmienečné vyjadrenia do Algolu, odkiaľ sa rozšírili do ďalších jazykov.

2. Funkčné typy (A function type). V Lispe sú funkcie objekty prvej triedy — sú to typy dát rovnako ako čísla, reťazce atď., a majú doslovné vyjadrenie, môžu sa ukladať do premenných, môžu byť odovzdávané ako argumenty atď.

3. Rekurzia (Recursion). Rekurzia, samozrejme, existovala ako matematický koncept pred Lispom, ale Lisp bol prvým programovacím jazykom, ktorý ju podporoval. (To môže byť implikované v vytváraní funkcií ako objektov prvej triedy.)

4. Nový koncept premenných (A new concept of variables). V Lispe sú všetky premenné efektívnymi ukazovateľmi. Hodnoty sú to, čo majú typy, a nie premenné, a priraďovanie alebo viazanie premenných znamená kopírovanie ukazovateľov, a nie toho, na čo ukazujú.

5. Garbage-collection.

6. Programy pozostávajúce z výrazov (Programs composed of expressions). Programy v Lispe sú stromy výrazov, z ktorých každý vracia hodnotu. (Niektoré Lispové výrazy môžu vracať viacero hodnôt.) To kontrastuje s Fortranom a mnohými inými úspešnými jazykmi, ktoré rozlišujú medzi „výrazmi“ a „príkazmi“.

Bolo prirodzené mať takéto rozlíšenie vo Fortrane, pretože jazyk bol orientovaný na lineárne spracovanie (nie je prekvapením, že jazyk mal formát vstupu v podobe diernych kariet). Nemohli ste mať vnorené príkazy. A zatiaľ čo ste potrebovali matematické výrazy na prácu, nemalo zmysel nútiť niečo iné, aby vracalo hodnotu, pretože nemuselo existovať niečo, čo by očakávalo vrátenie.

Obmedzenia boli odstránené s príchodom blokovo-štruktúrovaných jazykov, ale do tej doby už bolo neskoro. Rozdiel medzi výrazmi a tvrdeniami sa už etabloval. Prešiel od Fortran-u k Algol-u a ďalej k ich potomkom.

Keď je jazyk úplne zložený z výrazov, môžete vyjadrenia zostavovať podľa svojich predstáv. Môžete napísať buď (používajúc syntax Arc)

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

alebo

(= x (if foo 1 2))

7. Symbolový typ (A symbol type). Symboly sa odlišujú od reťazcov, v tomto prípade môžete porovnávať rovnosť porovnávaním ukazovateľov.

8. Notácia pre kód (A notation for code) s použitím stromov zo symbolov.

9. Celý jazyk je vždy dostupný (The whole language always available). Neexistuje jednoznačný rozdiel medzi časom čítania, časom prekladu a časom vykonávania. Môžete prekladať alebo spúšťať kód počas čítania, alebo čítať alebo spúšťať kód počas prekladu, alebo čítať alebo prekladať kód počas vykonávania.

Spúšťanie kódu počas čítania umožňuje užívateľom preprogramovať syntax Lisp-u; spúšťanie kódu počas prekladu je základom pre makrá; prekladanie počas vykonávania je základom na používanie Lispu ako jazyka rozšírenia v takých programoch ako Emacs; a nakoniec, čítanie počas vykonávania umožňuje programom interagovať, používajúc s-výrazy, myšlienka, nedávno znova vynájdená v XML.

Záver

Keď bol Lisp len vynájdený, všetky tieto myšlienky boli značne ďaleko od bežných praktík programovania, ktoré diktoval hardvér dostupný na konci 50. rokov.

Postupom času sa jazyk predvolený, materializovaný v úspechu populárnych jazykov, postupne vyvinul smerom k Lispu. Body 1-5 sú teraz široko rozšírené. Bod 6 sa začína objavovať v mainstreame. V Pythone sa v istom zmysle nachádza bod 7, hoci neexistuje vhodná syntax. Bod 8, ktorý (s bodom 9) umožňuje makrá v Lispe, existuje dodnes len v Lispe, možná preto, že (a) si vyžaduje tieto zátvorky alebo niečo rovnako zlé, a (b) ak pridáte tento posledný nárast moci, už nemôžete tvrdiť, že ste vynaliezli nový jazyk, ale len že ste vyvinuli nový dialekt Lispu; -)

Hoci je to užitočné pre moderných programátorov, je zvláštne opisovať Lisp z pohľadu jeho rozdielov od náhodných prístupov prijatých v iných jazykoch. Možno to nie je to, o čom McCarthy premýšľal. Lisp nebol navrhnutý na opravu chýb Fortranu; skôr sa objavil ako vedľajší produkt pokusu axiomatizovať výpočty.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster