Scala

Материал из Xgu.ru

Перейти к: навигация, поиск

Scala — мультипарадигменный язык программирования, с сильной поддержкой функциональной и объектно-ориентированной парадигм, предназначенный для использования поверх JVM. Обладает многими чертами присущими ML-языкам, Lisp, Haskell с одной стороны и C и Java с другой. Создан Мартином Одерским в 2003 году и с тех пор постоянно совершенствуется.

Scala широко используется во многих коммерчески-успешных компаниях, в том числе в LinkedIn[1], Foursquare[2] и множество других, прежде всего стартапов[3].Наиболее известным пользователем Scala является Twitter[4][5].

Отличительные характеристики/преимущества языка:

  • Доступ к огромному количеству существующих Java-библиотек;
  • Большое количество библиотек, написанных уже для Scala и на Scala;
  • Сравнительно высокая скорость (в 2-3 медленнее Си[6][7]);
  • Большая развитая экосистема;
  • Лёгкость создания DSL (Domain Specific language);
  • Развитая система типов;
  • Используется в ряде мощных Интернет-компаний (Twitter, LinkedIn, Foursquare);
  • Наиболее распространнёный в промышленности функциональный язык программирования;
  • Существует ряд развитых web-фреймворков, например, Play, Scalatra и ряд других;
  • Существует ряд развитых фреймворков для использования с Hadoop, например, Scalding;
  • Существует реализация системы акторов по принципу Эрланга (Akka);
  • Хорошая поддержка графического интерфейс (Swing, JavaFX);
  • Хорошая сборочная система, SBT;
  • Есть хорошая поддержка Eclipse (плюс для тех кто использует Eclipse, остальным всё равно);
  • Есть библиотека Scalaz, которая позволяет писать на Scala как на действительно функциональном языке программирования.

Минусами (относительными, субъективными) языка можно назвать:

  • Сложность, сравнительно высокий порог вхождения;
  • Перегруженность языка (в каком-то смысле напоминает Perl для JVM, хотя, конечно же, это не так).


Содержание

[править] Web- и REST-фреймворки

Web-фреймворки:

  • Lift
  • Play
  • Xitrum

REST-фреймворки:

  • Unfiltered
  • Scalatra
  • Spray
  • BlueEyes
  • Circumflex

Особое внимание стоит обратить на BlueEyes.

Ещё на эту тему:

[править] Платформы

Основной платформой языка Scala является JVM.

Кроме этого существует Scala.js, компилятор Scala в JavaScript.

Были попытки заставить Scala работать на LLVM, но они так и остались в очень сыром состоянии

Древние версии Scala так же работали на .Net.

[править] Вопросы и ответы

[править] Полезные мелочи

[править] Подсветка синтаксиса Scala в Vim

mkdir -p ~/.vim/{ftdetect,indent,syntax} && for d in ftdetect indent syntax ; do curl -o ~/.vim/$d/scala.vim https://raw.github.com/scala/scala-dist/master/tool-support/src/vim/$d/scala.vim; done

Источник: [1].

[править] Дополнительная информация

Руководства и учебники:

Scala для функционального программирования (в основном всё связано со Scalaz):

  • scalaz/scalaz (англ.) — библиотека scalaz
  • Good scalaz introduction Stackoverflow.png — обсуждение по теме, что почитать про scalaz
  • learning Scalaz (англ.) — фрагмент книги, посвящённой библиотеке scalaz, библиотеке для функционального программирования на Scala
  • Functional Programming in Scala (англ.) — книга по функциональному программированию на Scala, пока что не готова
  • My Take on Haskell vs Scala (англ.) — небольшое сравнение Haskell и Scala

Различные вопросы, ответы и обсуждения:

Сравнение языков (всё познаётся в сравнении):

Критика и обсуждение слабых мест:

Онлайн-службы:

[править] Примечания

  1. http://www.thedailybeast.com/blogs-and-stories/2010-09-29/linkedin-signal-combines-twitter-with-the-resume-site/
  2. http://www.scala-lang.org/node/5130
  3. https://www.quora.com/Scala/Which-startups-are-using-Scala-as-their-main-language
  4. http://www.artima.com/scalazine/articles/twitter_on_scala.html
  5. http://www.readwriteweb.com/hack/2011/07/twitter-java-scala.php
  6. http://benchmarksgame.alioth.debian.org/u32/which-programs-are-fastest.php
  7. http://readwrite.com/2011/06/06/cpp-go-java-scala-performance-benchmark#awesm=~oj0J4QpRSVHDf8
Источник — «http://5.9.243.178:81/wiki/Scala»
На других языках