Ինչն էր Lisp-ին առանձնահատուկ դարձնում

«Երբևէ ստեղծված ամենամեծ ծրագրավորման լեզուն«
— Ալան Քեյ, «Lisp»-ում

Ինչն էր Lisp-ին առանձնահատուկ դարձնում

Երբ ՄակՔարթին 1950-ականների վերջին մշակեց Lisp-ը, այն արմատապես տարբերվում էր գոյություն ունեցող լեզուներից, որոնցից ամենակարևորն էր. Ֆորտրան.

Lisp-ը ներկայացրել է ինը նոր գաղափար.

1. Պայմաններ. Պայմանական հայտարարությունները, եթե, ապա, այլ կոնստրուկցիաներ են: Հիմա մենք դրանք ընդունում ենք որպես կանոն: Նրանք էին հորինված ՄակՔարթին Lisp-ի զարգացման ժամանակ: (Ֆորտրանն այն ժամանակ ուներ միայն goto հայտարարություններ, որոնք սերտորեն զուգակցված էին հիմքում ընկած սարքավորումների վերաբերյալ ճյուղային ցուցումներին):

2. Ֆունկցիայի տեսակ. Lisp-ում ֆունկցիաները առաջին կարգի օբյեկտներ են. դրանք տվյալների տեսակ են, ինչպես թվերը, տողերը և այլն, և ունեն բառացի ներկայացում, կարող են պահվել փոփոխականներում, կարող են փոխանցվել որպես արգումենտ և այլն:

3. Ռեկուրսիա. Անշուշտ, ռեկուրսիան գոյություն ուներ որպես մաթեմատիկական հասկացություն մինչև Lisp-ը, սակայն Lisp-ն առաջին ծրագրավորման լեզուն էր, որն աջակցում էր դրան։ (Սա, հավանաբար, ենթադրվում է առաջին կարգի օբյեկտների գործառույթներ ստեղծելիս):

4. Փոփոխականների նոր հայեցակարգ. Lisp-ում բոլոր փոփոխականները արդյունավետ ցուցիչներ են: Արժեքներն այն տեսակներն են, որոնք ունեն, ոչ թե փոփոխականները, և փոփոխականներ նշանակելը կամ կապելը նշանակում է ցուցիչների պատճենում, այլ ոչ թե այն, ինչ նրանք մատնանշում են:

5. Աղբահանություն.

6. Արտահայտություններից կազմված ծրագրեր. Lisp ծրագրերը արտահայտությունների ծառեր են, որոնցից յուրաքանչյուրը վերադարձնում է արժեք: (Որոշ Lisp արտահայտություններ կարող են վերադարձնել բազմաթիվ արժեքներ:) Սա հակասում է Fortran-ին և շատ այլ հաջողակ լեզուների, որոնք տարբերում են «արտահայտությունները» և «հայտարարությունները»:

Բնական էր այս տարբերակումը Fortran-ում ունենալը, քանի որ լեզուն գծային էր (զարմանալի չէ մի լեզվի համար, որի մուտքագրման ձևաչափը դակված քարտ էր): Դուք չէիք կարող ունենալ ներդիր հայտարարություններ: Եվ քանի դեռ ձեզ հարկավոր էին մաթեմատիկական արտահայտություններ աշխատելու համար, իմաստ չկար որևէ այլ արժեք վերադարձնելը, քանի որ հնարավոր է ոչինչ չսպասի վերադարձմանը:

Սահմանափակումները հանվեցին բլոկների կառուցվածքով լեզուների հայտնվելով, բայց այդ ժամանակ արդեն ուշ էր: Արտահայտությունների և հայտարարությունների տարբերությունն արդեն հաստատված է։ Այն Ֆորտրանից անցել է Ալգոլին և հետագայում նրանց ժառանգներին:

Երբ լեզուն ամբողջությամբ կազմված է արտահայտություններից, դուք կարող եք արտահայտություններ կազմել ինչպես ուզում եք: Դուք կարող եք գրել կամ (օգտագործելով շարահյուսությունը Ծիածան)

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

կամ

(= x (if foo 1 2))

7. Սիմվոլի տեսակ. Նիշերը տարբերվում են տողերից, որի դեպքում կարող եք ստուգել հավասարությունը՝ համեմատելով ցուցիչները։

8. Կոդի նշում օգտագործելով խորհրդանիշ ծառեր.

9. Ամբողջ լեզուն միշտ հասանելի է. Ակնհայտ տարբերություն չկա կարդալու ժամանակի, կոմպիլյացիայի ժամանակի և գործարկման ժամանակի միջև: Դուք կարող եք կազմել կամ գործարկել կոդը, երբ կարդում եք, կամ կարդալ կամ գործարկել կոդը կոմպիլյացիայի ընթացքում, կամ կարդալ կամ կազմել կոդը, երբ այն աշխատում է:

Ընթերցանության ընթացքում կոդի գործարկումը թույլ է տալիս օգտվողներին վերածրագրավորել Lisp-ի շարահյուսությունը; Կոմպիլյացիայի ժամանակ գործարկվող կոդը հիմք է մակրոների համար. Runtime կոմպիլյացիան Lisp-ը որպես ընդլայնման լեզու օգտագործելու հիմքն է այնպիսի ծրագրերում, ինչպիսին է Emacs-ը; և վերջապես, Runtime Reading-ը թույլ է տալիս ծրագրերին հաղորդակցվել՝ օգտագործելով s-արտահայտությունները, մի գաղափար, որը վերջերս կրկին հայտնագործվել է XML-ում:

Ամփոփում

Երբ Lisp-ն առաջին անգամ հայտնագործվեց, այս գաղափարները շատ հեռու էին ծրագրավորման սովորական պրակտիկաներից, որոնք թելադրված էին 1950-ականների վերջին հասանելի սարքավորումներով:

Ժամանակի ընթացքում լռելյայն լեզուն, որը մարմնավորված էր հանրաճանաչ լեզուների հաջողությամբ, աստիճանաբար զարգացավ դեպի Lisp: 1-5-րդ կետերն այժմ լայնորեն ընդունված են: 6-րդ կետը սկսում է հայտնվել հիմնական հոսքում: Python-ն ինչ-որ ձևով ունի 7-րդ կետ, չնայած չկա համապատասխան շարահյուսություն: 8-րդ կետը, որը (9-րդ կետով) հնարավոր է դարձնում մակրոները Lisp-ում, դեռևս միայն Lisp-ում է, հավանաբար այն պատճառով, որ (ա) այն պահանջում է այդ փակագծերը կամ նույնքան վատ բան, և (բ) եթե ավելացնեք հզորության այս վերջին ավելացումը, կարող եք. այլևս չպնդեք, որ նոր լեզու եք հորինել, այլ միայն ստեղծել եք Lisp-ի նոր բարբառ. -)

Թեև սա օգտակար է ժամանակակից ծրագրավորողների համար, սակայն տարօրինակ է նկարագրել Lisp-ը այլ լեզուներով ընդունված պատահական տեխնիկայից նրա տարբերությամբ: Հնարավոր է, որ սա այն չէ, ինչ մտածում էր Մաքքարթին: Lisp-ը նախատեսված չէր Ֆորտրանի սխալները շտկելու համար. այն ավելի շատ հայտնվեց որպես փորձի կողմնակի արդյունք աքսիոմատիզացնել հաշվարկները.

Source: www.habr.com

Добавить комментарий