Вы находитесь на странице: 1из 10

Scala изнутри

Первое издание

Стас Лозенко
Эта книга предназначена для продажи на http://leanpub.com/inside-scala

Эта версия была опубликована на 2018-08-04

Это книга с Leanpub book. Leanpub позволяет авторам и издателям участвовать в так
называемом Lean Publishing - процессе, при котором электронная книга становится
доступна читателям ещё до её завершения. Это помогает собрать отзывы и пожелания для
скорейшего улучшения книги. Мы призываем авторов публиковать свои работы как можно
раньше и чаще, постепенно улучшая качество и объём материала. Тем более, что с нашими
удобными инструментами этот процесс превращается в удовольствие.

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0


International License
Оглавление

Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Scala и его компания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Дополнение А. Установка Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6


Предисловие
Важно не количество знаний, а качество их. Можно знать очень многое, не зная
самого нужного.
Лев Николаевич Толстой

В наше время очень легко найти книгу, которая покрывает поверхностно ту или иную
технологию. Найти стоящую очень тяжело, при этом практически невозможно найти ту
книгу, в котором сам автор прошелся по предмету вдоль и поперек, да еще и имея при этом
коммерческий опыт.
Я попытаюсь найти ту золотую середину, в котором предметная область будет освещена
максимально широко и в то же время у вас не будет желания придушить меня с криком “да
сколько можно рассусоливать одно и то же”.
На протяжении всей книги местами я буду сравнивать язык Scala c Java и для этого есть очень
веское основание: будучи JVM языком Scala компилируется в Java, затем в байткод, что дает
нам фантастическое преимущество проанализировать как и главное во что Scala превращает
свои языковые конструкции. Очень важно заметить, что благодаря такому подходу мы
сможем качественно сравнить языки по эффективности, простоте и производительности.
Поэтому, время от времени вы будете видеть сноски по производительности с ссылкой на
JMH бенчмарк (я буду использовать JMH¹ как основу исследования быстродействия Scala и
Java. Она выглядит примерно так:

Код на Scala в этом случае в среднем в 1.64 раза медленее чем на Java c ссылкой на JMH

Также таким же отсуплением я пытаюсь выделить очень важные на мой взгляд вещи:

Одумайтесь! Не смейте покупать эту книгу! Она и так бесплатна.

Эта книга не было бы книгой Стаса Лозенко, если бы в нем не было моего личного мнения.
Вы не обязаны принимать его за истину, просто знайте, что в книге могут быть подобные
сноски:
¹http://openjdk.java.net/projects/code-tools/jmh/
Предисловие 2

Имеет смысл использовать Java в этом случае, так как Scala в итоге превращает
конструкцию с сильно большой вложенностью. На мой взгляд, это беспредел.

Любая техническая книга изобилует примерами кода. Здесь их будет довольно много:

1 trait Element[+B] {
2 def remove(pred: B): Element[B]
3 }

Запуск скриптов и команд в терминале используется только в контексте платформы MacOS


и скорее всего может не работать на других платформах. Сам код Scala унифицирован.

Весь код дублирован в моем git репозитории на GitHub².


В конце каждой главы будут даваться упражнения. Это сделано для закрепления материала.
К счастью для меня, на эти упражнения я не буду давать ответы в конце книги, поэтому
вся отвественность за выполнение будет ложиться лично на вас. Упражнения помечены как
звездочка являются трудновыполнимыми.
В некоторых главах, в конце, вы можете встречать вопросы на собеседованиях, которые я
задавал или считаю нужным задать.
Перед тем как погружаться в эту книгу, убедитесь что у вас все установлено правильно. Я
составил для этого специальную главу Дополнение А в конце книги.
Я надеюсь вы получите такое же удовольствие от прочтения, какое я получил от написания
этой книги.
Стас Лозенко
²https://github.com/lozenko/inside-scala-book
Scala и его компания
Экосистема
Scala³ - это мощный и в то же время популярный язык, у которого есть потрясающее
комьюнити.
Хотя на нем можно писать даже обыкновенные скрипты, компилировать Scala в нативный
код (проект Scala Native⁴) и даже JavaScript (проект ScalaJS⁵). На мой взгляд, успех Scala лежит
в плоскости микросервисной архитектуры, data processing и streaming. И на это есть ряд
причин.
C помощью Scala можно писать достаточно сложную бизнес логику, которая будет подчи-
няться одновременно функциональной и объектно-ориентированной парадигме, используя
при этом более легкие языковые конструкции. В связке с той же Akka⁶ цена и скорость
написания микросервиса, который выполняет свою задачу, сведена до минимума.
Также, некоторые cutting edge технологии мира распределенных систем были написаны
именно на Scala, в частности та же Akka, но здесь я бы хотел бы выделить известный каждому
бэкенд разработчику Spark⁷ и Kafka⁸.

Комьюнити
Scala не был бы таким популярным языком, если бы не огромная поддержка комьюнити.
Только взгляните насколько большое количество людей комитят в ветки по Scala, Akka и т.д.
в github. Внизу я бы хотел выделить пятерку, на мой взгляд, самых влиятельных людей.

Martin Odersky

³https://www.scala-lang.org/
⁴http://www.scala-native.org
⁵https://www.scala-js.org
⁶https://akka.io/
⁷https://spark.apache.org
⁸http://kafka.apache.org/
Scala и его компания 4

Scala создавался в стенах Федеральной политехнической школы Лозанны (EPFL) Мартином


Одерски в далеком 2001 году.

Логотип языка Scala, это не закрученный символ S, а лестница в здании EPFL

Именно Мартин считается главным идеологом языка до сих пор, поэтому его доклады на
конференциях являются всегда главными и часто открывают сами конференции.
Twitter Одерского: https://twitter.com/odersky

Jonas Bonér

Следующим после Martin Odersky числится Jonas Boner, который на пару с Мартином создал
компанию Typesafe, которая позже, в свое время, была переименована в Lightbend.
Lightbend⁹ считается одним из самых главных мейнтейнеров в такие проекты как Akka, Play,
Spray, Slick, SBT и так далее.
Twitter Jonas Boner: https://twitter.com/jboner
Личный сайт: https://jonasboner.com

Konrad Malawski

Считается одним из ведущих разработчиков Akka. Также учавствовал в создание Lagom. В


его github невероятно большое количество разных тулов, а его конференции, на мой взгляд,
самые интересные.
⁹https://www.lightbend.com/
Scala и его компания 5

Twitter Malawski: https://twitter.com/ktosopl

Eugene Yokota

Всеми известный, в узких кругах Scala сообщества, создатель SBT, Zinc. На момент написания
книги работает в Lightbend.
Twitter Yokota: https://twitter.com/eed3si9n

Heather Miller

Заведует Scala Center в EPFL, часть команды Odersky. Ее твиттер - это кладезь знаний.
Twitter Miller: https://twitter.com/heathercmiller
Естественно, это не все люди - их гораздо больше, начиная от команд EPFL и Lightbend,
заканчивая создателями книг, докладчиков конференций, архитекторов, евангелистов, кон-
сультантов а также огромному количеству контрибьюторов в репозитории связанные с Scala.

Компании

Книги

Online курсы

Игры
Дополнение А. Установка Scala
Java
Scala не может работать без Java, поэтому вам нужно установить Java JDK на свою платформу.
На момент написания книги мы пользуемся версией Scala 2.12.6, которая стабильно работает
только в связке Java 8. Если на данный момент вы используете Java версии выше, я рекомен-
дую вам снести ее и установить Java 8 на момент работы с книгой.

Лично я пользуюсь утилитой jenv¹⁰, которая используется для быстрого переключе-


ния версии Java. Вы можете установить столько версий Java сколько пожелаете и с
помощью терминала быстро переключаться.

Заходим на официальную страницу по установке Java SDK¹¹ . Далее находим, кнопку JDK
Download и скачиваем инсталлятор. После запускаем программу и кликаем next, next, next
пока не все не установиться.
Когда закончите процедуру, выполните проверку версии Java
проверка версии Java
1 � java -version
2 java version "1.8.0_151"
3 Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
4 Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

В выполнении версия Java должна быть 1.8.0_151 и выше.

Scala
Для работы c этой книгой, нам недостаточно установить Scala c помощью brew либо просто
запускать его с IDEA. Я рад, что сообщество Scala направлено на быстрое и интуитовное
пользование, но мы с вами находимся в моей лаборатории по исследованию языка, поэтому
нам нужен полноценный дистрибутив.
Мы будем разбирать весь SDK напрямую, поэтому нам придется воспользоваться мануаль-
ной установкой с официального сайта.
Подробные шаги:
¹⁰http://www.jenv.be/
¹¹http://www.oracle.com/technetwork/java/javase/downloads/index.html
Дополнение А. Установка Scala 7

1. Заходим на официальный [сайт](https//scala-lang.org).


2. Нажимаем кнопку **Download** и прокручиваем страницу загрузки в самый низ. Вы
должны увидеть список инсталяторов для вашей платформы. {caption: архив дистрибу-
тивов под разные платформы} ![](appendixA_archives.png)
3. Скачайте архив для вашей платформы и распакуйте его в надежном месте.

4. Укажите путь на распакованный инсталятор.

Для UNIX укажите перменную $SCALA_HOME на распакованный дистрибутив в .bash_profile:shell


export SCALA_HOME="/usr/local/scala-2.12.6/" export PATH="$PATH:$SCALA_HOME/bin"

Для Windows вам придется вбить похожую информацию в системные переменные


shell %SCALA_HOME% c:\soft\scala-2.12.6 %PATH% %PATH%;%SCALA_HOME%\bin

Мы это делаем для того, чтобы у нас был быстрый доступ к Scala REPL scala и компилятору
scalac. Правильным результатом установки будет успешно запущенная проверка версии
Scala.

1 > scala -version


2 Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, In\
3 c.

Если вы видите эту строчку, у вас все хорошо :)