«KÔige suurem kunagi loodud programmeerimiskeel«
â Alan Kay, «Lispist»

Kui McCarthy lÔi Lismi 1950ndate lÔpus, erines see radikaalselt olemasolevatest keeltest, millest kÔige tÀhtsam oli .
Lisp realiseeris ĂŒheksa uut ideed:
1. Tingimuslause (Conditionals). Tingimuslause on if-then-else konstruktsioon. TÀnapÀeval vÔtame neid iseenesestmÔistetavalt. Need olid McCarthy poolt Lismi arendamise ajal. (Fortranil oli sel ajal ainult goto-lauseid, mis olid tihedalt seotud alusraadiote juhistega.) McCarthy, olles Algoli komitees, tÔi tingimuslauseid Algolisse, kust need levisid teistesse keeltesse.
2. Funktsionaalne tĂŒĂŒp (A function type). Lismis on funktsioonid esmaklassilised objektid â need on andmetĂŒĂŒp, nagu arvud, stringid jne, ja neil on sĂ”nasĂ”naline esitamine, neid saab salvestada muutujaidena, neid saab edastada argumentidena jne.
3. Rekursioon (Recursion). Rekursioon eksisteeris muidugi matemaatilise kontseptioonina enne Lispi, kuid Lisp oli esimene programmeerimiskeel, mis seda toetas. (See on vÔimaliku viidatud funktsioonide loomisele esmaklassiliste objektidena.)
4. Uute muutujate kontseptsioon. Lispis on kĂ”ik muutujad efektiivsed nĂ€idikud. VÀÀrtused on see, mis kuulub tĂŒĂŒpidele, mitte muutujatele, ja muutujate seadmine vĂ”i sidumine tĂ€hendab nĂ€idikute kopeerimist, mitte seda, millele nad viitavad.
5. RĂ€mpsu kogumine.
6. Programmid koosnevad avaldistest. Lispis olevad programmid on avaldise puud, millest igaĂŒks tagastab vÀÀrtuse. (MĂ”ned Lisi avaldused vĂ”ivad tagastada mitu vÀÀrtust.) See eristub Fortranist ja paljusid teisi edukaid keeli, mis eristavad "avaldisi" ja "vĂ€iteid".
Fortranis oli loomulik omada sellist eristust, kuna keel oli lineaarsele orienteeritud (mis pole ĂŒllatav, arvestades, et sisendiks oli perforatsioonikaart). Te ei saanud omada pesadud vĂ€iteid. Ja kuigi matemaatilised avaldised olid sinu kĂ€es vajalikud, ei olnud mĂ”tet sundida midagi muud vÀÀrtust tagastama, kuna ei olnud midagi, mis ootaks tagastamist.
Piirangud kadusid koos plokk-struktuursete keelte tulekuga, kuid selleks ajaks oli juba liiga hilja. Erinevus vÀljendite ja vÀidete vahel oli juba kindlalt juurdunud. See liikus Fortranilt Algolile ja edasi nende jÀreltulijatele.
Kui keel koosneb tĂ€ielikult vĂ€ljenditest, saate koostada vĂ€ljendeid meelepĂ€raselt. Saate kirjutada kas (kasutades sĂŒntaksit )
(if foo (= x 1) (= x 2))vÔi
(= x (if foo 1 2))7. SĂŒmbolitĂŒĂŒp (A symbol type). SĂŒmbolid erinevad stringidest, sel juhul saate vĂ”rrelda nende vĂ”rdlust, vĂ”rreldes osutajaid.
8. Koodinotaatsioon (A notation for code) kasutades sĂŒmbolite puid.
9. Kogu keel on alati saadaval (The whole language always available). Ei ole selget erinevust lugemise aja, kompileerimise ja tÀitmise vahel. Saate koodi kompileerida vÔi kÀivitada lugemise ajal, vÔi lugeda vÔi kÀivitada koodi, samal ajal kompileerides, vÔi lugeda vÔi kompileerida koodi tÀitmise ajal.
Koodi kĂ€ivitamine lugemise ajal vĂ”imaldab kasutajatel Lisp'i sĂŒntaksit uuesti programmeerida; koodi kĂ€ivitamine kompileerimise ajal on makrode aluseks; kĂ€itamisel kompileerimine on Lisp'i kasutamise aluseks, laienduste keeleks sellistes programmides nagu Emacs; ja lĂ”puks, lugemine kĂ€itamise ajal vĂ”imaldab programmidevahelist suhtlust, kasutades s-vĂ€ljendeid, idee, mis on hiljuti uuesti leiutatud XML-is.
KokkuvÔte
Kui Lisp ainult leiutati, olid kÔik need ideed kaugel tavalistest programmeerimistavadest, mida dikteeris 1950. aastate lÔpupoolte saadaval olnud riistvara.
Aja jooksul on vaikimisi keel, mis on ellu viidud populaarsete keeltega, jĂ€rk-jĂ€rgult arenenud Lisp'i suunas. Punktid 1-5 on nĂŒĂŒd laialdaselt levinud. Punkt 6 hakkab ilmnema peavoolus. Python'is on mingil moel punkt 7, kuigi sobivat sĂŒntaksit ei ole. Punkt 8, mis (koos punktiga 9) vĂ”imaldab Lisp'is makrosid, on endiselt olemas ainult Lisp'is, vĂ”ib-olla seetĂ”ttu, et (a) see nĂ”uab neid sulgusid vĂ”i midagi sama halba, ja (b) kui te lisate selle viimase vĂ”imsuse suurenemise, siis ei saa te enam vĂ€ita, et olete leiutanud uue keele, vaid olete lihtsalt vĂ€lja töötanud uue Lisp'i dialekti; -)
Kuigi see on kasulik tÀnapÀeva programmeerijatele, on kummaline kirjeldada Lisp'i selle erinevuste kaudu juhuslikest tehnikatest, mis on kasutusele vÔetud teistes keeltes. VÔib-olla ei olnud see see, millest McCarthy mÔtles. Lisp ei olnud projekteeritud Fortrani vigade parandamiseks; see tekkis pigem kÔrvalproduktina katsetest .
Allikas: habr.com
