«Gjuha më e madhe që është krijuar ndonjëherë«
â Alan Kay, «on Lisp»

Kur McCarthy zhvilloi Lisp në fund të viteve 1950, ai ishte radikalisht ndryshe nga gjuhët ekzistuese, e cila kryesorja ishte .
Lisp përmbante nëntë ide të reja:
1. Kushtet (Conditionals). Kushtet janë konstruktime if-then-else. Sot i perceptojmë ato si të zakonshme. Ato u nga McCarthy gjatë zhvillimit të Lisp. (Fortran atëherë kishte vetëm deklarata goto, të lidhura ngusht me instruksionin e ndërlikimit në harduerin përkatës.) McCarthy, duke qenë në komitetin Algol, e solli kushtet në Algol, nga ku ato u përhapën në gjuhë të tjera.
2. Llojet funksionale (A function type). NĂ« Lisp, funksionet janĂ« objekte tĂ« klasĂ«s sĂ« parĂ« â ato janĂ« lloje tĂ« dhĂ«nash, si numrat, stringjet, etj., dhe kanĂ« pĂ«rfaqĂ«sim literal, mund tĂ« ruhen nĂ« variabla, mund tĂ« kalohen si argumente, etj.
3. Rekurziviteti (Recursion). Rekurziviteti, sigurisht, ka ekzistuar si një koncept matematikor para Lisp, por Lisp ishte gjuha e parë e programimit që e suportoi atë. (Kjo mund të nënkuptohet me krijimin e funksioneve si objekte të klasës së parë.)
4. Një koncept i ri për variablat (A new concept of variables). Në Lisp, të gjitha variablat janë tregues efikas. Vlerat janë ato që kanë llojet, e jo variablat, dhe caktimi ose lidhja e variablave do të thotë kopjimi i treguesve, e jo asaj që tregojnë.
5. Mbledhja e plehrave (Garbage-collection).
6. Programet përbëhen nga shprehje (Programs composed of expressions). Programet në Lisp janë pemë shprehjesh, secila prej të cilave kthen një vlerë. (Disa shprehje Lisp mund të kthejnë vlera shumëfish.) Kjo është në kontrast me Fortran dhe shumë gjuhë të tjera të suksesshme, të cilat ndajnë "shprehjet" nga "nënkuptimet".
Ishte normale të kishte një dallim të tillë në Fortran, sepse gjuha ishte e orientuar linear (nuk është çudi për një gjuhë në të cilën formati i hyrjes ishte karta perforuese). Nuk mund të kishe nënkuptime të ngjitura. Dhe ndërsa të ishin të nevojshme shprehjet matematikore për të punuar, nuk kishte kuptim që diçka tjetër të kthehej një vlerë, sepse mund të mos kishte asgjë që priste kthimin.
Kufizimet u hoqën me shfaqjen e gjuhëve blok-strukturore, por në atë kohë ishte tepër vonë. Dallimi mes shprehjeve dhe afirmacioneve tashmë ishte konsoliduar. Ai kaloi nga Fortran te Algol dhe më tej te pasardhësit e tyre.
Kur gjuha është krijuar plotësisht nga shprehje, mund të krijoni shprehje siç dëshiron. Mund të shkruani ose (duke përdorur sintaksën )
(if foo (= x 1) (= x 2))ose
(= x (if foo 1 2))7. Lloji simbol (A symbol type). Simbolet ndryshojnë nga vargjet, në këtë rast mund të kontrolloni për barazim duke krahasuar treguesit.
8. Nota për kodin (A notation for code) duke përdorur pemë simboresh.
9. E gjithë gjuha gjithmonë e disponueshme (The whole language always available). Nuk ka ndarje eksplicite midis kohës së leximit, kohës së përpunimit dhe kohës së ekzekutimit. Mund të kompiloni ose ekzekutoni kodin gjatë leximit, ose të lexoni ose ekzekutoni kodin ndërkohë që po kompiloni, ose të lexoni ose kompiloni kodin gjatë ekzekutimit.
Ekzekutimi i kodit gjatë leximit u lejon përdoruesve të riprogramojnë sintaksën e Lisp-it; ekzekutimi i kodit gjatë kompilimit është baza për makro; kompilimi gjatë ekzekutimit është baza për përdorimin e Lisp-ve si gjuhë zgjerimi në programe si Emacs; dhe përfundimisht, leximi gjatë ekzekutimit lejon që programet të ndërveprojnë, duke përdorur s-shprehje, një ide që së fundmi u ripërkthye në XML.
Përfundim
Kur Lisp-i u shpik për herë të parë, të gjitha këto ide ishin shumë larg praktikave të zakonshme të programimit, të diktuara nga aparatët e disponueshëm në fund të viteve 1950.
Me kalimin e kohës, gjuha default, e materializuar në suksesin e gjuhëve të njohura, gradualisht u evoluua drejt Lisp-it. Pikat 1-5 tashmë janë shumë të zakonshme. Pika 6 fillon të shfaqet në mjedisin kryesor. Në Python ka një lloj pike 7, megjithatë nuk ka sintaksë të përshtatshme. Pika 8, e cila (me pikën 9) e bën të mundur makrot në Lisp, është ende vetëm në Lisp, ndoshta sepse (a) kërkon këto kllapa ose diçka njësoj të keqe, dhe (b) nëse e shtoni këtë rritje të fundit të fuqisë, nuk do të mund të pretendoni se keni shpikur një gjuhë të re, por thjesht keni zhvilluar një dialekt të ri të Lisp-it; -)
Megjithëse është e dobishme për programuesit modernë, është e çuditshme të përshkruhet Lisp duke u mbajtur parasysh dallimet e tij nga teknikat e rastësishme të pranuara në gjuhë të tjera. Mund të mos jetë kjo ajo që kishte menduar McCarthy. Lisp nuk u projektua për të rregulluar gabimet e Fortran-it; ai u shfaq më shumë si një produkt anësor i përpjekjeve për .
Burimi: habr.com
