pg.gimran.org

Lisp тамырлары

Мамыр 2001 · Барлық эсселер

Пол Грэмнің «Lisp тамырлары» эссесінің аудармасы. Түпнұсқа: https://paulgraham.com/rootsoflisp.html. Машиналық аударма (Gemini).

Translation of Paul Graham's essay 'The Roots of Lisp'. Original: https://paulgraham.com/rootsoflisp.html. Machine translation (Gemini).

(Мен бұл мақаланы Маккартидің нақты нені ашқанын өзім жақсырақ түсіну үшін жаздым. Lisp тілінде бағдарламалау үшін бұл нәрселерді білу міндетті емес, бірақ бұл Lisp мәнін — оның пайда болу тарихы тұрғысынан да, семантикалық өзегі тұрғысынан да түсінгісі келетіндердің бәріне пайдалы болуы керек. Дәл осындай өзектің болуы — Lisp-тің айрықша ерекшеліктерінің бірі және басқа тілдерге қарағанда Lisp-тің неліктен көптеген диалектілері бар екенінің себебі.)

1960 жылы Джон Маккарти керемет ғылыми мақала жариялады, онда ол Евклидтің геометрия үшін жасағанына ұқсас нәрсені бағдарламалау үшін жасап берді. Ол бірнеше қарапайым операторлар мен функцияларға арналған нотацияны қолдана отырып, тұтас бағдарламалау тілін қалай құруға болатынын көрсетті. Ол бұл тілді "List Processing" (тізімдерді өңдеу) сөзінен қысқартып Lisp деп атады, өйткені оның негізгі идеяларының бірі код үшін де, деректер үшін де тізім (list) деп аталатын қарапайым деректер құрылымын пайдалану болды.

Маккартидің нені ашқанын түсіну тек компьютерлер тарихындағы маңызды белес ретінде ғана емес, сонымен бірге біздің заманымызда бағдарламалаудың қандай бағытқа қарай бет алып бара жатқанының үлгісі ретінде де маңызды. Меніңше, осы уақытқа дейін бағдарламалаудың шынымен таза, үйлесімді екі моделі болды: C моделі және Lisp моделі. Бұл екеуі арасында батпақты ойпаттары бар қыратты шыңдар сияқты. Компьютерлер қуаттырақ бола түскен сайын, жаңадан жасалып жатқан тілдер Lisp моделіне қарай үнемі жақындап келеді. Соңғы 20 жылдағы жаңа бағдарламалау тілдерінің танымал рецепті мынадай болды: есептеудің C моделін алып, оған орындалу кезіндегі типтеу (runtime typing) және қоқыс жинау (garbage collection) сияқты Lisp моделінен алынған бөлшектерді біртіндеп қосу.

Бұл мақалада мен Маккартидің нені ашқанын барынша қарапайым тілмен түсіндіруге тырысамын. Мақсат — біреудің қырық жыл бұрын тапқан қызықты теориялық нәтижесі туралы білу ғана емес, сонымен қатар тілдердің қайда бет алып бара жатқанын көрсету. Lisp-тің ерекше қасиеті — шын мәнінде, Lisp-ті айқындайтын басты қасиеті — оны өз ішінде өзімен жазуға болатындығында. Маккартидің мұнымен нені меңзегенін түсіну үшін, біз оның математикалық нотациясын жұмыс істеп тұрған Common Lisp кодына аудара отырып, оның жүріп өткен жолын қайта басып өтеміз.