Ono što je Lisp učinilo posebnim

«Najveći programski jezik ikada stvoren«
— Alan Kej, "na Lisp"

Ono što je Lisp učinilo posebnim

Kada je McCarthy razvio Lisp kasnih 1950-ih, on se radikalno razlikovao od postojećih jezika, od kojih je najvažniji bio Fortran.

Lisp je predstavio devet novih ideja:

1. Uslovi. Uslovni iskazi su ako-onda-drugo konstrukcije. Sada ih uzimamo zdravo za gotovo. Oni su bili izmislio McCarthy tokom razvoja Lisp. (Fortran je u to vrijeme imao samo goto izjave, usko povezane s uputama grane o osnovnom hardveru.) McCarthy, dok je bio u Algol komitetu, dao je kondicionale u Algol, odakle su se proširili na druge jezike.

2. Tip funkcije. U Lisp-u, funkcije su prvoklasni objekti - one su tip podataka, baš kao i brojevi, stringovi, itd., i imaju doslovnu reprezentaciju, mogu se pohraniti u varijablama, mogu se proslijediti kao argumenti, itd.

3. Rekurzija. Rekurzija je, naravno, postojala kao matematički koncept prije Lisp-a, ali Lisp je bio prvi programski jezik koji ga je podržao. (Ovo se možda podrazumijeva u kreiranju funkcija kao prvoklasnih objekata.)

4. Novi koncept varijabli. U Lisp-u, sve varijable su efektivni pokazivači. Vrijednosti su ono što tipovi imaju, a ne varijable, a dodjeljivanje ili vezivanje varijabli znači kopiranje pokazivača, a ne ono na što ukazuju.

5. Sakupljanje smeća.

6. Programi sastavljeni od izraza. Lisp programi su stabla izraza, od kojih svaki vraća vrijednost. (Neki Lisp izrazi mogu vratiti više vrijednosti.) Ovo je u suprotnosti s Fortranom i mnogim drugim uspješnim jezicima koji razlikuju “izraze” i “izjave”.

Bilo je prirodno imati ovu razliku u Fortranu jer je jezik bio orijentisan na liniju (nije iznenađujuće za jezik čiji je ulazni format bila bušena kartica). Niste mogli imati ugniježđene izjave. I sve dok su vam bili potrebni matematički izrazi da rade, nije bilo smisla da nešto drugo vraća vrijednost jer možda ne postoji ništa što čeka da bude vraćeno.

Ograničenja su ukinuta pojavom blokovskih jezika, ali tada je bilo prekasno. Razlika između izraza i iskaza je već utvrđena. Prešao je od Fortrana do Algola i dalje do njihovih potomaka.

Kada je jezik u potpunosti napravljen od izraza, možete sastavljati izraze na bilo koji način. Možete napisati bilo koje (koristeći sintaksu Arc)

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

ili

(= x (if foo 1 2))

7. Tip simbola. Znakovi se razlikuju od nizova, u kom slučaju možete provjeriti jednakost upoređivanjem pokazivača.

8. Oznaka za kod koristeći stabla simbola.

9. Cijeli jezik je uvijek dostupan. Ne postoji očigledna razlika između vremena čitanja, vremena kompajliranja i vremena izvođenja. Možete kompajlirati ili pokrenuti kod dok čitate, ili čitati ili izvoditi kod dok kompajlirate, ili čitati ili kompajlirati kod dok se izvodi.

Pokretanje koda tokom čitanja omogućava korisnicima da reprogramiraju Lispovu sintaksu; pokretanje koda u vrijeme kompajliranja je osnova za makroe; runtime kompilacija je osnova za korištenje Lisp-a kao jezika proširenja u programima kao što je Emacs; i konačno, runtime čitanje omogućava programima da komuniciraju koristeći s-izraze, ideju nedavno ponovo izmišljenu u XML-u.

zaključak

Kada je Lisp prvi put izmišljen, ove ideje su bile daleko od konvencionalnih praksi programiranja koje je diktirao hardver dostupan u kasnim 1950-im.

Vremenom je podrazumevani jezik, oličen uspehom popularnih jezika, postepeno evoluirao ka Lisp-u. Tačke 1-5 su sada široko prihvaćene. Tačka 6 počinje da se pojavljuje u mainstreamu. U Pythonu postoji klauzula 7 u nekom obliku, iako ne postoji odgovarajuća sintaksa. Stavka 8, koja (sa stavkom 9) čini makroe mogućim u Lisp-u, još uvijek je samo u Lisp-u, vjerovatno zato što (a) zahtijeva te zagrade ili nešto jednako loše, i (b) ako dodate ovo posljednje povećanje snage, možete više ne tvrde da su izmislili novi jezik, već samo da su razvili novi dijalekt Lisp-a; -)

Iako je ovo korisno za moderne programere, čudno je opisati Lisp u smislu njegove razlike od nasumičnih tehnika usvojenih u drugim jezicima. Ovo možda nije ono što je McCarthy mislio. Lisp nije dizajniran da ispravi Fortranove greške; izgledalo je više kao nusproizvod pokušaja aksiomatizirati proračune.

izvor: www.habr.com

Dodajte komentar