-
Notifications
You must be signed in to change notification settings - Fork 3
/
appendix_a.tex
34 lines (21 loc) · 10.8 KB
/
appendix_a.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
\chapter*{Приложение A}
\markboth{\MakeUppercase{Приложение A}}{}
\addcontentsline{toc}{chapter}{Приложение A}
\section*{A.1 Дорога к лиспу}
\markboth{\MakeUppercase{A.1 Дорога к лиспу}}{}
\addcontentsline{toc}{section}{A.1 Дорога к лиспу}
Эта часть содержит мои очевидно субъективные мысли о том, какими языками стоит поинтересоваться профессиональному лисп программисту. Конечно лучшая причина, по которой стоит изучать другие не-лисп языки, заключается в идеях которые вы можете использовать в ваших лисп программах.
Если вам повезло изучить лисп перед всеми другими языками программирования, поздравляю, вы сделали это быстрее, чем большинство из нас. Если вы только начали изучать лисп, то не расстраивайтесь: вы много не потеряли. Все остальные языки программирования лишь интересные достопримечательности на лучших приятных остановках на дороге программистских знаний: \emph{дороге к лиспу\index{дорога к лиспу}}. Так как лисп стремится собирать и объединять все ценные программистские идеи, то, как правило, в лиспе они уже существуют. Но иногда лучшие идеи сначала реализуются не в лиспе. Профессиональные макро программисты знают столько языков, сколько возможно. Поскольку вы становитесь лисп программистом, то это значит, что вы должны знать изменение языка. В то время как для большинства программистов знание языка означает запоминание набора синтаксических конструкций, то для лисп программиста знание языка обозначает понимание того, как язык относится к лиспу.
Я думаю, что каждый программист должен исследовать все различны типы языков, хотя бы для того, чтобы корректно объяснить почему лисп делает что-то лучше. Идите вперед, найдите вашу дорогу к лиспу.
\section*{A.2 C и Perl}
\markboth{\MakeUppercase{A.2 C и Perl}}{}
\addcontentsline{toc}{section}{A.2 C и Perl}
После лиспа C\index{C} самый важный для изучения язык программирования. C \emph{общепринятый язык (lingua franca)\index{lingua franca}} программистского сообщества. Если вы не знаете С, то вы не сможете понять большинство интересных программ. C, конечно же, блаб язык, но он кратко специфицированный и хорошо реализованный блаб язык, который заслуживает вашего внимания. C также полезное средство для изучения применения указателей\footnote[1]{Хотя форт также хорош или лучше.} и понимания почему разработка языка с учётом возможностей и ограничений компьютера является плохой идеей. Наконец, многие современные блаб языки произошли от C, и поэтому, изучение C означает одновременное изучение многих языков.
После лиспа и C, Perl\index{Perl} самый важный для изучения язык не только из-за своей несравненной практичности, но также из-за своей философии. Если мы должны использовать блаб синтаксис --- исключая возможность макросов --- нам разрешено расширять его настолько насколько это возможно. Давайте включим все возможные удобства и мощные трюки, которые только можно представить. Если лисп результат отказа от синтаксиса, то Perl результат полного применения синтаксиса. Наряду с предлагаемыми удобствами Perl проповедует юниксовую версию очень лисповского принципа: Существует Больше Одного Способа Сделать Это. Языки не должны основываться на стиле, но скорее на мощном множестве примитивов, которые будучи однажды полностью понятыми, собираются вместе чтобы произвести неожиданно удивительный код. Программирование на Perl дарит инстинкт для нахождения и использования программных сокращений. Средний Perl программист лучше осознаёт и понимает пользу такой концепции макросов как \emph{анафора}\index{анафора} чем средний лисп программист. Хотя Perl и блаб язык, но это красивый блаб язык.
\section*{A.3 Лисп инкубаторы}
\markboth{\MakeUppercase{A.3 Лисп инкубаторы}}{}
\addcontentsline{toc}{section}{A.3 Лисп инкубаторы}
Форт\index{форт} один из моих любимых языков программирования. Там где C использовал подход построения языка вокруг наименьшего общего знаменателя компьютерной архитектуры, форт использовал подход архитектуры идеальной \emph{абстрактной машины}\index{абстрактные!машины} вместе с мощной системой мета-программирования, позволяющей программистам чувствовать свободу для творческой реализации на настоящих машинах. Форт способен расширяться различными способами, уступая лишь лиспу. Чарльз Мур, изобретатель Форта, был студентом Джона Маккарти, изобретателя лиспа [EVOLUTION-FORTH-HOPL]. Форт ведет к лиспу.
Smalltalk\index{Smalltalk} --- это интересный взгляд на то, как должны работать объектные системы. Он достоин изучения хотя бы за его концептуальную важность и богатую историю. Smalltalk может также служить хорошим \emph{мягким введением\index{мягкое введение}} в такие современные объектные системы как CLOS, COMMON LISP Object System, и даже как хорошее введение в то, как \emph{правильно\index{правильный}} делать языки программирования. Smalltalk занимательная и сверкающая остановка на дороге к лиспу. Алан Кэй, изобретатель Smalltalk, говорит, что лисп был одним из главных источников его вдохновения. Smalltalk ведет к лиспу.
Haskell\index{Haskell} восхитительный инновационный язык программирования, который выражает то, как люди думают о программировании. Не изучать Haskell означает лишить себя определённого количества самых интересных исследований в Блаб языках на сегодняшний день. Но самая главная причина попробовать Haskell --- это изучить как маленькие системы со статической типизацией, как ни странно, делают свой вклад в продуктивное программирование --- даже такие скромные и расширяемые как Haskell. В частности, если вы доказываете теоремы на монадических типах или исследуете теорию типов категорий, то для вас понравятся затейливые системы типов. Но для подавляющего большинства программирования такие системы типов выглядят хорошо \emph{на бумаге\index{на бумаге}}, чем на самом деле. Haskell --- это огромный успех. Доказано, что статическая типизация является ошибкой. Не считая статическую типизацию и инфиксный синтаксис, Haskell достоин изучения за множество инновационных свойств: изолирование побочных эффектов, ленивое вычисление через редукцию графов, транзакционную память и т.д.
О Форте, Smalltalk, Haskell и многих других языках можно думать как об \emph{инкубаторах лиспа\index{инкубаторы}}. Эксперименты в лисп инкубаторах с программистскими идеями, некоторые из которых становятся достаточно зрелыми для того, чтобы быть \emph{украденными\index{украсть}} в лисп макросы. Все дороги ведут к лиспу.