Ano ang naging espesyal sa Lisp

Β«Ang pinakadakilang programming language na nilikhaΒ«
β€” Alan Kay, "sa Lisp"

Ano ang naging espesyal sa Lisp

Nang si McCarthy ay bumuo ng Lisp noong huling bahagi ng 1950s, ito ay lubhang naiiba sa mga umiiral na wika, ang pinakamahalaga sa mga ito ay Fortran.

Nagpakilala si Lisp ng siyam na bagong ideya:

1. Mga kondisyon. Ang mga kondisyong pahayag ay kung-pagkatapos-iba na mga konstruksyon. Ngayon ay tinatanggap na natin sila. Sila ay naimbento McCarthy sa panahon ng pagbuo ng Lisp. (Ang Fortran noong panahong iyon ay mayroon lamang mga pahayag na goto, malapit na isinama sa isang pagtuturo ng sangay sa pinagbabatayan na hardware.) Si McCarthy, habang nasa komite ng Algol, ay nag-ambag ng mga kondisyon sa Algol, kung saan sila kumalat sa ibang mga wika.

2. Isang uri ng function. Sa Lisp, ang mga function ay mga first-class na bagay - sila ay isang uri ng data, tulad ng mga numero, string, atbp., at may literal na representasyon, maaaring maimbak sa mga variable, maaaring maipasa bilang mga argumento, atbp.

3. Recursion. Ang recursion, siyempre, ay umiral bilang isang mathematical na konsepto bago ang Lisp, ngunit ang Lisp ang unang programming language na sumuporta dito. (Marahil ito ay ipinahiwatig sa paglikha ng mga function bilang mga first-class na bagay.)

4. Isang bagong konsepto ng mga variable. Sa Lisp, ang lahat ng mga variable ay epektibong mga payo. Ang mga halaga ay kung anong mga uri ang mayroon, hindi mga variable, at ang pagtatalaga o nagbubuklod na mga variable ay nangangahulugan ng pagkopya ng mga pointer, hindi kung ano ang itinuturo nila.

5. Pagkolekta ng basura.

6. Mga programang binubuo ng mga expression. Ang mga Lisp program ay mga puno ng mga expression, na ang bawat isa ay nagbabalik ng halaga. (Ang ilang Lisp expression ay maaaring magbalik ng maraming halaga.) Ito ay kaibahan sa Fortran at sa maraming iba pang matagumpay na wika na nakikilala sa pagitan ng "mga expression" at "mga pahayag."

Natural lang na magkaroon ng ganitong pagkakaiba sa Fortran dahil line-oriented ang wika (hindi nakakagulat para sa isang wika na ang input format ay isang punched card). Hindi ka maaaring magkaroon ng mga nested na pahayag. At hangga't kailangan mo ng mga mathematical expression upang gumana, walang saysay na magkaroon ng anumang bagay na magbabalik ng halaga dahil maaaring wala nang naghihintay na maibalik.

Inalis ang mga paghihigpit sa pagdating ng mga block-structured na wika, ngunit huli na ang lahat. Ang pagkakaiba sa pagitan ng mga expression at mga pahayag ay naitatag na. Dumaan ito mula Fortran hanggang Algol at higit pa sa kanilang mga inapo.

Kapag ang isang wika ay ganap na binubuo ng mga expression, maaari kang bumuo ng mga expression sa anumang paraan na gusto mo. Maaari kang sumulat ng alinman (gamit ang syntax Arko)

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

o

(= x (if foo 1 2))

7. Isang uri ng simbolo. Ang mga character ay iba sa mga string, kung saan maaari mong suriin ang pagkakapantay-pantay sa pamamagitan ng paghahambing ng mga pointer.

8. Isang notasyon para sa code gamit ang mga simbolong puno.

9. Ang buong wika ay palaging magagamit. Walang malinaw na pagkakaiba sa pagitan ng oras ng pagbabasa, oras ng pag-compile at oras ng pagtakbo. Maaari kang mag-compile o magpatakbo ng code habang nagbabasa ka, o magbasa o magpatakbo ng code habang nag-compile ka, o magbasa o mag-compile ng code habang tumatakbo ito.

Ang pagpapatakbo ng code habang nagbabasa ay nagpapahintulot sa mga user na i-reprogram ang syntax ng Lisp; Ang pagpapatakbo ng code sa oras ng pag-compile ay ang batayan para sa mga macro; Ang runtime compilation ay ang batayan para sa paggamit ng Lisp bilang extension na wika sa mga programa tulad ng Emacs; at sa wakas, ang pagbabasa ng runtime ay nagbibigay-daan sa mga programa na makipag-usap gamit ang mga s-expression, isang ideya na kamakailang muling naimbento sa XML.

Konklusyon

Noong unang naimbento ang Lisp, ang mga ideyang ito ay malayo sa mga nakasanayang kasanayan sa programming na idinidikta ng hardware na magagamit noong huling bahagi ng 1950s.

Sa paglipas ng panahon, ang default na wika, na kinakatawan ng tagumpay ng mga sikat na wika, ay unti-unting umunlad patungo sa Lisp. Ang mga puntos 1-5 ay tinatanggap na ngayon. Nagsisimula nang lumabas ang point 6 sa mainstream. Ang Python ay may sugnay 7 sa ilang anyo, kahit na walang angkop na syntax. Ang item 8, na (na may item 9) ay ginagawang posible ang mga macro sa Lisp, ay nasa Lisp pa rin, marahil dahil (a) nangangailangan ito ng mga panaklong iyon o isang bagay na parehong masama, at (b) kung idaragdag mo ang pinakabagong pagtaas ng kapangyarihan, maaari mong hindi na inaangkin na nag-imbento ng bagong wika, ngunit nakabuo lamang ng bagong diyalekto ng Lisp; -)

Bagaman ito ay kapaki-pakinabang para sa mga modernong programmer, kakaibang ilarawan ang Lisp sa mga tuntunin ng pagkakaiba nito mula sa mga random na pamamaraan na pinagtibay sa ibang mga wika. Maaaring hindi ito ang iniisip ni McCarthy. Ang Lisp ay hindi idinisenyo upang itama ang mga pagkakamali ni Fortran; mas lumitaw ito bilang isang by-product ng pagsubok axiomatize kalkulasyon.

Pinagmulan: www.habr.com

Magdagdag ng komento