Лиспти өзгөчө кылган эмне

«Эң улуу программалоо тили«
- Алан Кей, "on Lisp"

Лиспти өзгөчө кылган эмне

Маккарти 1950-жылдардын аягында Лиспти иштеп чыкканда, ал учурдагы тилдерден кескин түрдө айырмаланган, алардын эң негизгиси Fortran.

Лисп тогуз жаңы идеяны киргизди:

1. Шарттар. Шарттуу сүйлөмдөр болсо, анда башка конструкциялар. Азыр биз аларды кадимкидей кабыл алабыз. Алар болушту ойлоп тапкан Маккарти Лисптин өнүгүшү учурунда. (Ал убакта Фортранда goto билдирүүлөрү гана болгон, алар негизги аппараттык камсыздоо боюнча тармактык нускама менен тыгыз айкалышкан.) Маккарти Алгол комитетинде турганда Алголго шарттуу сөздөрдү кошкон, ал жерден алар башка тилдерге тараган.

2. Функциянын түрү. Lispде функциялар биринчи класстагы объекттер - алар сандар, саптар ж.б. сыяктуу берилиштердин түрү жана түз мааниси бар, өзгөрмөлөрдө сакталышы мүмкүн, аргумент катары берилиши мүмкүн ж.б.

3. Рекурсия. Рекурсия, албетте, Lispге чейин математикалык түшүнүк катары болгон, бирок Lisp аны колдогон биринчи программалоо тили болгон. (Бул, балким, биринчи класстагы объекттер катары функцияларды түзүүдө билдирет.)

4. Өзгөрмөлөрдүн жаңы концепциясы. Лиспте бардык өзгөрмөлөр эффективдүү көрсөткүчтөр болуп саналат. Маанилер өзгөрмөлөр эмес, кандай типтерге ээ жана өзгөрмөлөрдү дайындоо же байланыштыруу көрсөткүчтөрдү көчүрүү дегенди билдирет, алар көрсөткөн нерсени эмес.

5. Таштанды чогултуу.

6. туюнтмалардан турган программалар. Lisp программалары - ар бири маанини кайтарган туюнтма дарактары. (Кээ бир Lisp туюнтмалары бир нече маанини кайтара алат.) Бул Fortran жана башка көптөгөн ийгиликтүү тилдер менен айырмаланат, алар "сөз айкаштары" менен "айтыштарды" айырмалайт.

Фортранда мындай айырмачылыктын болушу табигый эле, анткени тил линияга багытталган (киргизүү форматы перфокарта болгон тил үчүн таң калыштуу эмес). Сиз билдирүүлөрдү киргизе алган жоксуз. Жана иштөө үчүн математикалык туюнтмалар керек болуп турганда, башка эч нерсе кайтарып берүүнүн эч кандай мааниси жок болчу, анткени кайтарылышын күтүп жаткан эч нерсе жок болушу мүмкүн.

Чектөөлөр блок-структуралуу тилдердин пайда болушу менен алынып салынды, бирок ага чейин кеч болуп калган. Сөздөр менен билдирүүлөрдүн ортосундагы айырма буга чейин эле белгиленген. Ал Фортрандан Алголго, андан кийин алардын урпактарына өткөн.

Тил толугу менен туюнтмалардан турганда, сиз каалагандай сүйлөмдөрдү түзө аласыз. Сиз да (синтаксисин колдонуу менен) жаза аласыз догоо)

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

же

(= x (if foo 1 2))

7. Символ түрү. Символдор саптардан айырмаланат, бул учурда көрсөткүчтөрдү салыштыруу аркылуу теңдикти текшере аласыз.

8. Код үчүн белги символдук дарактарды колдонуу.

9. Бардык тил ар дайым жеткиликтүү. Окуу убактысы, компиляция убактысы жана иштөө убактысынын ортосунда эч кандай ачык айырма жок. Сиз окуп жатканда кодду түзө аласыз же иштете аласыз, же компиляция учурунда кодду окуп же иштете аласыз, же иштеп жатканда кодду окуп же компиляциялай аласыз.

Окуу учурунда кодду иштетүү колдонуучуларга Lispтин синтаксисин кайра программалоого мүмкүндүк берет; компиляция убагында иштеп жаткан код макрос үчүн негиз болуп саналат; Runtime компиляциясы Lispти Emacs сыяктуу программаларда кеңейтүү тили катары колдонуу үчүн негиз болуп саналат; жана акырында, иштөө убактысын окуу программаларга s-экспрессияларды колдонуу менен байланышууга мүмкүндүк берет, бул идея жакында XMLде кайра ойлоп табылган.

жыйынтыктоо

Lisp биринчи жолу ойлоп табылганда, бул идеялар 1950-жылдардын аягында жеткиликтүү болгон аппараттык камсыздоо тарабынан айтылган кадимки программалоо практикасынан алыс болгон.

Убакыттын өтүшү менен популярдуу тилдердин ийгилиги менен камтылган демейки тил акырындык менен Лиспке карай өнүккөн. 1-5 пункттар азыр кеңири кабыл алынат. 6-пункт негизги агымда пайда боло баштады. Pythonдо кандайдыр бир формада 7-пункт бар, бирок ылайыктуу синтаксис жок. Макросторду Lispде мүмкүн кылган 8-пункт (9-пункт менен) дагы эле Lispте гана, балким, себеби (a) ал кашааларды же бирдей жаман нерсени талап кылат жана (б) кубаттуулуктун акыркы өсүшүн кошсоңуз, анда мындан ары жаңы тилди ойлоп таптым деп айтышпайт, бирок Лисптин жаңы диалектисин иштеп чыктык; -)

Бул заманбап программисттер үчүн пайдалуу болгону менен, Lispти башка тилдерде кабыл алынган кокустук техникалардан айырмасы боюнча сүрөттөп берүү кызык. Бул Маккарти ойлогон нерсе эмес болушу мүмкүн. Lisp Fortran каталарын оңдоо үчүн иштелип чыккан эмес; бул аракеттин кошумча продуктусу катары көбүрөөк пайда болду эсептөөлөрдү аксиоматташтыруу.

Source: www.habr.com

Комментарий кошуу