Kas padarīja Lispu īpaŔu

Ā«Lieliskākā programmÄ“Å”anas valoda, kas jebkad radÄ«taĀ«
ā€” Alans Kejs, "On Lisp"

Kas padarīja Lispu īpaŔu

Kad Makartijs 1950. gadu beigās izstrādāja Lisp valodu, tas radikāli atŔķīrās no esoŔajām valodām, no kurām vissvarīgākā bija Fortran.

Lisp iepazīstināja ar deviņām jaunām idejām:

1. NosacÄ«jumi. NosacÄ«tie apgalvojumi ir ja-then-else konstrukcijas. Tagad mēs tos uzskatām par paÅ”saprotamiem. Viņi bija izgudrots Makartijs Lisp izstrādes laikā. (Fortran tajā laikā bija tikai goto paziņojumi, kas bija cieÅ”i saistÄ«ti ar filiāles norādÄ«jumiem par pamatā esoÅ”o aparatÅ«ru.) McCarthy, bÅ«dams Algola komitejā, pievienoja nosacÄ«jumus Algol, no kurienes tie izplatÄ«jās citās valodās.

2. Funkcijas veids. Programmā Lisp funkcijas ir pirmās klases objekti - tie ir datu tips, tāpat kā skaitļi, virknes utt., un tiem ir burtisks attēlojums, tos var saglabāt mainīgajos, var nodot kā argumentus utt.

3. Rekursija. Rekursija, protams, pastāvēja kā matemātisks jēdziens pirms Lisp, taču Lisp bija pirmā programmÄ“Å”anas valoda, kas to atbalstÄ«ja. (Iespējams, tas ir paredzēts, veidojot funkcijas kā pirmās klases objektus.)

4. Jauns mainÄ«go lielumu jēdziens. Programmā Lisp visi mainÄ«gie ir efektÄ«vi norādes. VērtÄ«bas ir tipiem, nevis mainÄ«gajiem, un mainÄ«go pieŔķirÅ”ana vai saistÄ«Å”ana nozÄ«mē rādÄ«tāju kopÄ“Å”anu, nevis to, uz ko tie norāda.

5. Atkritumu kolekcija.

6. Programmas, kas sastāv no izteiksmēm. Lisp programmas ir izteiksmju koki, no kuriem katrs atgriež vērtÄ«bu. (Dažas Lisp izteiksmes var atgriezt vairākas vērtÄ«bas.) Tas atŔķiras no Fortran un daudzām citām veiksmÄ«gām valodām, kas atŔķir ā€œizteiksmesā€ un ā€œpaziņojumusā€.

Fortran Ŕī atŔķirÄ«ba bija dabiska, jo valoda bija orientēta uz lÄ«niju (tas nav pārsteidzoÅ”i valodai, kuras ievades formāts bija perfokarte). Jums nevarēja bÅ«t ligzdoti priekÅ”raksti. Un, kamēr jums bija vajadzÄ«gas matemātiskas izteiksmes, lai strādātu, nebija jēgas kaut kam citam atgriezt vērtÄ«bu, jo var nebÅ«t nekā, kas gaidÄ«tu atgrieÅ”anu.

Ierobežojumi tika atcelti lÄ«dz ar blokstrukturētu valodu parādÄ«Å”anos, taču tad jau bija par vēlu. AtŔķirÄ«ba starp izteicieniem un apgalvojumiem jau ir noteikta. Tas no Fortrānas nonāca Algolā un tālāk viņu pēcnācējiem.

Ja valoda sastāv tikai no izteicieniem, varat sastādÄ«t izteicienus, kā vien vēlaties. Varat rakstÄ«t vai nu (izmantojot sintaksi Loks)

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

vai

(= x (if foo 1 2))

7. Simbola veids. RakstzÄ«mes atŔķiras no virknēm, un tādā gadÄ«jumā varat pārbaudÄ«t vienlÄ«dzÄ«bu, salÄ«dzinot rādÄ«tājus.

8. Koda apzīmējums izmantojot simbolu kokus.

9. Visa valoda vienmēr ir pieejama. Nav acÄ«mredzamas atŔķirÄ«bas starp lasÄ«Å”anas laiku, kompilÄ“Å”anas laiku un izpildes laiku. Varat apkopot vai palaist kodu lasÄ«Å”anas laikā vai lasÄ«t vai palaist kodu, kamēr jÅ«s kompilējat, vai lasÄ«t vai apkopot kodu, kamēr tas darbojas.

Koda palaiÅ”ana lasÄ«Å”anas laikā ļauj lietotājiem pārprogrammēt Lisp sintaksi; koda palaiÅ”ana kompilÄ“Å”anas laikā ir makro pamats; izpildlaika kompilācija ir pamats Lisp kā paplaÅ”inājuma valodas izmantoÅ”anai tādās programmās kā Emacs; un visbeidzot, izpildlaika lasÄ«Å”ana ļauj programmām sazināties, izmantojot s-izteiksmes ā€” ideju, kas nesen tika izgudrota XML.

Secinājums

Kad Lisp pirmo reizi tika izgudrots, Ŕīs idejas bija tālu no tradicionālajām programmÄ“Å”anas praksēm, ko noteica 1950. gadu beigās pieejamā aparatÅ«ra.

Laika gaitā noklusējuma valoda, ko iemiesoja populāro valodu panākumi, pakāpeniski attÄ«stÄ«jās uz Lisp. Punkti 1-5 tagad ir plaÅ”i pieņemti. 6. punkts sāk parādÄ«ties galvenajā plÅ«smā. Python kaut kādā formā ir 7. klauzula, lai gan nav piemērotas sintakses. 8. vienums, kas (ar 9. vienumu) ļauj izmantot makro programmā Lisp, joprojām ir tikai Lisp ā€” iespējams tāpēc, ka (a) tam ir vajadzÄ«gas Ŕīs iekavas vai kaut kas tikpat slikts, un (b) ja pievienojat Å”o pēdējo jaudas palielinājumu, varat vairs neapgalvo, ka ir izgudrojis jaunu valodu, bet tikai ir izstrādājis jaunu Lisp dialektu; -)

Lai gan tas ir noderÄ«gi mÅ«sdienu programmētājiem, ir dÄ«vaini aprakstÄ«t Lisp, ņemot vērā tā atŔķirÄ«bu no nejauŔām metodēm, kas pieņemtas citās valodās. Iespējams, tas nav tas, ko Makartijs domāja. Lisp nebija paredzēts Fortrāna kļūdu laboÅ”anai; tas vairāk parādÄ«jās kā mēģinājumu blakusprodukts aksiomatizēt aprēķinus.

Avots: www.habr.com

Pievieno komentāru