Čím bol Lisp výnimočný

«Najväčší programovací jazyk, aký bol kedy vytvorený«
— Alan Kay, „na Lisp“

Čím bol Lisp výnimočný

Keď McCarthy koncom 1950-tych rokov vyvinul Lisp, bol radikálne odlišný od existujúcich jazykov, z ktorých najdôležitejší bol Fortran.

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

1. Podmienky. Podmienené príkazy sú konštrukcie typu if-then-other. Teraz ich berieme ako samozrejmosť. Oni boli vynájdený McCarthy počas vývoja Lisp. (Fortran mal v tom čase iba goto vyhlásenia, úzko spojené s inštrukciami pobočky o základnom hardvéri.) McCarthy, kým bol vo výbore pre Algol, prispel kondicionálmi do Algolu, odkiaľ sa rozšírili do iných jazykov.

2. Typ funkcie. V Lispe sú funkcie prvotriedne objekty - sú dátovým typom, rovnako ako čísla, reťazce atď., a majú doslovnú reprezentáciu, môžu byť uložené v premenných, môžu byť odovzdané ako argumenty atď.

3. Rekurzia. Rekurzia, samozrejme, existovala ako matematický koncept pred Lisp, ale Lisp bol prvý programovací jazyk, ktorý ju podporoval. (Toto možno znamená vytvárať funkcie ako prvotriedne objekty.)

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

5. Odvoz odpadu.

6. Programy zložené z výrazov. Lisp programy sú stromy výrazov, z ktorých každý vracia hodnotu. (Niektoré výrazy Lisp môžu vrátiť viacero hodnôt.) To je v kontraste s Fortranom a mnohými ďalšími úspešnými jazykmi, ktoré rozlišujú medzi „výrazmi“ a „výrokmi“.

Bolo prirodzené mať tento rozdiel vo Fortrane, pretože jazyk bol orientovaný na riadky (nie je prekvapujúce pre jazyk, ktorého vstupným formátom bola dierna karta). Nemohli ste mať vnorené príkazy. A pokiaľ ste potrebovali matematické výrazy, aby fungovali, nemalo zmysel, aby čokoľvek iné vracalo hodnotu, pretože na vrátenie nemusí nič čakať.

Obmedzenia boli zrušené s príchodom blokovo štruktúrovaných jazykov, ale vtedy už bolo neskoro. Rozdiel medzi výrazmi a tvrdeniami už bol stanovený. Prešiel z Fortranu do Algolu a ďalej na ich potomkov.

Keď sa jazyk skladá výlučne z výrazov, výrazy môžete skladať ľubovoľným spôsobom. Môžete napísať buď (pomocou syntaxe Oblúk)

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

alebo

(= x (if foo 1 2))

7. Typ symbolu. Znaky sa líšia od reťazcov, v takom prípade môžete skontrolovať rovnosť porovnaním ukazovateľov.

8. Zápis pre kód pomocou stromov symbolov.

9. Celý jazyk je vždy k dispozícii. Neexistuje žiadny zjavný rozdiel medzi časom čítania, časom kompilácie a časom spustenia. Môžete kompilovať alebo spúšťať kód počas čítania alebo čítať alebo spúšťať kód počas kompilácie alebo čítať alebo kompilovať kód počas jeho spustenia.

Spustenie kódu počas čítania umožňuje používateľom preprogramovať syntax Lisp; spustenie kódu v čase kompilácie je základom pre makrá; runtime kompilácia je základom pre používanie Lisp ako rozširujúceho jazyka v programoch ako Emacs; a nakoniec, čítanie v režime runtime umožňuje programom komunikovať pomocou s-výrazov, čo je myšlienka, ktorá sa nedávno objavila v XML.

Záver

Keď bol Lisp prvýkrát vynájdený, tieto myšlienky boli ďaleko od konvenčných programovacích praktík diktovaných hardvérom dostupným na konci 1950. rokov.

Postupom času sa štandardný jazyk, stelesnený úspechom populárnych jazykov, postupne vyvinul smerom k jazyku Lisp. Body 1-5 sú teraz všeobecne akceptované. Bod 6 sa začína objavovať v hlavnom prúde. V Pythone existuje klauzula 7 v určitej forme, hoci neexistuje vhodná syntax. Položka 8, ktorá (s položkou 9) umožňuje makrá v jazyku Lisp, je stále iba v jazyku Lisp, pravdepodobne preto, že (a) vyžaduje tieto zátvorky alebo niečo rovnako zlé a (b) ak pridáte toto najnovšie zvýšenie výkonu, môžete už netvrdiť, že vynašiel nový jazyk, ale len že vyvinul nový dialekt Lisp; -)

Hoci je to užitočné pre moderných programátorov, je zvláštne popisovať Lisp z hľadiska jeho rozdielu od náhodných techník používaných v iných jazykoch. Toto nemusí byť to, čo si McCarthy myslel. Lisp nebol navrhnutý na opravu Fortranových chýb; javilo sa to skôr ako vedľajší produkt pokusov axiomatizovať výpočty.

Zdroj: hab.com

Pridať komentár