Программирование на Clojure. Практика применения Lisp в мире Java
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
ДМК Пресс
Перевод:
Киселев Артём Николаевич
Год издания: 2023
Кол-во страниц: 817
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное образование
ISBN: 978-5-89818-600-5
Артикул: 817107.01.99
Почему многие выбирают Clojure? Потому что это функциональный язык программирования, не только позволяющий использовать Java-библиотеки, службы и другие ресурсы JVM, но и соперничающий с другими динамическими языками, такими как Ruby и Python.
Эта книга продемонстрирует вам гибкость Clojure в решении типичных задач, таких как разработка веб-приложений и взаимодействие с базами данных. Вы быстро поймете, что этот язык помогает устранить ненужные сложности в своей практике и открывает новые пути решения сложных проблем, включая многопоточное программирование.
Издание предназначено для программистов, желающих освоить всю мощь и гибкость функционального программирования.
- Полная коллекция по информатике и вычислительной технике
- Веб-разработка
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Программирование
- Программирование и алгоритмизация
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Программирование на Clojure Чаз Эмерик, Брайен Карпер, Кристоф Гранд
Practical Lisp for the Java World Clojure Programming Chas Emerick, Brian Carper, Cristophe Grand
Программирование на Clojure Москва, 2023 Чаз Эмерик, Брайен Карпер, Кристоф Гранд Практика применения Lisp в мире Java 2-е издание, электронное
УДК 004.432.42Clojure ББК 32.973-018.1 Э54 Э54 Эмерик, Чаз. Программирование на Clojure. Практика применения Lisp в мире Java / Ч. Эмерик, Б. Карпер, К. Гранд ; пер. с англ. А. Н. Киселёва. — 2-е изд., эл. — 1 файл pdf : 817 с. — Москва : ДМК Пресс, 2023. — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный. ISBN 978-5-89818-600-5 Почему многие выбирают Clojure? Потому что это функциональный язык программирования, не только позволяющий использовать Java-библиотеки, службы и другие ресурсы JVM, но и соперничающий с другими динамическими языками, такими как Ruby и Python. Эта книга продемонстрирует вам гибкость Clojure в решении типичных задач, таких как разработка веб-приложений и взаимодействие с базами данных. Вы быстро поймете, что этот язык помогает устранить ненужные сложности в своей практике и открывает новые пути решения сложных проблем, включая многопоточное программирование. Издание предназначено для программистов, желающих освоить всю мощь и гибкость функционального программирования. УДК 004.432.42Clojure ББК 32.973-018.1 Электронное издание на основе печатного издания: Программирование на Clojure. Практика применения Lisp в мире Java / Ч. Эмерик, Б. Карпер, К. Гранд ; пер. с англ. А. Н. Киселёва. — Москва : ДМК Пресс, 2015. — 816 с. — ISBN 978-5-97060-299-7. — Текст : непосредственный. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации. ISBN 978-5-89818-600-5 © Chas Emerick, Brian Carper, and Christophe Grand © Оформление, перевод ДМК Пресс, 2015
Содержание Предисловие к русскому изданию ........................................... 15 Благодарности .............................................................................. 16 Предисловие ................................................................................. 17 Глава 1. Вниз по кроличьей норе .............................................. 26 Почему Clojure? .................................................................................. 26 Как получить Clojure ........................................................................... 29 Интерактивная оболочка REPL для Clojure .......................................... 30 Вам не придется путаться в частоколе скобок .................................... 34 Выражения, операторы, синтаксис и очередность ............................. 35 Гомоиконность ................................................................................... 38 Механизм чтения................................................................................ 41 Скалярные литералы ..................................................................... 43 Строки ..................................................................................... 43 Логические значения ............................................................... 43 nil ............................................................................................. 43 Знаки (characters) .................................................................... 44 Ключевые слова (keywords) ...................................................... 44 Символы (symbols) ................................................................... 46 Числа ....................................................................................... 46 Регулярные выражения ............................................................ 48 Комментарии ................................................................................ 49 Пробелы и запятые ....................................................................... 51 Литералы коллекций ..................................................................... 51 Прочий синтаксический сахар механизма чтения .......................... 52 Пространства имен ............................................................................ 53 Интерпретация символов ................................................................... 56 Специальные формы .......................................................................... 57 Подавление вычислений: quote ..................................................... 59 Блоки кода: do ............................................................................... 60 Определение переменных: def ...................................................... 61
Содержание Связывание локальных значений: let ............................................. 62 Деструктуризация (let, часть 2) ...................................................... 64 Деструктуризация упорядоченных коллекций .......................... 65 Деструктуризация ассоциативных массивов ............................ 69 Создание функций: fn .................................................................... 74 Деструктуризация аргументов функций ................................... 77 Литералы функций ................................................................... 80 Выполнение по условию: if ............................................................ 82 Организация циклов: loop и recur .................................................. 83 Ссылки на переменные: var ........................................................... 85 Взаимодействие с Java: . и new .................................................... 86 Обработка исключений: try и throw ................................................ 86 Специализированная операция set! .............................................. 87 Примитивы блокировок: monitor-enter и monitor-exit ..................... 87 Все вместе ......................................................................................... 87 eval ................................................................................................ 88 Это лишь начало ................................................................................. 90 Часть I. ФУНКЦИОНАЛЬНОЕ И КОНКУРЕНТНОЕ ПРОГРАММИРОВАНИЕ ................................................................ 91 Глава 2. Функциональное программирование ...................... 92 Что подразумевается под термином «Функциональное программирование»? ......................................................................... 93 О важности значений.......................................................................... 94 О значениях .................................................................................. 95 Сравнение значений изменяемых объектов .................................. 96 Важность выбора ........................................................................ 101 Функции, как сущности первого порядка, и функции высшего порядка ............................................................................................ 103 Частичное применение ............................................................... 111 Композиция функций ....................................................................... 116 Создание функций высшего порядка........................................... 120 Создание простейшей системы журналирования с применением композиции функций высшего порядка ............... 121 Чистые функции ............................................................................... 126 В чем преимущество чистых функций? ........................................ 129 Функциональное программирование в реальном мире .................... 132 Глава 3. Коллекции и структуры данных ............................... 134 Главенство абстракций над реализациями ....................................... 135 Коллекции ................................................................................... 139 Последовательности ................................................................... 142
Содержание Последовательности не являются итераторами ..................... 145 Последовательности не являются списками .......................... 146 Создание последовательностей ............................................. 147 Ленивые последовательности ................................................ 148 Удержание мусора ................................................................. 156 Ассоциативные коллекции .......................................................... 157 Берегитесь значения nil ......................................................... 161 Индексирование ......................................................................... 162 Стек ............................................................................................ 164 Множество .................................................................................. 165 Сортированные коллекции .......................................................... 166 Определение порядка с помощью компараторов и предикатов .......................................................................... 168 Упрощенный доступ к коллекциям .................................................... 173 Идиоматические приемы использования .................................... 175 Коллекции, ключи и функции высшего порядка ........................... 176 Типы структур данных ....................................................................... 177 Списки ........................................................................................ 178 Векторы ...................................................................................... 179 Векторы как кортежи .............................................................. 180 Множества .................................................................................. 181 Ассоциативные массивы ............................................................. 182 Ассоциативные массивы как специализированные структуры ............................................................................... 183 Другие применения ассоциативных массивов ........................ 185 Неизменяемость и сохранность ....................................................... 189 Сохранность и совместное использование.................................. 190 Визуализация сохранности: списки ........................................ 191 Визуализация сохранности: ассоциативные массивы (векторы и множества) ........................................................... 193 Очевидные преимущества ..................................................... 196 Переходные структуры данных .................................................... 198 Метаданные ..................................................................................... 205 Включаем коллекции Clojure в работу ............................................... 207 Идентификаторы и циклы ............................................................ 208 Думайте иначе: от императивного к функциональному ................ 210 Вспоминаем классику: игра «Жизнь» ...................................... 211 Генерация лабиринтов............................................................ 220 Навигация, изменение и зипперы (zippers) .................................. 228 Манипулирование зипперами ................................................ 229 Собственные зипперы ............................................................ 231 Зиппер Ариадны .................................................................... 232 В заключение ................................................................................... 236
Содержание Глава 4. Конкуренция и параллелизм ................................... 237 Сдвиг вычислений в пространстве и времени ................................... 238 delay ............................................................................................ 238 Механизм future .......................................................................... 241 Механизм promise ....................................................................... 243 Параллельная обработка по невысокой цене .................................... 246 Состояние и идентичность ............................................................... 250 Ссылочные типы ............................................................................... 253 Классификация параллельных операций .......................................... 255 Атомы............................................................................................... 258 Уведомление и ограничение............................................................. 261 Функции-наблюдатели ................................................................ 261 Функции-валидаторы .................................................................. 264 Ссылки ............................................................................................. 266 Программная транзакционная память ......................................... 266 Механика изменения ссылок ....................................................... 268 Функция alter .......................................................................... 271 Уменьшение конфликтов в транзакциях с помощью commute ... 273 Затирание состояния ссылки с помощью ref-set..................... 279 Проверка локальной согласованности с помощью валидаторов ........................................................................... 279 Острые углы программной транзакционной памяти .................... 283 Функции с побочными эффектами строго запрещены .............. 283 Минимизируйте продолжительность выполнения транзакций ..... 284 Читающие транзакции могут повторяться .............................. 287 Искажение при записи ........................................................... 289 Переменные ..................................................................................... 291 Определение переменных ........................................................... 292 Приватные переменные ......................................................... 293 Строки документации ............................................................. 294 Константы .............................................................................. 295 Динамическая область видимости .............................................. 296 Переменные в языке Clojure не являются переменными в классическом понимании ......................................................... 303 Опережающие объявления.......................................................... 305 Агенты .............................................................................................. 307 Обработка ошибок в заданиях агентов ........................................ 310 Режимы и обработчики ошибок в агентах ............................... 312 Ввод/вывод, транзакции и вложенная передача заданий ............... 313 Сохранение состояний ссылок в журнале на основе агента .... 315 Использование агентов для распределения нагрузки ............... 318 Механизмы параллельного выполнения в Java ................................. 328 Блокировки ................................................................................. 329 В заключение ................................................................................... 330
Содержание Часть II. СОЗДАНИЕ АБСТРАКЦИЙ ......................................... 331 Глава 5. Макросы ........................................................................ 332 Что такое макрос? ............................................................................ 333 Чем не являются макросы ........................................................... 335 Что могут макросы, чего не могут функции? ................................ 336 Сравнение макросов и механизма eval в Ruby ............................. 339 Пишем свой первый макрос ............................................................. 341 Отладка макросов ............................................................................ 343 Функции развертывания макросов .............................................. 344 Синтаксис ........................................................................................ 346 Сравнение quote и syntax-quote................................................... 348 unquote и unquote-splicing ........................................................... 349 Когда следует использовать макросы ............................................... 351 Гигиена ............................................................................................ 353 Генераторы символов во спасение .............................................. 355 Предоставление пользователю права выбора имен .................... 359 Двукратное вычисление .............................................................. 360 Распространенные идиомы и шаблоны макросов ............................. 362 Неявные аргументы: &env и &form .................................................... 364 &env ............................................................................................ 364 &form .......................................................................................... 367 Вывод сообщений об ошибках в макросах.............................. 367 Сохранение определений типов, сделанных пользователем .... 370 Тестирование контекстных макросов .......................................... 373 Подробности: -> и ->> ..................................................................... 375 В заключение ................................................................................... 379 Глава 6. Типы данных и протоколы ........................................ 380 Протоколы........................................................................................ 381 Расширение существующих типов ................................................... 383 Определение собственных типов ..................................................... 389 Записи ........................................................................................ 392 Конструкторы и фабричные функции ...................................... 396 Когда использовать ассоциативные массивы, а когда записи ... 398 Типы ............................................................................................ 399 Реализация протоколов ................................................................... 402 Встроенная реализация .............................................................. 403 Встроенные реализации интерфейсов Java ........................... 405 Определение анонимных типов с помощью reify ..................... 407 Повторное использование реализаций ....................................... 408 Интроспекция протоколов ................................................................ 413 Пограничные случаи использования протоколов .............................. 415
Содержание Поддержка абстракций коллекций.................................................... 417 В заключение ................................................................................... 427 Глава 7. Мультиметоды ............................................................. 428 Основы мультиметодов .................................................................... 428 Навстречу иерархиям ....................................................................... 431 Иерархии ......................................................................................... 434 Независимые иерархии ............................................................... 437 Сделаем выбор по-настоящему множественным! ............................ 441 Кое что еще ..................................................................................... 443 Множественное наследование .................................................... 443 Интроспекция мультиметодов ..................................................... 445 type и class; или месть ассоциативного массива ......................... 446 Функции выбора не имеют ограничений ...................................... 447 В заключение ................................................................................... 449 Часть III. ИНСТРУМЕНТЫ, ПЛАТФОРМЫ И ПРОЕКТЫ ........ 450 Глава 8. Создание и организация проектов на Clojure ...... 451 География проекта ........................................................................... 451 Определение и использование пространств имен ....................... 452 Пространства имен и файлы .................................................. 461 Знакомство с classpath .......................................................... 465 Местоположение, местоположение, местоположение ............... 467 Организация программного кода по функциональным признакам ... 469 Основные принципы организации проектов ........................... 471 Сборка ............................................................................................. 472 Предварительная компиляция ..................................................... 473 Управление зависимостями ........................................................ 476 Модель Maven управления зависимостями ................................. 477 Артефакты и координаты........................................................ 477 Репозитории .......................................................................... 479 Зависимости .......................................................................... 480 Инструменты сборки и шаблоны настройки ................................. 483 Maven ..................................................................................... 484 Leiningen ................................................................................ 488 Настройка предварительной компиляции .............................. 491 Сборка гибридных проектов ................................................... 493 В заключение ................................................................................... 496 Глава 9. Java и взаимодействие с JVM .................................. 497 JVM – основа Clojure ......................................................................... 498 Использование классов, методов и полей Java ................................ 499