Язык программирования Scala

Краткая справка

Scala была создана в начале 2000-ых годов в Федеральной политехнической школе города Лозанна (в Швейцарии). Руководителем команды, создавшей этот язык, был Мартин Одерски - знаменитый исследователь в области компьютерных наук. В январе 2004 года язык был выпущен для платформы JVM, а в июне того же года для .NET Framework (хотя поддержка для .NET была прекращена примерно в 2012 году). В 2016 году выпустили LLVM-компилятор.

В 2011 году Мартин Одерски основал Typesafe Inc(позднее она стала называться Lightbend Inc). На гранты, выделенные его команде для развития языка, компания осуществляет поддержку Scala-разработчиков и разрабатывает сервисы на этом языке, а также занимается продажей Scala-библиотек.

На язык оказали большое влияние другие языки, особенно много концепций было взято из Java и C#. Также были сделаны некоторые заимствования из Smalltalk, Ocaml и Beta.

Многие программисты и исследователи считают Scala следующей ступенью развития Java, особенно после того, как развитие последней затормозилось в связи с приобретением прав на неё компанией Oracle.

Философия Scala

Scala объединяет три подхода: статическую типизацию, ООП и функциональный подход. Это позволяет разрабатывать как маленькие скрипты, так и крупные распределенные системы.

Объектно-ориентированная парадигма сделана схожей с реализацией в Smalltalk, где все значения считаются объектами, а каждая операция рассматривается как отправка сообщения. В функциональном подходе в Scala каждая функция является значением, дается упрощенный синтаксис для определения некоторых типов функций (анонимных и каррированных), поддерживаются функции высшего порядка (и многие другие вещи, которые вы, возможно, не понимаете,если не изучаете функциональное программирование).

Интеграция с Java позволяет компилировать код, написанный на Scala, для JVM, а также использовать все java-библиотеки, созданные за всё время существования Java. Кстати, такая совместимость также позволяет писать приложения под Android. А компиляция в JavaScript дает возможность создавать веб-приложения (бэкенд).

В отличии от Java, в Scala изначально были добавлены лямбда-выражения, монады и другие элементы ФП. Хотя в Scala функциональный подход реализован не настолько полно, как в Haskell или Erlang, но зато в нем скомбинированы функциональный и объектно-ориентированный подходы, позволяя сочетать их.

Где применяется Scala

Scala может использоваться во всех проектах, в которых ранее использовалась Java (можно, например, просто переписать Java проект на Scala). Фреймворки Play(Scala и Java), Lift используются в таких проектах как Coursera и Foursquare. LinkedIn (социальная сеть) использует фреймворк Scalatra. В 2009 году твиттер перешел с Ruby на Scala, а двумя годами позже Guardian (онлайн-версия газеты) перешла на него с Java.

Фреймворк Apache Spark и проект Apache Kafka, по большей части, созданы на Scala. Благодаря Spark, Scala применяют для обработки больших данных(Big Data). Успешным также стало компиляция кода на Scala в JavaScript для написания клиентской и серверной части приложений.

Scala активно используется банками. В качестве иностранных компаний можно привести швейцарский банк UBS, а из отечественных - Сбербанк и Тинькофф.

Сложность обучения Scala

Для изучения Scala весьма рекомендуется изучить сначала Java, так как эти язык программирования часто пересекаются между собой и используют общие технологии. Также у Scala достаточно большой порог вхождения, поскольку требуется изучить не только ООП, но и функциональное программирование. Scala больше всего похожа на Java EE, которая используется для написания корпоративных приложений и больших систем, поэтому круг задач, которые решаются на ней конечно же рассчитан не для полных новичков.

Плюсы/минусы Scala

Из плюсов:

  • Перспективность. Рано или поздно, Scala может занять место Java, поэтому будет мудро начинать сразу с неё, чтобы не отставать от передних рубежей разработки в будущем;
  • Востребованность. Сейчас на Scala достаточно много вакансий (хоть и не так много, как для Java). Вы можете найти достаточно должностей для Scala-разработчика как в России, так и в иностранных компаниях;
  • Поддержка функционального программирования;
  • По производительности не уступает Java;
  • Совместимость с Java-библиотеками;
  • Хорошо подходит для больших команд разработчиков (благодаря статической типизации);
  • Синтаксис Scala проще, чем у Java, поэтому его хвалят за удобство написания кода;
  • Возможность написания приложений под Android (написание приложений под iOS теоретически возможно, однако считается довольно непрактичным).

Минусы:

  • Высокий порог вхождения. Обучиться на Scala будет достаточно сложно, но это связано скорее с тем, что на нем нужно решать более сложные задачи, связанные с Big Data и большими системами. Также требуются определенные знания по языку Java;
  • Плохая поддержка со стороны IDE (например, в Eclipse. Хотя с развитием языка ситуация постепенно исправляется);
  • Непривычная для опытных разработчиков, перешедших с других языков, реализация ООП и функционального программирования;
  • Не подходит для системного программирования (там, где обычно используется язык C). Также Scala не используется для создания десктопных приложений;
  • Более низкая скорость компиляция (чем, например, в Go).

Сопутствующие технологии

Play Framework - фреймворк для разработки приложений на Java и Scala, чем то похож на Ruby on Rails и Django. Используется многими СМИ (Guardian, BBC, Gawker).

Lift - фреймворк, для создания веб-приложений, предоставляющий возможности, схожие с Ruby on Rails.

Scala JS - компилятор, который позволяет писать код на Scala в код, а затем переводить его в JavaScript для написания веб-приложений.

Scala Native — компилятор, основанный на LLVM. Позволяет писать на Scala очень производительный код и задействовать структуры данных низкого уровня

ScalaFX - библиотека, которая является оберткой для другой известной библиотеки - JavaFX Sbt(Scala build tool) - система, предназначенная для автоматической сборки проектов, написанных на Java и Scala. Написана на Scala