УДК 004.6
ББК 32.973.26
Т30
Т30
Тейт, Брюс.
Семь языков за семь недель. Практическое руководство по изучению
языков программирования / Б. А. Тейт ; пер. с англ. А. Н. Киселева. — 2-е
изд., эл. — 1 файл pdf : 386 с. — Москва : ДМК Пресс, 2023. — Систем. требования:
Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст
: электронный.
ISBN 978-5-89818-315-8
Вместе с семью языками программирования вы исследуете наиболее важные из
современных моделей программирования. Вы познакомитесь с динамической типизацией,
которая делает языки Ruby, Python и Perl такими гибкими. Постигнете
систему прототипов, лежащую в основе языка JavaScript. Увидите, как сопоставление
с образцом в языке Prolog сказалось на формировании языков Scala и Erlang.
Узнаете, чем функциональное программирование на языке Haskell отличается от
программирования на языках семейства Lisp, включая Clojure.
Издание предназначено для программистов разной квалификации, в том числе
выбирающих для изучения новый язык программирования.
УДК 004.6
ББК 32.973.26
Электронное издание на основе печатного издания: Семь языков за семь недель. Практическое
руководство по изучению языков программирования / Б. А. Тейт ; пер. с англ. А. Н. Киселева. —
Москва : ДМК Пресс, 2014. — 384 с. — ISBN 978-5-94074-539-6. — Текст : непосредственный.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было
форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических
ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность
приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные
с использованием книги.
В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами
защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.
ISBN
978-5-89818-315-8
© 2010 Pragmatic Programmers, LLC.
© Оформление, перевод, ДМК Пресс,
2014
Стр.7
Содержание
Посвящение .................................................... 16
Благодарности ................................................. 18
Предисловие ................................................... 22
Глава 1. Введение ............................................ 25
1.1. Логика описания ..........................................................................................25
1.2. Языки ...............................................................................................................27
1.3. Купите эту книгу .........................................................................................29
Учитесь учиться ...........................................................................................29
Где получить помощь в трудный момент ............................................30
1.4. Не покупайте эту книгу .............................................................................31
Здесь рассказывается не только о синтаксисе, но и о многом
другом ..............................................................................................................31
Здесь не описывается порядок установки ..........................................32
Это не справочник по программированию .........................................32
Я буду постоянно подталкивать вас ....................................................33
1.5. Заключительное замечание .....................................................................34
Глава 2. Ruby ................................................... 35
2.1. Краткая история ..........................................................................................36
Интервью с Юкихиро Мацумото (Мац) .............................................36
2.2. День 1: Поиск няни .....................................................................................38
Молниеносный тур .....................................................................................38
Использование Ruby в консоли .............................................................39
Модель программирования......................................................................39
Условные конструкции ..............................................................................40
«Утиная» типизация ...................................................................................44
Что мы узнали в первый день..................................................................46
День 1: задания для самостоятельного решения ..............................46
2.3. День 2: Спускаемся с небес ......................................................................47
Определение функций ...............................................................................47
Массивы ..........................................................................................................47
Хэши .................................................................................................................49
Блоки кода и инструкция yield ...............................................................51
Запуск файлов сценариев на Ruby .......................................................53
Стр.8
8 Содержание
Определение классов .................................................................................53
Подмешивание ..............................................................................................56
Модули, перечисления и множества ....................................................58
Что мы узнали во второй день ................................................................60
День 2: задания для самостоятельного решения ..............................60
2.4. День 3: Большие перемены ......................................................................61
Открытые классы ........................................................................................62
Применение метода method_missing ....................................................64
Модули ............................................................................................................65
Что мы узнали в третий день ...................................................................69
День 3: задания для самостоятельного решения ..............................69
2.5. В заключение о Ruby ..................................................................................70
Сильные стороны ........................................................................................70
Недостатки .....................................................................................................72
Заключительные замечания ....................................................................73
Io ................................................................... 75
3.1. Введение в Io .................................................................................................75
3.2. День 1: Пропустим школу и повеселимся ..........................................76
Ломаем лед .....................................................................................................77
Объекты, прототипы и наследование ...................................................79
Методы ............................................................................................................81
Списки и отображения ..............................................................................83
true, false, nil и одиночные объекты .......................................................85
Интервью со Стивом Декортом .............................................................87
Что мы узнали в первый день..................................................................89
День 1: задания для самостоятельного решения ..............................89
3.3. День 2: Сосисочный король .....................................................................90
Условные конструкции и циклы ............................................................90
Операторы ......................................................................................................92
Сообщения .....................................................................................................94
Рефлексия ......................................................................................................97
Что мы узнали во второй день ................................................................99
День 2: задания для самостоятельного решения ..............................99
3.4. День 3: На параде и в других неожиданных местах ..................... 100
Предметно-ориентированные языки ................................................. 100
Аналог метода method_missing в языке Io ....................................... 103
Параллельные вычисления ................................................................... 105
Что мы узнали в третий день ................................................................ 109
День 3: задания для самостоятельного решения ........................... 109
Стр.9
Содержание 9
3.5. В заключение об Io ................................................................................... 110
Сильные стороны ..................................................................................... 110
Недостатки .................................................................................................. 111
Заключительные замечания ................................................................. 113
Prolog ........................................................... 114
4.1. О языке Prolog ........................................................................................... 115
4.2. День 1: Отличный водитель .................................................................. 116
Факты ........................................................................................................... 116
Простые выводы и переменные ........................................................... 118
Восполнение неполноты ........................................................................ 119
Раскрашивание карты ............................................................................. 121
А где сама программа? ............................................................................ 122
Унификация, часть 1 ................................................................................ 123
Практическое применение языка Prolog .......................................... 125
Что мы узнали в первый день............................................................... 129
День 1: задания для самостоятельного решения ........................... 129
4.3. День 2: Пятнадцать минут до «Народного суда» .......................... 130
Рекурсия ...................................................................................................... 130
Списки и кортежи .................................................................................... 132
Унификация, часть 2 ................................................................................ 132
Списки и математические операции .................................................. 135
Использование правил в обоих направлениях............................... 138
Что мы узнали во второй день ............................................................. 142
День 2: задания для самостоятельного решения ........................... 142
4.4. День 3: Взорвем Лас-Вегас .................................................................... 143
Решение судоку ......................................................................................... 143
Восемь ферзей ............................................................................................ 148
Что мы узнали в третий день ................................................................ 154
День 3: задания для самостоятельного решения ................................... 154
4.5. В заключение о Prolog ............................................................................ 155
Сильные стороны ..................................................................................... 156
Недостатки .................................................................................................. 157
Заключительные замечания ................................................................. 158
Scala ............................................................ 159
5.1. О языке Scala.............................................................................................. 159
Близость с Java... ....................................................................................... 160
Но без рабской преданности ................................................................. 160
Интервью с создателем Scala, Мартином Одерски....................... 161
Стр.10
10 Содержание
Функциональное программирование и параллельные
вычисления ................................................................................................. 163
5.2. День 1: Дом на холме ............................................................................... 164
Типы данных в Scala ............................................................................... 164
Выражения и условные конструкции ............................................... 166
Циклы ........................................................................................................... 168
Диапазоны и кортежи ............................................................................. 171
Классы в Scala ............................................................................................ 173
Вспомогательные конструкторы ......................................................... 176
Расширение классов ................................................................................ 177
Что мы узнали в первый день............................................................... 179
День 1: задания для самостоятельного решения ........................... 181
5.3. День 2: Обрезка кустарников и другие новые хитрости ............. 181
var и val ......................................................................................................... 182
Коллекции ................................................................................................... 184
Типы Any и Nothing ................................................................................. 188
Коллекции и функции ............................................................................ 189
Что мы узнали во второй день ............................................................. 195
День 2: задания для самостоятельного решения ........................... 196
5.4. День 3: Художественная стрижка ...................................................... 196
XML ............................................................................................................... 197
Сопоставление с образцом .................................................................... 198
Ограничители ............................................................................................ 199
Регулярные выражения .......................................................................... 199
Обработка XML и сопоставление с образцом ................................ 200
Параллельные вычисления ................................................................... 201
Параллельные вычисления в действии ............................................ 203
Что мы узнали в третий день ................................................................ 206
День 3: задания для самостоятельного решения ........................... 207
5.5. В заключение о Scala ............................................................................... 207
Основные сильные стороны ................................................................. 208
Недостатки .................................................................................................. 210
Заключительные замечания ................................................................. 212
Erlang ........................................................... 213
6.1. Введение в Erlang ..................................................................................... 213
Поддержка параллельных вычислений ............................................ 214
Интервью с доктором Джо Армстронгом ........................................ 216
6.2. День 1: Появление человека ................................................................. 218
Введение ...................................................................................................... 219
Стр.11
Содержание 11
Комментарии, переменные и выражения ......................................... 219
Атомы, списки и кортежи ...................................................................... 221
Сопоставление с образцом .................................................................... 222
Сопоставление на уровне битов .......................................................... 224
Функции ...................................................................................................... 225
Что мы узнали в первый день............................................................... 228
День 1: задания для самостоятельного решения ........................... 229
6.3. День 2: Изменение формы ..................................................................... 230
Управляющие структуры ....................................................................... 230
Анонимные функции .............................................................................. 233
Списки и функции высшего порядка ................................................ 234
Дополнительные средства для работы со списками .................... 237
Что мы узнали во второй день ............................................................. 242
День 2: задания для самостоятельного решения ........................... 243
6.4. День 3: Красная таблетка ....................................................................... 243
Основные примитивы параллельных вычислений ...................... 244
Обмен синхронными сообщениями ................................................... 247
Связывание процессов для повышения надежности .................. 250
Что мы узнали в третий день ................................................................ 255
День 2: задания для самостоятельного решения ........................... 256
6.5. В заключение об Erlang .......................................................................... 257
Основные сильные стороны ................................................................. 257
Основные недостатки .............................................................................. 259
Заключительные замечания ................................................................. 260
Clojure .......................................................... 261
7.1. Введение в Clojure .................................................................................... 262
О Lisp ............................................................................................................ 262
На стороне JVM ........................................................................................ 263
Готовность к встрече с миром параллельных вычислений ........ 263
7.2. День 1: Обучение Люка .......................................................................... 264
Вызовы простых функций ..................................................................... 265
Строки и символы .................................................................................... 267
Логические значения и выражения.................................................... 268
Списки, ассоциативные массивы, множества и векторы ............ 270
Определение функций ............................................................................ 275
Что мы узнали в первый день............................................................... 282
День 1: задания для самостоятельного решения ........................... 283
7.3. День 2: Йода и Сила ................................................................................ 284
Рекурсивные вычисления с помощью loop и recur ....................... 284
Стр.12
12 Содержание
Последовательности ................................................................................ 286
Отложенные вычисления ...................................................................... 289
defrecord и defprotocol ............................................................................. 293
Макросы ....................................................................................................... 296
Что мы узнали во второй день ............................................................. 298
День 2: задания для самостоятельного решения ........................... 299
7.4. День 3: Глаз дьявола ................................................................................ 299
Ссылки и транзакционная память ...................................................... 300
Атомы ............................................................................................................ 302
Агенты .......................................................................................................... 304
Отложенные задания............................................................................... 306
Что мы пропустили .................................................................................. 307
Что мы узнали в третий день ................................................................ 308
День 3: задания для самостоятельного решения ........................... 308
7.5. В заключение о Clojure ........................................................................... 309
Парадокс языка Lisp ............................................................................... 309
Основные сильные стороны ................................................................. 310
Основные недостатки .............................................................................. 312
Заключительные замечания ................................................................. 313
Haskell .......................................................... 315
8.1. Введение в Haskell.................................................................................... 315
8.2. День 1: логический ................................................................................... 317
Выражения и простые типы.................................................................. 317
Функции ...................................................................................................... 320
Рекурсия ...................................................................................................... 322
Кортежи и списки ..................................................................................... 323
Создание списков ..................................................................................... 328
Интервью с Филиппом Уодлером (Philip Wadler) ....................... 332
Что мы узнали в первый день............................................................... 333
День 1: задания для самостоятельного решения ........................... 334
8.3. День 2: Самая сильная черта характера Спока .............................. 335
Функции высшего порядка ................................................................... 335
Частично примененные функции и карринг ................................. 338
Отложенные вычисления ...................................................................... 339
Интервью с Саймоном Пейтоном-Джонсом ................................... 342
Что мы узнали во второй день ............................................................. 344
День 2: задания для самостоятельного решения ........................... 345
8.4. День 3: Слияние разумов ....................................................................... 346
Классы и типы ........................................................................................... 346
Стр.13
Содержание 13
Монады......................................................................................................... 353
Что мы узнали в третий день ................................................................ 361
День 3: задания для самостоятельного решения ........................... 361
8.5. В заключение о Haskell ........................................................................... 362
Основные сильные стороны ................................................................. 363
Основные недостатки .............................................................................. 365
Заключительные замечания ................................................................. 366
Послесловие ................................................. 367
9.1. Модели программирования .................................................................. 367
Объектно-ориентированное программирование (Ruby,
Scala) ............................................................................................................. 368
Программирование на основе прототипов (Io) ............................. 369
Логическое программирование (Prolog) .......................................... 369
Функциональное программирование (Scala, Erlang, Clojure,
Haskell) ......................................................................................................... 369
Смена парадигмы ...................................................................................... 370
9.2. Параллельные вычисления ................................................................... 371
Управляемое изменение состояния.................................................... 371
Акторы в Io, Erlang и Scala .................................................................... 372
Отложенные задания............................................................................... 373
Транзакционная память.......................................................................... 373
9.3. Конструкции программирования ....................................................... 374
Генераторы списков ................................................................................. 374
Монады......................................................................................................... 374
Сопоставление ........................................................................................... 375
Унификация ............................................................................................... 376
9.4. Найдите свой стиль ................................................................................. 376
Список литературы ......................................... 378
Предметный указатель .................................... 379
Стр.14