Осенью 1958 года Джон Маккарти пришёл в MIT с конкретной проблемой: ни один из существующих языков программирования не подходил для задач искусственного интеллекта. FORTRAN создавался для численных расчётов и плохо справлялся с символьной информацией — разбором предложений, доказательством теорем, логическими правилами вида «если А, то Б». Попытка обойти это ограничение через FLPL (Fortran List Processing Language), набор подпрограмм для работы со списками внутри FORTRAN, показала фундаментальный тупик: в языке не было ни рекурсии, ни нормальных условных выражений.

Маккарти к тому моменту был не просто исследователем, а одним из основателей самой дисциплины. Термин «artificial intelligence» появился в его заявке на Дартмутский семинар в 1955 году, а летом 1956-го встреча в Дартмуте закрепила его как название новой научной области. Вместе с Марвином Мински он запустил ИИ Project в MIT — структуру, из которой в 1969 году выросла MIT ИИ Lab. Инструмент для работы нужно было создавать с нуля.

КонцепцияПоявилась в ЛиспеГде используется сегодня
Сборка мусора (mark-and-sweep)1960Java, Python, Go
Функции как данные (гомоиконичность)1960Python, JavaScript, Clojure
Условные выражения if-then-else1958Все современные языки
REPL1960-еPython shell, Jupyter Notebook, Node.js repl

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

Маккарти написал eval как математическую нотацию, не планируя немедленно реализовывать её на реальной машине. Стив Расселл, молодой программист из его группы, решил проверить теорию на практике. Маккарти возразил: это нотация для чтения, а не для вычислений. Расселл всё равно написал интерпретатор вручную, в машинном коде IBM 704. Так в 1960 году появился первый работающий Лисп.

Язык принёс в программирование несколько идей, которые отрасль потом переоткрывала десятилетиями. Сборка мусора — алгоритм mark-and-sweep, разработанный Маккарти для автоматического освобождения памяти от недостижимых списков, — стала основой управления памятью в Java, Python и Go. Концепция гомоиконичности — когда программа и данные записываются одинаково, вложенными S-выражениями, — позволила строить макросы: код, генерирующий код прямо во время выполнения. Условные выражения if-then-else в современном понимании, возвращающие значение, тоже появились здесь: до 1958 года условные переходы реализовывались как низкоуровневые инструкции. REPL — интерактивный цикл «читай — вычисляй — печатай» — вырос из ранней культуры работы с Лиспом; Jupyter Notebook и Python shell наследуют ту же идею.

К началу 1960-х Лисп стал основным языком ИИ-исследований в MIT, Стэнфорде и Карнеги-Меллоне. К 1980-м на нём работали крупные прикладные системы, прежде всего экспертные. Проблема обнаружилась не в языке, а в железе: сборка мусора, динамическая типизация и работа со списками требовали ресурсов, которых стандартным машинам не хватало. Решение нашли радикальное — строить специализированные компьютеры под Лисп. Компании Symbolics и Lisp Machines Inc., оба спиноффа MIT ИИ Lab, выпускали такие машины с конца 1970-х; Texas Instruments тоже вошла в этот рынок. Рабочая станция стоила от $150 000, покупателями были лаборатории, крупные корпорации и военные.

Во второй половине 1980-х Unix-станции от Sun и других производителей обрушили рынок специализированного железа: стали дешевле и достаточно быстрыми, чтобы запускать Лисп без отдельного процессора. Symbolics подала на банкротство в 1993 году. Компания осталась в истории ещё по одной причине: symbolics.com — первый зарегистрированный домен в зоне.com, 15 марта 1985 года.

Параллельно менялась сама область ИИ. После «зимы искусственного интеллекта» конца 1980-х фокус сместился от символьных методов к статистическому машинному обучению, а в 2010-х — к глубоким нейросетям. Новые задачи требовали перемножать матрицы миллиарды раз: это про BLAS, CUDA и числа с плавающей точкой в плотных массивах, а не про символы и списки. Python занял нишу как обёртка над C++ и CUDA — и при этом унаследовал от Лиспа автоматическое управление памятью, функции как значения, интерактивную работу и динамические структуры данных. Самое радикальное — гомоиконичность и макросы — Python так и не взял.