История развития программного обеспечения

Первые реализации языка Lisp в СССР

История универсального языка программирования Lisp пронизана острыми дискуссиями, жаркими спорами, противоречивыми суждениями, яркими достижениями и смелыми изобретениями. В нашей стране знакомство программистов с этим языком состоялось из первых рук. Совершая в конце 1968 года турне по СССР [39, 40], Джон Маккарти прочел в Москве и Новосибирске циклы лекций, посвященных языку Lisp и автоматизации доказательств теорем. В рабочем порядке он описал с помощью языка Algol-60 основные алгоритмы системы программирования для языка Lisp 1.5, выражая при этом серьезный скепсис относительно возможности полноценной ее реализации на нашей лучшей ЭВМ БЭСМ-6. Этот скепсис прозвучал как интеллектуальный вызов. К этому времени С.С. Лавровым и А.П. Ершовым уже были развернуты проекты по созданию отечественных систем программирования на языке Lisp 1.5 на БЭСМ-6 [1, 32].

Московская (ВЦ АН СССР) Lisp-система, созданная С.С. Лавровым и Г. Силагадзе, подробно описана в [1–3], используемой и в наши дни как ясное описание языка и методов его реализации. Московская реализация языка Lisp много лет служила базовым инструментарием работ по искусственному интеллекту и символьной обработке. В дальнейшем были выполнены подобные реализации языка Lisp на ОДРА 1204 и ЕС ЭВМ [9,10]. Ряд интересных работ по автоматизации представления и анализа сложных молекул на этой системе выполнил В.С.Лозовский [11]. Поддержка системы и ее модернизация осуществлялись В.М. Юфой [7,8]. Этот проект в своей биографии С.С. Лавров признает одной из самых успешных разработок [41].

Новосибирская (ВЦ СО АН СССР) Лисп-система, разработанная Л.В. Городней, Л.В. Черноброд и Т.С. Янчук под руководством А.П. Ершова, слабо освещена в публикациях [12]. Новосибирская реализация языка Lisp применялась в пионерских исследованиях проблемы автоматизации проверки доказательств теорем и правильности высказываний о программах, преимущественно о типах данных. Кроме того — в студенческих работах и экспериментах по преобразованию и макетированию программ с целью поддержки процесса их разработки. Согласно новосибирской моде того времени система включает русифицированную версию языка. Эксплуатировалась система без особых переделок практически до демонтажа БЭСМ-6.

Ранняя история

Историю языка Lisp обычно датируют 1958 годом, начиная с публикации [21], хотя многие идеи сложились ранее в работах Дж. Маккарти(1956—1957), посвященных формализации средств и методов для решения задач искусственного интеллекта.

В исследованиях истории Лиспа профессор H. Stoyan показывает насколько непредвзято и тщательно, изобретательно и ответственно оттачивались решения по языку и методам его реализации. Были учтены как математические и лингвистические, так и эргономические и технологические аспекты разработки и применения будущих систем программирования на нового языка. Большое внимание было уделено расширению круга специалистов, заинтересованных в программировании на Лиспе. [45]

За краткий период времени были разработаны три версии языка Lisp 1, Lisp 1.5, Lisp 2 [21–23], определения которых показывают высокий темп изменения круга понятий и выбора практичного компромисса для входного языка системы программирования. Lisp 2 представляет собой перенос решений, выработанных для Lisp 1.5, на задачи вычислительного характера в стиле языка Algol 60 [4].

При первых реализациях языка сложилась структура системы программирования как комплекса из интерпретатора, компилятора, средств ввода-вывода списков и доступа к памяти с автоматической «сборкой мусора» и встроенной базой данных с динамически изменяемым форматом записей, хранящих информацию об атомах, обеспечивающих взаимодействие всех элементов системы и программы.

Восхищает смелость, общность и меткость большинства реализационных решений, противоречащих уже сложившейся технике программирования того времени ради освобождения программиста от сосредоточенности на непринципиальных затруднениях:

  • На фоне тщательного программирования поячеечного распределения памяти и ее методичного, причем небезопасного, изменения предлагается схема беззаботного размещения гибких списков произвольного размера с автоматической «сборкой мусора» лишь при дефиците памяти.
  • От вычислений в пределах машинного слова осуществлен прорыв к работе с целыми неограниченной длины и вещественными с задаваемой точностью.
  • В сравнении с форматным вводом-выводом в Фортране или скалярным в Паскале Лисп сразу позволяет вводить и выводить данные любой сложности без особых ритуальных действий.
  • Вместо серии мелких шагов целенаправленного накопления результатов обработки данных, хранимых в отдельных машинных словах, осуществлен переход к высокоуровневым выражениям, символизирующим отображения преобразуемых структур данных в интегральный результат посредством независимо программируемых рекурсивных функций, допускающих лаконичную форму.
  • Унаследованная от Фортрана идея раздельной компиляции реализуется как встроенная функция, которую можно вызвать в любой момент выполнения программы и по мере необходимости уточнять границу между отлаженными, созревшими для компиляции частями и недоотлаженными и потому интерпретируемыми для удобства диалоговой отладки.
  • Интерпретатор также входит в систему как встроенная функция, что позволяет программировать свои схемы вычислений, интерпретировать и компилировать динамически сконструированные программы как теперь говорят «на лету».
  • В целях обучения выделено концептуальное подмножество (Pure Lisp), достаточное для освоения наиболее важных особенностей языка, и разработан небольшой, но содержательно полный, сборник задач с ответами (240 задач на обработку списков и символьные преобразования формул) для быстрого самостоятельного перехода к программированию на языке.

Многолетняя дружба

В архиве академика А.П. Ершова хранится более 340 документов с упоминанием Дж. Маккарти — это письма и телеграммы, программы встреч и отчеты о них, заметки по следам бесед и встреч на конференциях, проекты и отклики на события, обмен мнениями и идеями относительно перспектив становления и развития программирования [25]. С 1965 года встречи становятся почти ежегодными. Язык Lisp упоминается в большинстве документов того времени — преимущественно Lisp 2 [26-28].

Начиная в декабре 1965 года, по завершении проекта АЛЬФА, продумывать проект БЕТА [29],[1] Андрей Петрович включает Lisp в обзор наиболее интересных языков для решения логических задач. Годом позже [30] Lisp 2 рассматривается как возможный кандидат на выбор основы при разработке БЕТА-языка первой БЕТАгруппой. В наброске двухуровневого БЕТА-языка [31] отражена полемика между сторонниками базиса на внутреннем (Lisp) или внешнем (Algol) языке. Независимо от альтернативы операции над списками выбраны как в языке Lisp 1.5. [22] Именно с этого момента и стартует Новосибирский Лисп-проект в рамках дипломной работы Т.С. Янчук [32], материалы для которой были высланы С.С. Лавровым [33].

Татьяна Янчук очень быстро реализовала ядро интерпретатора для Лисп-системы (без «мусорщика»), что позволило инициировать в Новосибирске первые работы по методам автоматизации логического вывода [35] в рамках курсовой работы Л.В. Суковотициной.

Джон Маккарти участвовал в ВКП-2 [36] с докладом «Текущее состояние математической теории вычислений» и активно дискутировал в кулуарных обсуждениях (он хорошо владеет русским языком), разъясняя роль абстрактных построений в теории и практике программирования, особенно при разработке больших программ. После участия в Международном симпозиуме «Проблемы теории программирования» Джон Маккарти и Джекоб Шварц на две недели включились в работы ВЦ СО РАН СССР по реализации языков Лисп и Сетл. [37], что и позволило ему поэкспериментировать с новой реализацией Lisp-системы на БЭСМ-6, разработанной в ВЦ СО АН СССР [38]. Тест, показывает ключевые построения, отличающие язык Lisp от традиционных языков программирования [42].

Перекличка друзей выдержала многолетние испытания, и в 1987 году Джон Маккарти принял участие в работе ЛШЮП, традиции которой до сих пор поддерживаются ИСИ СО РАН [46]

Много более давняя и тесная дружба связывает Андрея Петровича Ершова со Святославом Сергеевичем Лавровым. [25,34,42] Научный архив С.С. Лаврова передан на хранение в электронный архив А.П. Ершова.

LISP — БЭСМ-6 (ВЦ АН СССР)

В предисловии к [3] авторы отмечают, что в основу языка Lisp «положены оригинальные идеи, знакомство с которыми обогащает программистскую квалификацию и культуру и приносит пользу, даже если программист в дальнейшем и не работает с этим языком». По мнению авторов приведенное в книге «описание интерпретатора может служить примером подхода к составлению любых больших программ, т.е. программ, значительно превосходящих по размеру и сложности те программы, которые встречаются в учебных пособиях или излагаются на занятиях по программированию». Далее они констатируют, что «язык Лисп устроен так, что он во многих случаях позволяет находить путь к решению задачи постепенно, последовательно сводя ее к более простым задачам».

Немаловажно, что положенные в основу языка «понятия символьного выражения и рекурсивной функции, имеющей такие выражения своими аргументами, определяются очень просто — проще, чем основные понятия большинства других алгоритмических языков». Авторы констатируют, что в Лиспе «наименование функции — это по сути дела разновидность константы, отличающаяся тем, что ее значением является так называемое определяющее выражение некоторой функции». Приняв, что «вся сила языка заключена в возможности свободно пользоваться рекурсивными функциями», авторы нашли реализационные решения, обеспечивающие возможность функциям могут быть аргументами, причем определения функций могут содержать свободные переменные, что приводит к так называемой FUNARG-проблеме: «Значения свободных переменных в момент задания функциональных аргументов и в момент его использования могут отличаться друг от друга. Считается, что при вычислении тела определяющего выражения должны использоваться те значения свободных переменных, которые эти переменные имели во время задания функциональных аргументов, а не те, которые они могли получить позже». При реализации системы изобретено и реализовано оригинальное эффективное решение FUNARG-проблемы, заключающееся в особой разметке областей действия переменных в ассоциативном списке с помощью специального мостика, позволяющего при вызове функциональных аргументов переходить к состоянию ассоциативного списка в момент вызова объемлющей функции. «Среди ячеек, содержащих пары переменная — значение, могут быть вкраплены ячейки, CARуказатель которых содержит адрес Nil, а CDRуказатель — адрес одной из предшествующих ячеек ассоциативного списка».

Интересным является использование циклических списков для реализации разметки рабочих переменных: «Nillist — адрес циклической списочной структуры, имитирующей бесконечный список, составленный из атомов Nil».

Выражение (EVAL (LIST (QUOTE GO) X)) внутри формы PROG выполняет работу, подобную вычисляемому переходу в языке Fortran.

Средства ввода данных (READ) переводят текстовую форму любого символьного выражения в структуру данных, а средства вывода (PRINT) — печатают свой аргумент, являющийся значением функции, что удобно при отладке программ.

Некоторые реализационные ограничения связаны с организацией списков свойств атомов. Принимая, что «атомы могут быть наделены различными свойствами — атом может быть наименованием переменной, константы или функции или же числом. Функции и числа в свою очередь делятся на классы», в этой системе ради простоты реализации были ограничены средства работы с атомами: хранятся лишь значения и определения функций. Индикаторы свойств реализованы как разряды в информационной ячейке атома.

Приведено описание реализационных механизмов системы (интерпретатор, компилятор, ввод-вывод, форма PROG, арифметика, списки свойств и «уборка мусора». [3] Язык описания Algol-60 [4].

В своей биографии С.С. Лавров отмечает «Существенно более успешной была реализация языка Лисп на БЭСМ-6 (совместно с Г.С. Силагадзе). Удалось создать неплохие интерпретатор и компилятор Лиспа. В книге тех же авторов "Язык Лисп и его реализация" (М.: Наука, 1978) описана более совершенная реализация» [41].

На Ростовской молодежной Школе системного программирования (Мелиховка) в 1970 году в стенгазете отмечен «Лавровый Лисп».

Судьба Лиспа в России весьма волновала С.С. Лаврова. Он подготовил серию статей, адресованных старшеклассникам, для журнала «Компьютерные инструменты в образовании» и реализовал новую учебную систему на Паскале [5, 6]

ЛИСП — БЭСМ-6 (ВЦ СО АН СССР)

В конце 1968 года в кабинете А.П. Ершова Джон Маккарти прочел серию лекций, посвященных языку Лисп. Возможность практичного применения такого языка на ЭВМ БЭСМ-6 вызывала сомнения у специалистов.

Первая версия реализации Лисп-интерпретатора в Новосибирске, начатая в 1967 году, была прервана из-за обнаруженного несовершенства исходных решений (хэш-таблица атомов оказалась неприспособленной к удалению объектов). Вторая версия экспериментальной реализации полного Lisp 1.5 в условиях получения пяти минут машинного времени в день, чего с трудом хватало на прогон одной колоды на автокоде, потребовала изрядной изобретательности при выборе результативных проектных и технологических решений. Например, для представления интерпретатора был специально сконструирован язык загрузчика, удачно сочетавший эффективность программирования в кодах с гибкостью символьной обработки. В результате за пять минут вполне удавалось пропустить более пяти колод по 1000 перфокарт. Протокол работы программы начинал печататься моментально, сразу вслед за завершением приема перфокарт. Это определило достаточную результативность отладки Лисп-интерпретатора.

Алгоритмы и реализация были разработаны и отлажены Л.В. Городней. Л.В. Суковатицина (Черноброд) выполнила отладку Лисп-арифметики с целью поддержки будущих исследований в области верификации программ. Производственная версия Лисп-системы существовала в двух вариантах — быстрая и производительная. Для производительного варианта был реализован специальный механизм контроля стека с выгрузкой во внешнюю память. Внутреннее представление выбрано так, чтобы не требовалось при освобождении памяти в случае полных слов привлекать специальную память для разметки. Слова с единицей в разряде, зарезервированном для работы «мусорщика», представляются как отдельный тип данных, что можно рассматривать как перенос этого разряда в поле тега при адресе полного слова.

Работа с атомами поддержана в полном объеме, достаточном для представления любых фреймов. Система поддерживала одновременно английскую и русифицированную лексику. (КАР, КДР, КОНС, СОВП, АТОМ, ЛАМБДА, МЕТКА, КАВЫЧ, УСЛ, ФУНК, НИЛ, И, Л, ИНТЕРП, ЧТЕНИЕ, ПЕЧАТЬ, ПЕЧ0, ПЕЧФ, СПИСОК, НИЛС, ДЛИНА, ДОСТ, ЗНАЧ, ПОДПР, СВЫР, СПЕЦВЫР, СПЕЦПОЛПР, ОШИБКА, РЕЖИМ, СБОЙ, КОНЕЦ и др.)

При недостатке закрывающих скобок при чтении по умолчанию завершаются все построенные структуры. В тексте программы в позициях с нулевым балансом скобок можно было ставить символ «;».

Лисп-система на БЭСМ-6 эксплуатировалась практически без изменений почти до 1986 года (до смены элементной базы). О ней имеется косвенное упоминание в книге «Мир Лиспа», один из авторов которой бывал в Новосибирске и очень дотошно вникал во все, относящееся к Лиспу и его применению. [18] Мюнхенский музей Лиспа в качестве экспоната располагает публикацией о новосибирском Лисп-проекте. Основное применение системы исследования в области верификации программ, эксперименты по организации недоопределенных вычислений и конструированию семантических моделей [13,14].

Стандартизация языка Lisp

В начале 1980-х годов, после осознания кризиса технологии программирования, увлечения Lisp-машинами и поиска эффективных алгоритмов «сборки мусора», произошел спад интереса к проблемам искусственного интеллекта, что сказалось на уменьшении коммерческой поддержки Lisp-проектов. Это побудило ведущие Lisp-группы объединить усилия по стандартизации семейства Lisp-языков с целью повышения их выразительной силы и производительности. [44]

В этом процессе произошел раскол между сторонниками академических (Lisp-1) и производственных (Lisp-2) диалектов языка Lisp. Наиболее заметное различие связано с реализацией принципа представления функций и значений. Для академических диалектов характерна реализация единого пространства адресов для всех категорий хранимых в памяти данных. В 1970-е годы практиковались подходы к расширению доступной памяти посредством организации раздельного адресного пространства для разных категорий данных — программ, значений, стека и т.д. Естественно, что в производственных диалектах возникли реализации с раздельными пространствами для функций, переменных, тегов и т.п. В практике программирования эта разница проявляется в представлении вызовов динамически вычисляемых определений функций. Вместо (fn a1 a2 ... ) в программах на производственных диалектах приходится писать (FUNCALL fn a1 a2 ...), т.е. возникает необходимость во встроенной функции FUNCALL, выполняющей перевод данных из одного пространства в другое. Дебаты вокруг противопоставления диалектов Lisp-1 и Lisp-2 не утихли до сих пор. Языки Scheme и Common Lisp — наиболее популярные современные представители направлений Lisp-1 и Lisp-2 соответственно.

Следует отметить, что решения, принятые в системе LISP — БЭСМ-6 (ВЦ АН СССР), по духу близки Lisp2, а ЛИСП — БЭСМ-6 (ВЦ СО АН СССР) более соответствует Lisp-1.

Заключение

Идеи языка Lisp дали жизнь целому ряду современных парадигм компьютерных языков [47]. Важнейшая из них — парадигма функционального программирования. Эта парадигма впервые полно на русском языке изложена в переводе Л.Т. Петровой [17]. В предисловии к этой книге А.П. Ершов утверждает, что «понять и принять функциональное программирование легче, если рассматривать задачу программирования в ее полном контексте, начиная со спецификации задачи и логического анализа ее разрешимости, побочным продуктом которого является сама программа».

С приходом DEC-совместимой техники многие работы перекочевали на заимствованное программное обеспечение. Переход на диалекты Лиспа, такие как MuLisp и Interlisp, показал, что Лисп-программы менее чувствительны к аппаратным различиям, но зависят от системных вариаций семантики языка. [48,49]

Студенты технических университетов и архитектурных академий практикуют на AutoCAD, языком реализации и входным языком которого является AutoLisp [15,16].

С 1990-х годов стали доступными плоды свободно распространяемого обеспечения, включая систему GNU Clisp. [50]

В середине 1990-х годов Дмитрий Иванов и Арсений Слободюк эффективно и аккуратно реализовали представительное (ок. 500 функций) учебное подмножество языка Common Lisp, соответствующее стандарту X3J13. [51]

Историю отечественных реализаций языка Lisp в новом тысячелетии продолжил Б.Л. Файфель, создавший систему HomeLisp, обеспечивающую программирование в рамках современного Windows-интерфейса, используя средства машинной графики, COM-объекты и BLOB-объекты, WEB-компоненты, т.е. все, к чему привык современный программист, воспитанный на Visual Studio и Delphi [52]. Система содержит в своем составе COM-библиотеку и два скриптовых движка, позволяющих писать скрипты на Лиспе, а также вызывать Лисп из любой среды, поддерживающей COM. Реализована возможность построения автономных EXE-файлов, в т.ч. и с графическим интерфейсом. Поддерживается сверхдлинная арифметика целых. Входной язык этой системы, в основном навеянный идеями С.С. Лаврова и реализацией GNU CLisp, содержит обобщение техники работы с атомами: список свойств можно связать не только с именем, но и с числом. Реализован встроенный редактор, средства дампирования, справочная подсистема с полным описанием языка и вспомогательный сервис для начинающих с примерами программирования и шаблонами применения функций.

По меткому выражению Л.В. Черноброд: «Зная Лисп, легко понимать любые языки программирования». Такому применению Лиспа способствует обилие дистанционно доступных любительских сайтов и учебных материалов [53–72].

Примечания

1. В результате проекта АЛЬФА [http://www.iis.nsk.su/files/articles/mozaika_pottosin_alfa.pdf] была создана система АЛЬФА, входным языком которой был ранее разработанный АЛЬФА-язык. Система представляет собой многофазный оптимизирующий компилятор (АЛЬФА-транслятор) с входного языка в код М-20. В системе использовался ряд промежуточных, внутренних языков, разработанных специально для удобства анализа и отдельных преобразований программ.

Замысел проекта БЕТА начинался также с разработки входного языка (БЕТА-язык), но в условиях появления новых серийных ЭВМ. Это привело к идее создания символьного макроассемблера в качестве выходного языка будущей системы БЕТА. Такой макроассемблер, получивший название языка СИГМА, был реализован Г.Г. Степановым [http://www.iis.nsk.su/files/articles/mozaika_stepanov_sigma.pdf]. Язык СИГМА концептуально близок понятию абстрактной машины (АМ) Венской методике [http://www.vdmportal.org/twiki/bin/view, Оллонгрен А. Определение языков программирования интерпретирующими автоматами. Пер.с англ. Серия: Математическое обеспечение ЭВМ. М. Мир 1977г. 288 с. ил.] с некоторым существенным отличием. АМ определяется как языково-ориентированный машинно-независимый семантический базис, реализация которого выполняется отдельно для каждой машины в предположении, что трудоемкость реализации невелика. Язык СИГМА создан как языково-независимое представление программ, допускающее автоматизированную настройку на конкретную машину.

Выполненное первой БЕТА-группой исследование модных новинок в области универсальных языков программирования показало высокую сложность их реализации и внедрения. Возникли основания сосредоточить усилия на создании универсального внутреннего языка (ВЯЗ), унифицирующего средства ряда наиболее значительных универсальных языков и достаточного для оптимизации программ, представленных на разных входных языках. ВЯЗ был разработан и реализован, участниками второй БЕТА-группы для входных языков Симула67, Паскаль, Модула-2, Ада и выходных машин БЭСМ-6 и СМ-4 [ [http://db.iis.nsk.su/pottosin/40/win/cmoz01.htm]

Список литературы и источники

  1. Лавров С.С., Силагадзе Г.С. Входной язык и интерпретатор системы программирования на базе языка ЛИСП для машины БЭСМ-6. М.: ВЦ АН СССР, 1967.
  2. Лавров С.С., Силагадзе Г.С. Входной язык и интерпретатор системы программирования на базе языка ЛИСП для машины БЭСМ-6. М.: ИТМиВТ АН СССР, 1969.
  3. Лавров С.С., Силагадзе Г.С. Автоматическая обработка данных. Язык Лисп и его реализация. М.: Наука, 1978, 176 с.
  4. Лавров С.С. Универсальный язык программирования. М.: Наука. Главная редакция физико-математической литературы. 1967.г. 196с
  5. Лавров С.С.Функциональное программирование Компьютерные инструменты в образовании. — 2002, N 2-4
  6. Городняя Л.В., Лавров С.С Функциональное программирование. Принципы реализации языка Лисп Компьютерные инструменты в образовании. — 2002, N5, с. 49-58
  7. Юфа В.М. О новых функциях в системе ЛИСП БЭСМ-6. // В сб. «Обработка символьной информации», вып. 4, М.: ВЦ АН СССР, 1978, с. 26-50.
  8. Юфа В.М. Развитие системы программирования ЛИСП БЭСМ-6, обработка символьной информации, вып. I, М.: ВЦ АН СССР, 1973.
  9. Семенова Е. Т., Чернов ПЛ. Использование диалоговой системы LISP/EC в учебном процессе. Тр./ Моск. энерг. ин-та, 1981, вып. 525, с. 23 25.
  10. Пантелеев А. Г. Об интерпретаторе с языка Лисп для ЕС ЭВМ. — Программирование, 1980, No 3, с. 86-87
  11. Лозовский B.C. О некоторых аспектах человеко-машинного диалога. Изв. АН СССР, тех.кибернетика, 1981, с.147-156.
  12. Городняя Л.В. Реализация Лисп-интерпретатора // Вычислительная математика и программирование. — Новосибирск, 1974, с. 24-35.
  13. Городняя Л.В. Макетирование программ с помощью тестов и описаний. //В сб «Языки и системы программирования», Новосибирск, 1981, с. 115-123.
  14. Городняя Л.В. Некоторые диалекты Лиспа и сферы их применения. // В сб. «Трансляция и преобразования программ», Новосибирск, 1984, с. 29-39.
  15. Гладков С.А. Программирование на языке автолисп в системе САПР Автокад — М.: «Диалог-МИФИ», 1991. — 96 с.
  16. Хейфец А. Л. Инженерная компьютерная графика. AutoCAD // СПб. : БХВ-Петербург, 2007. 316 с.
  17. Хендерсон П. Функциональное программирование М.: Мир, 1983
  18. Хьювенен Э., Сеппанен Й. Мир Лиспа., т.1,2 М.: Наука, 1994
  19. Файфель Б.Л. Реализация HomeLisp. http://m.habrahabr.ru/post/83587
  20. Маурер У. Введение в программирование на языке ЛИСП. — М.: Мир, 1976.
  21. John McCarthy. Recursive Functions of Symbolic Expressions and Their Computation by Machine. Communications of the ACM, April 1960.
  22. John McCarthy et al. LISP 1.5 Programmers Manual. MIT Press, 1962.
  23. Lisp 1. Programmer's Manual. Massachusetts, 1960. 156 p.
  24. Mitchell, R.W., LISP 2 Specifications Proposal, Stanford Artificial Intelligence Laboratory Memo No. 21, Stanford, Calif., 1964.
  25. А.П. Ершов — С. Лаврову http://www.iis.nsk.su/news/events/20050419_ershov/poems
  26. Электронный архив академика А.П. Ершоваhttp://ershov.iis.nsk.su
  27. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=12704&fileid=93930
  28. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=13034&fileid=112612
  29. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=13085&fileid=112594
  30. http://ershov.iis.nsk.su/archive/eaimage.asp?did=12774&fileid=93883 документ о макроассемблере, позднее реализованном как язык Сигма
  31. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=13674&fileid=93994
  32. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=13828&fileid=131858
  33. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=4340&fileid=88413 письмо С.С. Лаврову с просьбой выслать материалы по Лиспу.
  34. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=19862&fileid=129519
  35. http://ershov.iis.nsk.su/archive/eaindex.asp?lang=1&did=3966 ответ С.С. Лаврова на просьбу выслать материалы по Лиспу.
  36. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=109&fileid=78913 документ с упоминанием уровня готовности Лисп-интерпретатора без мусорщика
  37. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=11038&fileid=104634 Фотография Дж. Маккарти на банкете ВКП-2
  38. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=4901&fileid=88923
  39. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=4904&fileid=88920 телеграмма о приезде Дж. Маккарти на симпозиум по теории программирования
  40. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=19653&fileid=129296 телеграмма о возможности визита Дж. Маккарти в Москву и Новосибирск
  41. http://ershov.iis.nsk.su/archive/eaimage.asp?lang=1&did=15347&fileid=120789 записка (автограф), написанная Дж. Маккарти во время визита Новосибирск
  42. Посвященный С.С. Лаврову раздел сайта ИСИ СО РАН — http://db.iis.nsk.su/persons/lavrov/biography.shtml
  43. Поздравление Дж. Маккарти с 75-летием на сайте ИСИ СО РАН — http://www.iis.nsk.su/news/events/mccarthy/
  44. Steele G.L.Jr, Gabriel R.P. The Evolution of Lisp http://www.dreamsongs.com/NewFiles/Hopl2.pdf
  45. Stoyan H. The Influence of the Designer on the Design — J. McCarthy and LISP. Artificial Intelligence and Mathematical Theory of Computation, p.409-426, Academic Press, 1991.
  46. Сайт Летней школы юных программистов ИСИ СО РАН — http://school.iis.nsk.su
  47. Городняя Л.В. Функциональный подход к описанию парадигм программирования //Новосибирск, ИСИ СО РАН. Препринт 152. 2009. 66 с.
  48. http://education.ti.com/us/product/software/derive/features/derivemulisp.html
  49. http://www.thefullwiki.org/InterLisp
  50. GNU Clisp http://www.clisp.org/
  51. http://www.ich.dvo.ru/~nmr/ylisp/
  52. http://homelisp.ru/
  53. http://www.softwarepreservation.org/projects/LISP/
  54. http://miser-theory.info/readings/theory.htm
  55. http://files.d-popov.ru/botva/tomilin/answers-3%20(1).pdf
  56. http://www.math.spbu.ru/csc/Memo30.pdf
  57. Lisp.Ru — Клуб программистов на языке Лисп.
  58. http://www8.informatik.uni-erlangen.de/html/lisp-enter.html
  59. http://history.siam.org/sup/Fox_1960_LISP.pdf
  60. http://www.teleology.ru/ru/projects_ru/informatics_ru/programming_ru/lisp_ru
  61. http://groups.google.com/group/fido7.ru.lisp/
  62. lisp.org — Ассоциация пользователей Лисп
  63. lisp.narod.ru — Начальные сведения о языках Лисп-семейства на русском
  64. http://www.cardarmy.ru/proekt/lisp/art2.htm учебник
  65. lisp.tomsk.ru — Лисп-портал
  66. http://traditio.ru/wiki/LISP
  67. http://www.intuit.ru/department/pl/lisp/
  68. http://www.intuit.ru/department/pl/funcpl/
  69. http://www.intuit.ru/department/se/paradigms/

Об авторе:Институт систем информатики им. А.П. Ершова СО РАН
lidvas@ngs.ru
Материалы международной конференции SORUCOM 2011 (12–16 сентября 2011 года)
Статья помещена в музей 01.09.2012 с разрешения авторов