Çfarë e bëri Lisp të veçantë

«Gjuha më e madhe e programimit e krijuar ndonjëherë«
- Alan Kay, "on Lisp"

Çfarë e bëri Lisp të veçantë

Kur McCarthy zhvilloi Lisp në fund të viteve 1950, ai ishte rrënjësisht i ndryshëm nga gjuhët ekzistuese, më e rëndësishmja prej të cilave ishte Fortran.

Lisp prezantoi nëntë ide të reja:

1. Kushtet. Deklaratat e kushtëzuara janë ndërtime nëse-atëherë-tjetër. Tani i marrim si të mirëqenë. Ata ishin shpikur McCarthy gjatë zhvillimit të Lisp. (Fortran në atë kohë kishte vetëm deklarata goto, të lidhura ngushtë me një udhëzim të degës mbi harduerin themelor.) McCarthy, ndërsa ishte në komitetin Algol, kontribuoi me kusht për Algol, nga ku ato u përhapën në gjuhë të tjera.

2. Një lloj funksioni. Në Lisp, funksionet janë objekte të klasit të parë - ato janë një lloj të dhënash, ashtu si numrat, vargjet, etj., dhe kanë një paraqitje fjalë për fjalë, mund të ruhen në variabla, mund të kalojnë si argumente, etj.

3. Rekursioni. Rekursioni, natyrisht, ekzistonte si një koncept matematikor përpara Lisp-it, por Lisp ishte gjuha e parë e programimit që e mbështeti atë. (Kjo ndoshta nënkuptohet në krijimin e funksioneve si objekte të klasit të parë.)

4. Një koncept i ri i variablave. Në Lisp, të gjitha variablat janë tregues efektivë. Vlerat janë ato që kanë llojet, jo variablat, dhe caktimi ose lidhja e variablave do të thotë kopjimi i treguesve, jo ajo ku ata tregojnë.

5. Mbledhja e mbeturinave.

6. Programe të përbëra nga shprehje. Programet Lisp janë pemë të shprehjeve, secila prej të cilave kthen një vlerë. (Disa shprehje Lisp mund të kthejnë vlera të shumta.) Kjo është në kontrast me Fortran dhe shumë gjuhë të tjera të suksesshme që bëjnë dallimin midis "shprehjeve" dhe "deklaratave".

Ishte e natyrshme të kishim këtë dallim në Fortran sepse gjuha ishte e orientuar drejt linjës (nuk është befasuese për një gjuhë, formati i hyrjes së së cilës ishte një kartë me grusht). Nuk mund të kishit deklarata të mbivendosura. Dhe për sa kohë që ju nevojiteshin shprehje matematikore për të punuar, nuk kishte kuptim që diçka tjetër të kthente një vlerë sepse mund të mos kishte asgjë që pret të kthehej.

Kufizimet u hoqën me ardhjen e gjuhëve të strukturuara në bllok, por deri atëherë ishte tepër vonë. Dallimi midis shprehjeve dhe deklaratave tashmë është vendosur. Ai kaloi nga Fortran në Algol dhe më tej tek pasardhësit e tyre.

Kur një gjuhë përbëhet tërësisht nga shprehje, ju mund të kompozoni shprehje si të dëshironi. Ju mund të shkruani ose (duke përdorur sintaksën Hark)

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

ose

(= x (if foo 1 2))

7. Një lloj simboli. Karakteret janë të ndryshëm nga vargjet, në të cilin rast mund të kontrolloni për barazi duke krahasuar treguesit.

8. Një shënim për kodin duke përdorur pemë simbolike.

9. E gjithë gjuha është gjithmonë e disponueshme. Nuk ka asnjë ndryshim të dukshëm midis kohës së leximit, kohës së përpilimit dhe kohës së ekzekutimit. Ju mund të përpiloni ose ekzekutoni kodin ndërsa lexoni, ose të lexoni ose ekzekutoni kodin gjatë përpilimit, ose të lexoni ose përpiloni kodin ndërsa ai funksionon.

Ekzekutimi i kodit gjatë leximit i lejon përdoruesit të riprogramojnë sintaksën e Lisp; kodi i ekzekutimit në kohën e përpilimit është baza për makro; përpilimi i kohës së funksionimit është baza për përdorimin e Lisp si një gjuhë shtesë në programe të tilla si Emacs; dhe së fundi, leximi në kohëzgjatje i lejon programet të komunikojnë duke përdorur s-shprehjet, një ide e rishpikur së fundmi në XML.

Përfundim

Kur Lisp u shpik për herë të parë, këto ide ishin shumë larg nga praktikat konvencionale të programimit të diktuara nga hardueri i disponueshëm në fund të viteve 1950.

Me kalimin e kohës, gjuha e paracaktuar, e mishëruar nga suksesi i gjuhëve të njohura, evoluoi gradualisht drejt Lisp. Pikat 1-5 tani pranohen gjerësisht. Pika 6 ka filluar të shfaqet në rrjedhën kryesore. Python ka klauzolën 7 në një formë, megjithëse nuk ka sintaksë të përshtatshme. Artikulli 8, i cili (me artikullin 9) bën të mundur makrot në Lisp, është ende vetëm në Lisp, ndoshta sepse (a) kërkon ato kllapa ose diçka po aq të keqe, dhe (b) nëse shtoni këtë rritje të fundit të fuqisë, mund të mos pretendoni më se keni shpikur një gjuhë të re, por vetëm se keni zhvilluar një dialekt të ri të Lisp; -)

Megjithëse kjo është e dobishme për programuesit modernë, është e çuditshme të përshkruhet Lisp për sa i përket ndryshimit të tij nga teknikat e rastësishme të adoptuara në gjuhë të tjera. Kjo mund të mos jetë ajo që McCarthy po mendonte. Lisp nuk ishte krijuar për të korrigjuar gabimet e Fortran; u shfaq më shumë si një nënprodukt i përpjekjes aksiomatizojnë llogaritjet.

Burimi: www.habr.com

Shto një koment