ÇfarĂ« e bĂ«ri Lisp tĂ« veçantĂ«

«Gjuha më e madhe e krijuar ndonjëherë«
— Alan Kay, «pĂ«r Lisp»

ÇfarĂ« e bĂ«ri Lisp tĂ« veçantĂ«

Kur McCarthy zhvilloi Lisp në fund të viteve 1950, ai u dallua radikalisht nga gjuhët ekzistuese, në mënyrën më të rëndësishme nga Fortran.

Lisp përmbushi nëntë ide të reja:

1. Kushtet e deklaratave (Conditionals). Kushtet e deklaratave janë konstruksione if-then-else. Tani ne i konsiderojmë si të zakonshme. Ato u shpikën nga McCarthy gjatë zhvillimit të Lisp. (Fortran atëherë kishte vetëm deklarata të goto, të lidhura ngushtë me instruksionet e ndarjes në harduerin përkatës.) McCarthy, duke qenë në komitetin për Algol, solli kushtet e deklaratave në Algol, nga ku ato u përhapën në gjuhët e tjera.

2. Tipet funksionale (A function type). NĂ« Lisp, funksionet janĂ« objekte tĂ« klasĂ«s sĂ« parĂ« — ato janĂ« tip tĂ« dhĂ«nash, ashtu si numrat, vargjet etj., dhe kanĂ« pĂ«rfaqĂ«sim tĂ« drejtpĂ«rdrejtĂ«, mund tĂ« ruhen nĂ« variabla, mund tĂ« dĂ«rgohen si argumente, etj.

3. Rekursioni (Recursion). Rekursioni, natyrisht, kishte ekzistuar si një koncept matematikor para Lisp, por Lisp ishte gjuha e parë programimi që e mbështeti. (Kjo ndoshta nënkuptohet në krijimin e funksioneve si objekte të klasës së parë.)

4. Koncepte të reja për variablat (A new concept of variables). Në Lisp, të gjitha variablat janë tregues efikas. Vlerat janë ajo që kanë tipet, dhe jo variablat, dhe caktimi ose lidhja e variablave nënkupton kopjimin e treguesve, dhe jo asaj që ata tregojnë.

5. Kohën e mbetës (Garbage-collection).

6. Programet përbëhen nga shprehje (Programs composed of expressions). Programet në Lisp janë pemë shprehjesh, çdo njëra prej të cilave kthen një vlerë. (Disa shprehje Lisp mund të kthejnë vlera multiple.) Kjo është në kontrast me Fortran dhe shumë gjuhë të tjera të suksesshme, të cilat dallojnë "shprehjet" nga "deklaratat".

Ishte natyrshëm të kishe një dallim të tillë në Fortran, sepse gjuha ishte lineare-orientuar (nuk është çudi për një gjuhë ku formati i hyrjes ishte karta perforuese). Nuk mund të kishe deklarata të ngulitura. Dhe përderisa të duheshin shprehje matematikore për të punuar, nuk kishte kuptim të bëje diçka tjetër që të kthenin një vlerë, sepse nuk mund të kishte diçka që priste kthimin.

Kufizimet u hoqën me ardhjen e gjuhëve me strukturë blokore, por deri në atë moment ishte tepër vonë. Dallimi mes shprehjeve dhe deklaratave ishte bërë tashmë i konsoliduar. Ai kaloi nga Fortran në Algol dhe më pas te pasardhësit e tyre.

Kur gjuha është bërë plotësisht nga shprehje, mund të krijosh shprehje sipas dëshires. Mund të shkruash ose (duke përdorur sintaksën Arc)

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

apo

(= x (if foo 1 2))

7. Tipi simbolik (A symbol type). Simbolet ndryshojnë nga vargjet, në këtë rast mund të kontrollosh për barazim duke krahasuar treguesit.

8. Notacioni për kodin (A notation for code) duke përdorur pemët e simboleve.

9. Gjitha gjuha gjithmonë e disponueshme (The whole language always available). Nuk ka ndarje të dukshme mes kohës së leximit, kohës së kompilimit dhe kohës së ekzekutimit. Mund të kompiltosh ose ekzekutosh kodin gjatë leximit, ose të lexosh ose ekzekutosh kodin ndërsa kompiloni, ose të lexosh ose kompilosh kodin gjatë ekzekutimit.

Ekzekutimi i kodit gjatë leximit lejon përdoruesit të riprogramojnë sintaksën e Lisp; ekzekutimi i kodit gjatë kompilimit është baza për makrot; kompilimi gjatë ekzekutimit është baza për përdorimin e Lisp si një gjuhë zgjerimi në programe si Emacs; dhe përfundimisht, leximi gjatë ekzekutimit lejon programet të ndërveprojnë duke përdorur s-shprehje, një ide që është ripërshkruar së fundmi në XML.

Përfundimi

Kur Lisp u shpik fillimisht, të gjitha këto ide ishin shumë larg praktikave të zakonshme të programimit, të cilat ishin të diktuara nga hardueri i disponueshëm në fund të viteve 1950.

Me kalimin e kohës, gjuha që kishte fituar suksesin e gjuhëve popullore gradualisht evoluoi drejt Lisp. Pikat 1-5 tani janë shumë të zakonshme. Pika 6 fillon të shfaqet në mjedisin kryesor. Në Python, në njëfarë forme ka pikën 7, edhe pse nuk ka sintaksë të përshtatshme. Pika 8, e cila (me pikën 9) e bën të mundshme makrot në Lisp, ende egziston vetëm në Lisp, ndoshta sepse (a) kërkon këto kllapa ose diçka po aq të keqe, dhe (b) nëse e shton këtë rritje të fundit të fuqisë, atëherë nuk mund të pretendosh më se ke shpikur një gjuhë të re, por thjesht ke zhvilluar një dialekt të ri të Lisp; -)

Megjithëse është e dobishme për programuesit modernë, është e çuditshme të përshkruhet Lisp në terma të dallimeve të tij nga teknikat rastësore, të pranuara në gjuhë të tjera. Ndoshta nuk ishte kjo ajo për të cilën mendonte McCarthy. Lisp nuk u dizenjua për të korrigjuar gabimet e Fortran; ai u shfaq më shumë si një produkt anësor i përpjekjes përta akshkaktizuar llogaritjet.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster