The Roots of Lisp
Эссе Пола Грэма (май 2001) объясняет, что в 1960 году Джон Маккарти опубликовал статью, в которой сделал для программирования примерно то же, что Евклид для геометрии: показал, как из горстки простых операторов и нотации для функций можно построить целый язык программирования. Этот язык он назвал Lisp (от «List Processing»), поскольку одной из его ключевых идей было использование простой структуры данных — списка — одновременно и для кода, и для данных. Грэм утверждает, что в истории было две по-настоящему чистые и непротиворечивые модели программирования: модель C и модель Lisp, и что новые языки последних 20 лет неуклонно движутся в сторону модели Lisp, добавляя к C-модели по частям такие черты, как типизация во время выполнения и сборка мусора. Отличительная — фактически определяющая — особенность Lisp в том, что он может быть написан на самом себе. Чтобы понять, что Маккарти имел в виду под этим, автор предлагает пройти его путь заново, переведя математическую нотацию в работающий код на Common Lisp.
May 2001
Май 2001
(I wrote this article to help myself understand exactly
what McCarthy discovered. You don't need to know this stuff
to program in Lisp, but it should be helpful to
anyone who wants to
understand the essence of Lisp — both in the sense of its
origins and its semantic core. The fact that it has such a core
is one of Lisp's distinguishing features, and the reason why,
unlike other languages, Lisp has dialects.)
(Я написал эту статью, чтобы самому в точности понять, что именно открыл Маккарти. Чтобы программировать на Lisp, знать всё это не нужно, но это должно быть полезно всякому, кто хочет понять суть Lisp — как в смысле его происхождения, так и в смысле его семантического ядра. Тот факт, что у него есть такое ядро, — одна из отличительных черт Lisp и причина, по которой, в отличие от других языков, у Lisp есть диалекты.)
In 1960, John
McCarthy published a remarkable paper in
which he did for programming something like what Euclid did for
geometry. He showed how, given a handful of simple
operators and a notation for functions, you can
build a whole programming language.
He called this language Lisp, for "List Processing,"
because one of his key ideas was to use a simple
data structure called a list for both
code and data.
В 1960 году John McCarthy опубликовал замечательную статью, в которой сделал для программирования примерно то же, что Евклид сделал для геометрии. Он показал, как, имея горстку простых операторов и нотацию для функций, можно построить целый язык программирования. Этот язык он назвал Lisp, от «List Processing» («обработка списков»), потому что одной из его ключевых идей было использовать простую структуру данных под названием список и для кода, и для данных.
It's worth understanding what McCarthy discovered, not
just as a landmark in the history of computers, but as
a model for what programming is tending to become in
our own time. It seems to me that there have been
two really clean, consistent models of programming so
far: the C model and the Lisp model.
These two seem points of high ground, with swampy lowlands
between them. As computers have grown more powerful,
the new languages being developed have been moving
steadily toward the Lisp model. A popular recipe
for new programming languages in the past 20 years
has been to take the C model of computing and add to
it, piecemeal, parts taken from the Lisp model,
like runtime typing and garbage collection.
Стоит понять, что открыл Маккарти, — не только как веху в истории компьютеров, но и как модель того, чем программирование склонно становиться в наше время. Мне кажется, что до сих пор было две по-настоящему чистые, непротиворечивые модели программирования: модель C и модель Lisp. Они выглядят как две возвышенности, между которыми лежат болотистые низины. По мере того как компьютеры становились мощнее, разрабатываемые новые языки неуклонно двигались в сторону модели Lisp. Популярный рецепт для новых языков программирования последних 20 лет состоял в том, чтобы взять C-модель вычислений и по частям добавлять к ней элементы, заимствованные из модели Lisp, — такие как типизация во время выполнения и сборка мусора.
In this article I'm going to try to explain in the
simplest possible terms what McCarthy discovered.
The point is not just to learn about an interesting
theoretical result someone figured out forty years ago,
but to show where languages are heading.
The unusual thing about Lisp — in fact, the defining
quality of Lisp — is that it can be written in
itself. To understand what McCarthy meant by this,
we're going to retrace his steps, with his mathematical
notation translated into running Common Lisp code.
В этой статье я попробую объяснить простейшими словами, что открыл Маккарти. Смысл не только в том, чтобы узнать об интересном теоретическом результате, который кто-то получил сорок лет назад, но и в том, чтобы показать, куда движутся языки. Необычное свойство Lisp — по сути, определяющее качество Lisp — в том, что его можно написать на нём самом. Чтобы понять, что Маккарти имел в виду под этим, мы пройдём его путь заново, переведя его математическую нотацию в работающий код на Common Lisp.