Файл: Одерски Мартин, Спун Лекс, Веннерс Билл, Соммерс ФрэнкО41 Scala. Профессиональное программирование. 5е изд спб. Питер, 2022. 608 с. ил. Серия Библиотека программиста.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.12.2023
Просмотров: 729
Скачиваний: 11
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Отзывы на предыдущие издания книги 19
Я поистине впечатлен работой, проделанной авторами этой книги. Она бес
ценное руководство по языку Scala — средству для эффективного написания кода, постоянный источник вдохновения для разработки и реализации мас
штабируемого ПО. Если бы только у меня была Scala в ее нынешнем зрелом состоянии и эта книга на моем столе еще в 2003 году, когда я участвовал в разработке и внедрении части инфраструктуры портала Олимпийских игр
2004 года в Афинах!
Всем читателям: независимо от вашего опыта, я думаю, программирование на
Scala покажется вам очень гибким, и эта книга станет вашим верным другом в этом путешествии.
Христос К. К. Ловердос (Christos KK Loverdos),
консультант по программному обеспечению, исследователь
«Scala. Профессиональное программирование» — это превосходное углуб
ленное введение в Scala, а также отличный справочник. Я бы сказал, что эта книга занимает видное место на моей полке, если не считать, что я почти везде ношу ее с собой.
Брайан Клэппер (Brian Clapper),
президент ArdenTex, Inc.
Отличная книга, хорошо написанная, с вдумчивыми примерами. Рекомен
дую как опытным программистам, так и новичкам.
Говард Ловатт (Howard Lovatt)
Эта книга рассказывает не только о том, как разрабатывать программы на языке Scala, но и, что более важно, о том, зачем это делать. Прагматичный подход книги к представлению возможностей сочетания объектноориен
тированного и функционального программирования не оставляет читателю никаких сомнений в том, что такое Scala на самом деле.
Доктор Эрвин Варга (Ervin Varga),
генеральный директор и основатель EXPRO I.T. Consulting
Это отличное введение в функциональное программирование для объектно
ориентированных программистов. Моей основной целью было изучение функционального программирования, и на этом пути меня поджидали не
которые приятные сюрпризы Scala, такие как caseклассы и сопоставление с образцом. Scala — интригующий язык, и эта книга хорошо его раскрывает.
20 Отзывы на предыдущие издания книги
В подобного рода книгах всегда есть риск сказать слишком много или слиш
ком мало. Я считаю, что в «Scala. Профессиональное программирование» как раз достигнут идеальный баланс.
Джефф Хон (Jeff Heon), программист-аналитик
Понятность и техническая полнота — отличительные черты любой хорошо написанной книги, и я поздравляю Мартина Одерски, Лекса Спуна и Билла
Веннерса с действительно очень хорошо выполненной работой! Книга «Scala.
Профессиональное программирование» начинается с описания базовых концепций и поднимает пользователя до среднего уровня и выше. Эту книгу, безусловно, необходимо купить всем, кто хочет изучить Scala.
Джаган Намби (Jagan Nambi),
архитектор корпоративных бизнес-решений,
GMAC Financial Services
Читать эту книгу — одно удовольствие. Это одна из тех хорошо написан
ных технических книг, которые обеспечивают глубокое и всестороннее освещение предмета исключительно кратким и элегантным образом. Книга построена очень естественно и логично. Она одинаково хорошо подходит как для инженералюбителя, который просто хочет быть в курсе текущих тенденций, так и для профессионала, стремящегося к глубокому понима
нию основных функций языка и его дизайна. Настоятельно рекомендую эту книгу всем, кто интересуется функциональным программированием в целом. Разработчикам Scala эту книгу, безусловно, необходимо про
читать.
Игорь Хлыстов, архитектор программного
обеспечения/ведущий программист, Greystone Inc.
По мере изучения книги «Scala. Профессиональное программирование» начинаешь понимать, какое огромное количество труда в нее вложено.
Я никогда раньше не читал настолько всеобъемлющего пособия для но
вичков. Большинство авторов, стараясь объяснять материал на доступном уровне и не запутать читателя, опускают некоторые сложные аспекты.
Это оставляет довольно неприятный осадок, так как возникает навязчи
вое ощущение, что материал до конца не усвоен. Всегда есть остаточная
«магия», которую не объяснили и о которой читатель вообще не может судить. В этой книге такого никогда не происходит, она никогда не при
нимает ничего как должное: подробно описана каждая деталь и, если этого
Отзывы на предыдущие издания книги 21
недостаточно, дается ссылка на более глубокое объяснение. В самом деле, в тексте много перекрестных ссылок, поэтому составить полную картину сложной темы относительно легко.
Джеральд Леффлер (Gerald Loeffler),
Java-архитектор корпоративных бизнес-решений
Во времена, когда хорошие книги по программированию редки, «Scala.
Профессиональное программирование» Мартина Одерски, Лекса Спуна и Билла Веннерса действительно выделяется — это отличное введение для программистов среднего уровня. Здесь вы найдете все необходимое, чтобы выучить этот многообещающий язык.
Кристиан Нойкирхен (Christian Neukirchen)
Предисловие
Забавно наблюдать за рождением нового языка программирования. Боль
шинство тех, кто пользуется языками программирования — будь то новичок или профессионал, — не задумываются об их происхождении. Подобно молотку или топору, язык программирования — это инструмент, который позволяет нам выполнять свою работу. Мы редко размышляем о том, как появился этот инструмент, каков был процесс его разработки. У нас может быть свое мнение о его синтаксисе, но обычно просто принимаем его как есть и движемся вперед.
Однако создание языка программирования открывает совершенно иную перспективу. Появляются новые возможности того, что могло показаться безграничным. Но в то же время язык программирования должен удовле
творять бесконечному списку ограничений. Странное противоречие.
Новые языки программирования создаются по многим причинам: изза личного желания сделать чтото свое, глубокой академической проницатель
ности, технического долга или анализа других архитектур компиляторов и даже политики. Scala 3 — это комбинация некоторых из них.
Какая бы ни была комбинация, все началось с того, что однажды Мартин
Одерски (Martin Odersky) исчез, появившись несколько дней спустя, чтобы объявить на собрании исследовательской группы, что он начал эксперимен
ты по воплощению DOTисчисления в жизнь, написав новый компилятор с нуля
1
Мы были группой аспирантов и кандидатов, которые до недавнего времени играли важную роль в разработке и сопровождении Scala 2. В то время Scala достигал, казалось, непостижимых высот успеха, особенно для эзотерическо
го и академического языка программирования из школы с забавным названи
ем в Швейцарии. Scala недавно стал популярным среди стартапов в Области
1
DOTисчисления, или зависимые типы объектов, — это попытка теоретически обосновать систему типов языка Scala.
Предисловие 23
залива СанФранциско, и для поддержки, сопровождения и управления вы
пусками Scala 2 недавно была создана компания Typesafe, позже названная
Lightbend. Так почему же вдруг появился новый компилятор и, возможно, новый и другой язык программирования? Большинство были настроены скептически. Мартина это не испугало.
Прошли месяцы. Как по будильнику, в 12 часов дня вся лаборатория стя
гивалась в коридор, соединяющий все наши офисы. После того как нас со
биралось изрядное количество, мы вместе с Мартином отправлялись в один из многочисленных буфетов ФПШЛ (Федеральная политехническая школа
Лозанны), чтобы пообедать, а затем выпить кофе. Каждый день во время этого ритуала идеи для нового компилятора были постоянной темой для об
суждения. Обсуждения были жаркими, мы прыгали с одной темы на другую: от чегото, что «на 150 %» совместимо со Scala 2 (чтобы избежать фиаско, как при переходе с Python 2 на Python 3), до создания нового языка с полным спектром зависимых типов.
Один за другим, все скептики в исследовательской группе в итоге на
чинали увлекаться какимлибо из аспектов Scala 3, будь то оптимизация реализации проверки типов, новая архитектура компилятора или мощные дополнения к системе типов. Со временем большая часть сообщества также пришла к мысли, что Scala 3 значительно улучшен по сравнению со
Scala 2. У разных людей были разные причины для этого. Для некоторых это было улучшение читаемости за счет решения сделать необязательными фигурные и круглые скобки вокруг условий в условных операторах. Для других это были улучшения в системе типов, например сопоставление типов для улучшенного программирования на уровне типов. Список был бесконечным.
Вместо того чтобы слепо продвигаться вперед в разработке Scala 3, осно
вываясь лишь на догадках, я могу с уверенностью сказать, что Scala 3 — это результат большого изучения решений прошлого и многолетнего взаимо
действия с исследовательской группой ФПШЛ и сообществом Scala. И не было другого выхода, кроме как начать с чистого листа и строить на чистом фундаменте. Благодаря такому подходу с нуля возник, по сути, новый язык программирования, и имя ему — Scala 3. Конечно, он может быть совместим со Scala 2 и считаться третьим крупным релизом уже существующего языка программирования, но не дайте себя обмануть: Scala 3 представляет собой существенную оптимизацию многих экспериментальных идей, впервые по
явившихся в Scala 2.
Возможно, самое уникальное в Scala 3 — это то, что случилось с имплицита
ми. Scala с момента своего создания использовался умными программистами
24 Предисловие для достижения функциональности, которую мало кто считал возможной даже с учетом набора функций Scala, не говоря уже о том, для чего этот язык был разработан. Функция, ранее известная как имплициты, — это, пожалуй, самая известная функция Scala, которая применялась для использования
Scala 2 самым неожиданным образом.
Примеры использования имплицитов включают в себя добавление метода к классу задним числом без расширения и повторной компиляции этого класса. Или, учитывая сигнатуру типа, используемую в некотором контек
сте, автоматический выбор правильной реализации для этого контекста. Это лишь верхушка айсберга — мы даже написали исследовательскую работу, в которой пытались каталогизировать множество способов, которыми раз
работчики использовали имплициты [Kri19].
Это все равно что дать пользователю кнопки и рычаги и предоставить ему возможность построить отлаженный механизм, как механический кальку
лятор (рис. 1). Но часто вместо этого получается чтото наподобие кинети
ческой скульптуры Тео Янсена (Theo Jansen) (рис. 2), а не чтото имеющее очевидное применение
1
. Проще говоря, вы даете сообществу программистов нечто столь же простое, как кнопка и рычаг, и бесстрашные люди будут искать творческие способы их использования. Такова природа человека.
Но, возможно, ошибкой Scala 2 была идея предоставить в первую очередь чтото столь же универсальное, как кнопки и рычаги.
Рис. 1. Что мы задумали…
Рис. 2. …И что получили
1
Динамичные изображения кинетических скульптур Тео Янсена, получивших назва
ние Strandbeest, см. в видео: https://www.youtube.com/watch?v=LewVEF2B_pM.
Предисловие 25
Дело здесь в том, что в Scala 2 был бесконечный набор возможностей для использования имплицитов, что потребовало исследовательской работы, и сообщество в целом не могло прийти к согласию относительно того, как разумно их использовать. Никакая языковая функция не должна иметь столь туманного предназначения. И тем не менее они были. Имплициты рассма
тривались одними как уникальная и мощная особенность Scala, которой, по сути, не было ни в одном другом языке, а другими — как загадочный и часто разочаровывающий механизм, который агрессивно переписывал ваш код, чтобы он стал чемто другим.
Возможно, вы слышали часто повторяемую мантру о том, что Scala 3 во многих отношениях представляет собой упрощение Scala/Scala 2. История имплицитов — отличный тому пример. Осознавая все кульбиты, которые программисты делали с имплицитами в попытке реализовать более широкие шаблоны программирования, такие как вывод классов, Мартин, не без помо
щи, пришел к выводу, что нам не следует сосредотачиваться на имплицитах как на механизме, который люди могут использовать в самых общих случаях.
Скорее, мы должны сосредоточиться на том, что программисты хотят де
лать с имплицитами, и сделать это проще и эффективнее. Отсюда и мантра:
«Scala 3 фокусируется на намерении, а не на механизме».
В Scala 3 вместо того, чтобы сосредоточиться на универсальности имплици
тов как механизма, было принято решение сосредоточиться на конкретных сценариях их использования, которые разработчики имели в виду при выбо
ре имплицитов в первую очередь, и сделать эти шаблоны более доступными для использования по прямому назначению. Примеры включают в себя пере
дачу контекстной или конфигурационной информации неявными методами, без необходимости передавать повторяющиеся аргументы программисту, добавление методов в классы задним числом и преобразование между типа
ми, такими как Ints и Doubles, во время вычислений. Теперь Scala 3 делает эти варианты использования доступными для программистов без необхо
димости применять некоторую «глубокую» интуицию в отношении того, как компилятор Scala решит использовать имплициты. Вместо этого вы можете просто сосредоточиться на таких задачах, как «добавить метод foo в класс Bar без необходимости его перекомпиляции». Докторская степень не требуется. Просто замените предыдущее понятие «неявный» другими, более прямыми ключевыми словами, которые соответствуют конкретным вариантам использования, например такими, как given и using
. Подробнее об этом читайте в главах 21 и 22.
26 Предисловие
Эта история о том, что «приоритет отдается намерению над механизмом», не останавливается на пересмотре имплицитов. Скорее, философия затра
гивает почти все аспекты языка. Примерами могут служить дополнения и оптимизация многих аспектов системы типов Scala от типов объедине
ния и перечислений до сопоставления типов или даже чистки синтакси
са Scala: необязательные фигурные скобки для улучшения читаемости и более читаемый «тихий» синтаксис для конструкций if
, else и while
, в результате чего условные выражения больше напоминают английский язык, чем машинный код.
Не верьте мне на слово. Независимо от того, являетесь ли вы новичком в Scala или опытным разработчиком, я надеюсь, что вы найдете новшества, вошедшие в Scala 3, такими же свежими и простыми, какими их нахожу я!
Хизер Миллер (Heather Miller),
Лозанна, Швейцария,
1 июня 2021 г.
Благодарности
Мы благодарны за вклад в эту книгу многим людям.
Сам язык Scala — плод усилий множества специалистов. Свой вклад в проек
тирование и реализацию версии 1.0 внесли Филипп Альтер (Philippe Altherr),
Винсент Кремет (Vincent Cremet), Жиль Дюбоше (Gilles Dubochet), Бурак
Эмир (Burak Emir), Стефан Мишель (St
éphane Micheloud), Николай Михай
лов (Nikolay Mihaylov), Мишель Шинц (Michel Schinz), Эрик Стенман (Erik
Stenman) и Матиас Зенгер (Matthias Zenger). К разработке второй и текущей версий языка, а также инструментальных средств подключились Фил Багвелл
(Phil Bagwell), Антонио Куней (Antonio Cunei), Юлиан Драгос (Iulian Dragos),
Жиль Дюбоше (Gilles Dubochet), Мигель Гарсиа (Miguel Garcia), Филипп
Халлер (Philipp Haller), Шон Макдирмид (Sean McDirmid), Инго Майер (Ingo
Maier), Донна Малайери (Donna Malayeri), Адриан Мурс (Adriaan Moors),
Хуберт Плоциничак (Hubert Plociniczak), Пол Филлипс (Paul Phillips), Алек
сандр Прокопец (Aleksandar Prokopec), Тиарк Ромпф (Tiark Rompf), Лукас
Рыц (Lukas Rytz) и Джеффри Уошберн (Geoffrey Washburn).
Следует также упомянуть тех, кто участвовал в работе над структурой языка.
Эти люди любезно делились с нами своими идеями в оживленных и вдох
новляющих дискуссиях, вносили важные фрагменты кода в открытую раз
работку и делали весьма ценные замечания по поводу предыдущих версий.
Это Гилад Браха (Gilad Bracha), Натан Бронсон (Nathan Bronson), Коаюан
(Caoyuan), Эймон Кэннон (Aemon Cannon), Крейг Чамберс (Craig Chambers),
Крис Конрад (Chris Conrad), Эрик Эрнст (Erik Ernst), Матиас Феллизен
(Matthias Felleisen), Марк Харра (Mark Harrah), Шрирам Кришнамурти
(Shriram Krishnamurti), Гэри Ливенс (Gary Leavens), Дэвид Макивер (David
MacIver), Себастьян Манит (Sebastian Maneth), Рикард Нильссон (Rickard
Nilsson), Эрик Мейер (Erik Meijer), Лалит Пант (Lalit Pant), Дэвид Поллак
(David Pollak), Джон Претти (Jon Pretty), Клаус Остерман (Klaus Ostermann),
Хорхе Ортис (Jorge Ortiz), Дидье Реми (Didier R
émy), Майлз Сабин (Miles
Sabin), Виджей Сарасват (Vijay Saraswat), Даниэль Спивак (Daniel Spiewak),
Джеймс Страчан (James Strachan), Дон Симе (Don Syme), Эрик Торреборре
(Erik Torreborre), Мэдс Торгерсен (Mads Torgersen), Филип Уодлер (Philip