Wat makke Lisp spesjaal

«De grutste programmeartaal ea makke«
- Alan Kay, "on Lisp"

Wat makke Lisp spesjaal

Doe't McCarthy Lisp yn 'e lette jierren 1950 ûntwikkele, wie it radikaal oars as besteande talen, wêrfan de wichtichste wie Fortran.

Lisp yntrodusearre njoggen nije ideeën:

1. Betingsten. Betingststellings binne as-dan-oars konstruksjes. No nimme wy se foar fanselssprekkend. Se wiene útfûn McCarthy tidens de ûntwikkeling fan Lisp. (Fortran hie doe allinnich goto-útspraken, nau keppele oan in tûke-ynstruksje oer de ûnderlizzende hardware.) McCarthy, wylst hy yn 'e Algol-kommisje wie, droech betingsten by oan Algol, wêrfan't se ferspriede nei oare talen.

2. In funksje type. Yn Lisp binne funksjes earste-klasse objekten - se binne in gegevenstype, krekt as sifers, snaren, ensfh., En hawwe in letterlike foarstelling, kinne wurde opslein yn fariabelen, kinne wurde trochjûn as arguminten, ensfh.

3. Rekursy. Rekursy bestie fansels as wiskundich begryp foar Lisp, mar Lisp wie de earste programmeartaal dy't it stipe. (Dit wurdt miskien ymplisearre yn it meitsjen fan funksjes as earste-klasse objekten.)

4. In nij konsept fan fariabelen. Yn Lisp binne alle fariabelen effektive oanwizers. Wearden binne hokker typen hawwe, gjin fariabelen, en it tawizen of ferbinen fan fariabelen betsjut kopiearjen fan oanwizers, net wat se oanwize.

5. Garbage kolleksje.

6. Programma's gearstald út útdrukkingen. Lisp-programma's binne beammen fan útdrukkingen, elk fan dy jout in wearde werom. (Guon Lisp-útdrukkingen kinne meardere wearden werombringe.) Dit kontrast mei Fortran en in protte oare suksesfolle talen dy't ûnderskied meitsje tusken "útdrukkingen" en "útspraken."

It wie natuerlik om dit ûnderskied yn Fortran te hawwen, om't de taal line-rjochte wie (net ferrassend foar in taal wêrfan it ynfierformaat in ponskaart wie). Jo koenen gjin geneste útspraken hawwe. En salang't jo wiskundige útdrukkingen nedich wiene om te wurkjen, hie it gjin punt om wat oars in wearde werom te jaan, om't d'r miskien net wat wachte om werom te kommen.

De beheiningen waarden opheft mei de komst fan blokstrukturearre talen, mar doe wie it te let. It ûnderskied tusken útdrukkingen en útspraken is al fêstlein. It gong fan Fortran nei Algol en fierder nei harren neiteam.

As in taal folslein út útdrukkings bestiet, kinne jo útdrukkingen opstelle lykas jo wolle. Jo kinne beide skriuwe (mei de syntaksis Arc)

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

of

(= x (if foo 1 2))

7. In symboal type. Karakters binne oars as snaren, yn dat gefal kinne jo kontrolearje op lykweardigens troch fergelykjen fan pointers.

8. In notaasje foar koade mei help fan symboal beammen.

9. De hiele taal is altyd beskikber. D'r is gjin dúdlik ferskil tusken lêstiid, kompilaasjetiid en runtiid. Jo kinne koade kompilearje of útfiere wylst jo lêze, of koade lêze of útfiere wylst jo kompilearje, of koade lêze of kompilearje wylst it rint.

Koade útfiere by it lêzen lit brûkers de syntaksis fan Lisp opnij programmearje; rinnende koade op kompilaasje tiid is de basis foar makros; runtime-kompilaasje is de basis foar it brûken fan Lisp as útwreidingstaal yn programma's lykas Emacs; en as lêste, runtime lêzen kinne programma te kommunisearjen mei help fan s-útdrukkingen, in idee koartlyn opnij útfûn yn XML.

konklúzje

Doe't Lisp foar it earst waard útfûn, wiene dizze ideeën in fier fan 'e konvinsjonele programmearringpraktiken diktearre troch de hardware beskikber yn' e lette 1950's.

Yn 'e rin fan' e tiid evoluearre de standerttaal, belichemd troch it sukses fan populêre talen, stadichoan nei Lisp ta. Punten 1-5 wurde no breed akseptearre. Punt 6 begjint te ferskinen yn 'e mainstream. Yn Python is d'r in klausule 7 yn ien of oare foarm, hoewol d'r gjin geskikte syntaksis is. Item 8, dat (mei item 9) makro's mooglik makket yn Lisp, is noch allinnich yn Lisp, wierskynlik om't (a) it dy heakjes fereasket of wat like slim, en (b) as jo dizze lêste ferheging fan macht tafoegje, kinne jo net mear beweare in nije taal útfûn te hawwen, mar allinnich in nij dialekt fan Lisp ûntwikkele te hawwen; -)

Hoewol dit nuttich is foar moderne programmeurs, is it nuver om Lisp te beskriuwen yn termen fan har ferskil fan 'e willekeurige techniken dy't yn oare talen oannommen binne. Dit is miskien net wat McCarthy tocht. Lisp wie net ûntwurpen om Fortran syn flaters te korrigearjen; it ferskynde mear as in byprodukt fan besykjen aksiomatize berekkeningen.

Boarne: www.habr.com

Add a comment