Dak li għamel lil Lisp speċjali

«L-akbar lingwa ta’ programmar li qatt inħolqot«
— Alan Kay, "fuq Lisp"

Dak li għamel lil Lisp speċjali

Meta McCarthy żviluppa Lisp lejn l-aħħar tas-snin ħamsin, kien radikalment differenti minn lingwi eżistenti, l-aktar importanti minnhom kienet Fortran.

Lisp introduċa disa’ ideat ġodda:

1. Kundizzjonali. Dikjarazzjonijiet kundizzjonali huma kostruzzjonijiet jekk imbagħad inkella. Issa nieħduhom for granted. Huma kienu ivvintat McCarthy waqt l-iżvilupp ta' Lisp. (Fortran dak iż-żmien kellu biss dikjarazzjonijiet goto, akkoppjati mill-qrib ma 'struzzjoni tal-fergħa dwar il-hardware sottostanti.) McCarthy, waqt li kien fil-kumitat Algol, ikkontribwixxa kundizzjonali għal Algol, minn fejn infirxu għal lingwi oħra.

2. Tip ta' funzjoni. F'Lisp, il-funzjonijiet huma oġġetti tal-ewwel klassi - huma tip ta 'dejta, bħal numri, kordi, eċċ., u għandhom rappreżentazzjoni letterali, jistgħu jinħażnu f'varjabbli, jistgħu jiġu mgħoddija bħala argumenti, eċċ.

3. Rikorsjoni. Ir-rikors, ovvjament, kien jeżisti bħala kunċett matematiku qabel Lisp, iżda Lisp kien l-ewwel lingwa ta 'programmar li appoġġjaha. (Dan forsi huwa implikat fil-ħolqien ta 'funzjonijiet bħala oġġetti tal-ewwel klassi.)

4. Kunċett ġdid ta 'varjabbli. F'Lisp, il-varjabbli kollha huma indikaturi effettivi. Il-valuri huma dak li għandhom it-tipi, mhux varjabbli, u l-assenjazzjoni jew l-irbit ta’ varjabbli tfisser li tikkopja pointers, mhux dak li jindikaw.

5. Ġbir taż-żibel.

6. Programmi komposti minn espressjonijiet. Il-programmi Lisp huma siġar ta' espressjonijiet, li kull waħda minnhom tagħti valur. (Xi espressjonijiet Lisp jistgħu jirritornaw valuri multipli.) Dan jikkuntrasta ma 'Fortran u ħafna lingwi oħra ta' suċċess li jiddistingwu bejn "espressjonijiet" u "dikjarazzjonijiet."

Kien naturali li jkun hemm din id-distinzjoni f'Fortran minħabba li l-lingwa kienet orjentata lejn il-linja (mhux sorprendenti għal lingwa li l-format tad-dħul tagħha kien karta mtaqqba). Ma setax ikollok dikjarazzjonijiet nested. U sakemm kellek bżonn espressjonijiet matematiċi biex taħdem, ma kien hemm l-ebda skop li jkollok xi ħaġa oħra tirritorna valur għax jista 'jkun hemm xejn jistenna li jiġi rritornat.

Ir-restrizzjonijiet tneħħew bil-miġja ta' lingwi strutturati b'mod blokk, iżda sa dak iż-żmien kien tard wisq. Id-distinzjoni bejn espressjonijiet u dikjarazzjonijiet diġà ġiet stabbilita. Għaddiet minn Fortran għal Algol u aktar għad-dixxendenti tagħhom.

Meta lingwa hija magħmula kompletament minn espressjonijiet, tista' tikkomponi espressjonijiet kif trid. Tista' tikteb jew (bl-użu tas-sintassi Arc)

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

jew

(= x (if foo 1 2))

7. Tip ta' simbolu. Il-karattri huma differenti mill-istrings, f'liema każ tista' tiċċekkja l-ugwaljanza billi tqabbel pointers.

8. Notazzjoni għall-kodiċi bl-użu ta’ siġar ta’ simbolu.

9. Il-lingwa kollha hija dejjem disponibbli. M'hemm l-ebda differenza ovvja bejn il-ħin tal-qari, il-ħin tal-kompilazzjoni u l-ħin tal-ġirja. Tista' tiġbor jew tħaddem kodiċi waqt li taqra, jew taqra jew tħaddem kodiċi waqt li tikkompila, jew taqra jew tikkompila kodiċi waqt li taħdem.

It-tħaddim tal-kodiċi waqt il-qari jippermetti lill-utenti jipprogrammaw mill-ġdid is-sintassi ta' Lisp; it-tħaddim tal-kodiċi fil-ħin tal-kompilazzjoni huwa l-bażi għall-macros; runtime kumpilazzjoni hija l-bażi għall-użu Lisp bħala lingwa ta 'estensjoni fi programmi bħal Emacs; u fl-aħħarnett, il-qari runtime jippermetti lill-programmi jikkomunikaw bl-użu ta 's-expressions, idea reinventata reċentement fl-XML.

Konklużjoni

Meta Lisp ġie ivvintat għall-ewwel darba, dawn l-ideat kienu 'l bogħod mill-prattiki ta' programmazzjoni konvenzjonali ddettati mill-hardware disponibbli fl-aħħar tas-snin ħamsin.

Maż-żmien, il-lingwa default, inkorporata mis-suċċess tal-lingwi popolari, evolviet gradwalment lejn Lisp. Il-punti 1-5 issa huma aċċettati ħafna. Il-punt 6 qed jibda jidher fil-mainstream. Python għandu klawżola 7 f'xi forma, għalkemm m'hemm l-ebda sintassi xierqa. L-oġġett 8, li (bil-punt 9) jagħmel macros possibbli f'Lisp, għadu biss f'Lisp, probabbilment minħabba li (a) jeħtieġ dawk il-parentesi jew xi ħaġa daqstant ħażina, u (b) jekk iżżid din l-aħħar żieda fil-qawwa, tista' m'għadhomx jippretendu li ivvintaw lingwa ġdida, iżda biss żviluppaw djalett ġdid ta 'Lisp; -)

Għalkemm dan huwa utli għall-programmaturi moderni, hija stramba li tiddeskrivi Lisp f'termini tad-differenza tiegħu mit-tekniki każwali adottati f'lingwi oħra. Dan jista 'ma jkunx dak li McCarthy kien jaħseb. Lisp ma kienx iddisinjat biex jikkoreġi l-iżbalji ta 'Fortran; deher aktar bħala prodott sekondarju ta 'tipprova axiomatize kalkoli.

Sors: www.habr.com

Żid kumment